();
- for (const set of team) {
- let species = this.dex.species.get(set.species);
- while (species.prevo) {
- species = this.dex.species.get(species.prevo);
- }
- if (familyTable.has(species.id)) {
- return [
- `You are limited to one Pokémon from each family by the Family Clause.`,
- `(You have more than one evolution of ${species.name}.)`,
- ];
- }
- familyTable.add(species.id);
- }
- },
- battle: {
- tiebreak() {
- if (this.ended) return false;
-
- this.inputLog.push(`>tiebreak`);
- this.add('message', "Time's up! Going to tiebreaker...");
- const notFainted = this.sides.map(side => (
- side.pokemon.filter(pokemon => !pokemon.fainted).length
- ));
- this.add('-message', this.sides.map((side, i) => (
- `${side.name}: ${notFainted[i]} Pokemon left`
- )).join('; '));
- const maxNotFainted = Math.max(...notFainted);
- let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpPercentage = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
- )).join('; '));
- const maxPercentage = Math.max(...hpPercentage);
- tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpTotal = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpTotal[i])} total HP left`
- )).join('; '));
- const maxTotal = Math.max(...hpTotal);
- tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
- return this.tie();
- },
- checkWin(faintData) {
- const team1PokemonLeft = this.sides[0].pokemonLeft;
- const team2PokemonLeft = this.sides[1].pokemonLeft;
- if (!team1PokemonLeft && !team2PokemonLeft) {
- this.win(faintData?.target.side || null);
- return true;
- }
- for (const side of this.sides) {
- if (!side.pokemonLeft) {
- this.win(side);
- return true;
- }
- }
- },
- },
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause', 'Evasion Clause', 'Tier Shift Mod'],
+ banlist: [
+ 'Arceus', 'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Medicham', 'Miraidon', 'Necrozma-Dusk-Mane', 'Zacian-Crowned', 'Drizzle', 'Moody', 'Arena Trap', 'Shadow Tag',
+ 'Baton Pass', 'Last Respects', 'Shed Tail', 'Heat Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang',
+ ],
+ unbanlist: ['Arceus-Bug', 'Arceus-Grass', 'Arceus-Ice'],
},
{
name: "[Gen 9] Trademarked",
@@ -3128,20 +3217,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard Doubles', 'NatDex Mod', '!Gravity Sleep Clause'],
banlist: ['Shedinja', 'Assist'],
},
- {
- name: "[Gen 9] National Dex Ubers UU",
- mod: 'gen9',
- searchShow: false,
- ruleset: ['[Gen 9] National Dex Ubers'],
- banlist: [
- 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Ditto', 'Dondozo', 'Eternatus', 'Giratina-Origin', 'Groudon-Primal',
- 'Hatterene', 'Ho-Oh', 'Kingambit', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Salamence-Mega', 'Smeargle', 'Yveltal',
- 'Zacian-Crowned', 'Zygarde-50%',
- // UUBL
- 'Arceus-Dragon', 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Chien-Pao', 'Dracovish', 'Flutter Mane', 'Groudon',
- 'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects',
- ],
- },
{
name: "[Gen 9] National Dex 1v1",
mod: 'gen9',
@@ -3401,21 +3476,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
banlist: ['Uber', 'Arena Trap', 'Moody', 'Power Construct', 'Shadow Tag', 'King\'s Rock', 'Light Clay', 'Quick Claw', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'],
},
- // Randomized Format Spotlight
- ///////////////////////////////////////////////////////////////////
-
- {
- section: "Randomized Format Spotlight",
- column: 3,
- },
- {
- name: "[Gen 9] BSS Factory (Bo3)",
- desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
- mod: 'gen9',
- team: 'randomBSSFactory',
- ruleset: ['Flat Rules', 'VGC Timer', 'Best of = 3'],
- },
-
// Randomized Metas
///////////////////////////////////////////////////////////////////
@@ -3430,50 +3490,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
team: 'random',
bestOfDefault: true,
},
- {
- name: "[Gen 9] Monkey's Paw Random Battle",
- desc: `Every Pokemon can wish for something with the Monkey's Paw once.`,
- mod: 'monkeyspaw',
- team: 'random',
- ruleset: ['[Gen 9] Random Battle'],
- onBegin() {
- for (const side of this.sides) {
- // @ts-expect-error I hate references with all of my life force
- side.wishes = { luck: 1, knowledge: 1, power: 1, life: 1 };
- // @ts-expect-error
- side.wishesRemaining = 4;
- }
- let buf = `What does which wish do?
`;
- buf += `What does which wish do?
`;
- buf += `• Mega Evolution: Wish for life – Revive one fainted Pokemon
`;
- buf += `• Mega Evolution X: Wish for power – Gain a +2 boost in the current Pokemon's dominant attack and defense stat
`;
- buf += `• Mega Evolution Y: Wish for luck – Give the current Pokemon innate Serene Grace + Focus Energy for the rest of the game
`;
- buf += `• Terastallize: Wish for knowledge – Scout the active Pokemon for one of their moves
`;
- buf += ` `;
- this.add('message', `You've found a Monkey's Paw. You have 4 wishes.`);
- this.add(`raw|${buf}`);
- },
- onSwitchIn(pokemon) {
- if (pokemon.m.revivedByMonkeysPaw) {
- pokemon.addVolatile('slowstart', null, this.dex.conditions.get('monkeypaw'));
- }
- if (pokemon.m.monkeyPawLuck) {
- pokemon.addVolatile('focusenergy');
- pokemon.addVolatile('confusion', null, this.dex.conditions.get('monkeypaw'));
- }
- },
- onModifyMovePriority: -2,
- onModifyMove(move, pokemon) {
- if (!pokemon.m.monkeyPawLuck) return;
- if (move.secondaries) {
- this.debug('doubling secondary chance');
- for (const secondary of move.secondaries) {
- if (secondary.chance) secondary.chance *= 2;
- }
- }
- if (move.self?.chance) move.self.chance *= 2;
- },
- },
{
name: "[Gen 9] Super Staff Bros Ultimate",
desc: "The fifth iteration of Super Staff Bros is here! Battle with a random team of pokemon created by the sim staff.",
@@ -3590,6 +3606,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
this.add(`raw|Battle Factory Tier: ${this.teamGenerator.factoryTier}
`);
},
},
+ {
+ name: "[Gen 9] 1v1 Factory",
+ desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
+ threads: [`• 1v1 Factory Set Discussion`],
+ mod: 'gen9',
+ team: 'random1v1Factory',
+ bestOfDefault: true,
+ ruleset: ['[Gen 9] 1v1'],
+ },
{
name: "[Gen 9] BSS Factory",
desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
@@ -4062,42 +4087,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
- // RoA Spotlight
- ///////////////////////////////////////////////////////////////////
-
- {
- section: "RoA Spotlight",
- column: 4,
- },
- {
- name: "[Gen 2] Ubers",
- mod: 'gen2',
- // searchShow: false,
- ruleset: ['Standard'],
- },
- {
- name: "[Gen 5] LC",
- mod: 'gen5',
- // searchShow: false,
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
- banlist: [
- 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
- 'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
- ],
- },
- {
- name: "[Gen 7] VGC 2017",
- mod: 'gen7sm',
- gameType: 'doubles',
- // searchShow: false,
- bestOfDefault: true,
- ruleset: [
- 'Flat Rules', 'Old Alola Pokedex', '!! Adjust Level = 50', 'Min Source Gen = 7',
- 'VGC Timer', '!! Timer Starting = 900',
- ],
- banlist: ['Mega', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'],
- },
-
// Past Gens OU
///////////////////////////////////////////////////////////////////
@@ -4565,16 +4554,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 7] Doubles OU'],
banlist: ['DOU', 'DBL'],
},
- {
- name: "[Gen 7] VGC 2019",
- mod: 'gen7',
- gameType: 'doubles',
- searchShow: false,
- bestOfDefault: true,
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', 'Limit Two Restricted'],
- restricted: ['Restricted Legendary'],
- banlist: ['Unown', 'Battle Bond'],
- },
{
name: "[Gen 7] VGC 2018",
mod: 'gen7',
@@ -4584,6 +4563,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', '!! Timer Starting = 300'],
banlist: ['Oranguru + Symbiosis', 'Passimian + Defiant', 'Unown', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry', 'Battle Bond'],
},
+ {
+ name: "[Gen 7] VGC 2017",
+ mod: 'gen7sm',
+ gameType: 'doubles',
+ searchShow: false,
+ bestOfDefault: true,
+ ruleset: [
+ 'Flat Rules', 'Old Alola Pokedex', '!! Adjust Level = 50', 'Min Source Gen = 7',
+ 'VGC Timer', '!! Timer Starting = 900',
+ ],
+ banlist: ['Mega', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'],
+ },
{
name: "[Gen 7] Battle Spot Doubles",
mod: 'gen7',
@@ -4854,6 +4845,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
banlist: ['Latios'],
unbanlist: ['Cloyster'],
},
+ {
+ name: "[Gen 5] LC",
+ mod: 'gen5',
+ searchShow: false,
+ ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
+ banlist: [
+ 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
+ 'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
+ ],
+ },
{
name: "[Gen 5] 1v1",
desc: `Bring three Pokémon to Team Preview and choose one to battle.`,
@@ -5162,13 +5163,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Past Generations",
column: 4,
},
- {
- name: "[Gen 3] Ubers",
- mod: 'gen3',
- searchShow: false,
- ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
- banlist: ['Wobbuffet + Leftovers', 'Wynaut + Leftovers', 'Baton Pass'],
- },
{
name: "[Gen 3] RU",
mod: 'gen3',
@@ -5285,6 +5279,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
debug: true,
ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
},
+ {
+ name: "[Gen 2] Ubers",
+ mod: 'gen2',
+ searchShow: false,
+ ruleset: ['Standard'],
+ },
{
name: "[Gen 2] UU",
mod: 'gen2',
@@ -5433,17 +5433,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: ['[Gen 1] OU', 'Allow Tradeback'],
},
- {
- name: "[Gen 1] NC 1997",
- mod: 'gen1jpn',
- bestOfDefault: true,
- searchShow: false,
- ruleset: [
- 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
- 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'Cancel Mod', 'NC 1997 Move Legality',
- ],
- banlist: ['Uber'],
- },
{
name: "[Gen 1] Custom Game",
mod: 'gen1',
diff --git a/data/aliases.ts b/data/aliases.ts
index a56fc4ab90..72eb6bfa03 100644
--- a/data/aliases.ts
+++ b/data/aliases.ts
@@ -91,10 +91,10 @@ export const Aliases: import('../sim/dex').AliasesTable = {
zaou: "[Gen 9] Legends Z-A OU",
legendsou: "[Gen 9] Legends Z-A OU",
plzaou: "[Gen 9] Legends Z-A OU",
- omotm: "[Gen 9] Tier Shift",
- lcotm: "[Gen 9] Bio Mech Mons",
- ommotm: "[Gen 9] NatDex Camove Chaos",
- ommspotlight: "[Gen 9] NatDex Camove Chaos",
+ omotm: "[Gen 9] Flipped",
+ lcotm: "[Gen 9] The Loser's Game",
+ ommotm: "[Gen 9] STABmons Mix and Mega",
+ ommspotlight: "[Gen 9] STABmons Mix and Mega",
// mega evos --- 1st ordered alphabetically by species, 2nd by alias
megasnow: "Abomasnow-Mega",
From aa592f27424f17fa45e911e51637dd60bf924880 Mon Sep 17 00:00:00 2001
From: demir
Date: Sun, 1 Feb 2026 22:06:51 +0300
Subject: [PATCH 050/233] 35 Pokes: Update list of allowed Pokemon for February
2026 (#11738)
---
config/formats.ts | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 1467900717..f8ac65636a 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3122,14 +3122,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [
],
banlist: [
'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
- 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'King\'s Rock', 'Quick Claw', 'Razor Fang',
- 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin',
+ 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw',
+ 'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
],
unbanlist: [
- 'Carracosta', 'Celebi', 'Cinccino', 'Cobalion', 'Cradily', 'Dedenne', 'Fezandipiti', 'Gabite', 'Granbull', 'Greedent', 'Hatterene', 'Heatmor',
- 'Houndstone', 'Indeedee-M', 'Lilligant-Base', 'Medicham-Base', 'Orbeetle', 'Oricorio-Pom-Pom', 'Overqwil', 'Pincurchin', 'Pinsir-Base', 'Rotom-Wash',
- 'Samurott-Base', 'Scovillain-Base', 'Sharpedo-Base', 'Shedinja', 'Shiftry', 'Steelix-Base', 'Tropius', 'Type: Null', 'Typhlosion-Hisui', 'Tyrantrum',
- 'Veluza', 'Vivillon', 'Whimsicott', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z',
+ 'Articuno-Galar', 'Aurorus', 'Bellossom', 'Bewear', 'Blastoise-Base', 'Dodrio', 'Entei', 'Falinks-Base', 'Flygon', 'Furret', 'Goodra-Hisui',
+ 'Gumshoos-Base', 'Heliolisk', 'Hydrapple', 'Indeedee-F', 'Iron Thorns', 'Leavanny', 'Lickilicky', 'Ludicolo', 'Maractus', 'Meganium-Base',
+ 'Polteageist', 'Probopass', 'Regieleki', 'Rhyperior', 'Seismitoad', 'Shiinotic', 'Slaking', 'Spidops', 'Spiritomb', 'Unfezant', 'Vanilluxe',
+ 'Victreebel-Base', 'Weezing-Galar', 'Wyrdeer', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z',
],
// Stupid hardcode
onValidateSet(set, format, setHas, teamHas) {
From d6cae3648717247998b9a3f2de2a9d7f84cd2289 Mon Sep 17 00:00:00 2001
From: HiZo <96159984+HisuianZoroark@users.noreply.github.com>
Date: Sun, 1 Feb 2026 14:15:36 -0500
Subject: [PATCH 051/233] Fortemons: Allow validator to work with unlearnable
moves when prompted (#11736)
* Fortemons: allow validator to work with unlearnable moves when prompted
* Apply suggestion from @KrisXV
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index f8ac65636a..e2148ebbbf 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -1551,7 +1551,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
set.item = '';
const problems = this.validateSet(set, teamHas) || [];
set.item = item;
- if (this.checkCanLearn(move, species, this.allSources(species), set)) {
+ if (this.ruleTable.has('obtainablemoves') && this.checkCanLearn(move, species, this.allSources(species), set)) {
problems.push(`${species.name} can't learn ${move.name}.`);
}
if (set.moves.map(this.toID).includes(move.id)) {
From 5f1667c2f4ee4a8d06888c13bb9b282b7421d437 Mon Sep 17 00:00:00 2001
From: surfnWOB
Date: Sun, 1 Feb 2026 14:26:39 -0500
Subject: [PATCH 052/233] ADV 200 Doubles: Ban Wobbuffet and Wynaut (#11732)
---
config/formats.ts | 1 -
1 file changed, 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index e2148ebbbf..692f7812dd 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5245,7 +5245,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: ['Standard', '!Switch Priority Clause Mod'],
banlist: ['Uber', 'Quick Claw', 'Soul Dew', 'Swagger'],
- unbanlist: ['Wobbuffet', 'Wynaut'],
},
{
name: "[Gen 3] Orre Colosseum",
From d3f68854352bb97a4a05a2432e7e05a6bb4854c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 1 Feb 2026 19:26:56 +0000
Subject: [PATCH 053/233] Fix Pursuit interaction with Choice items in Gens 3
and 4 (#11735)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Reapply "Gens 3-4: Truant, Sleep and Freeze should block Pursuit activation (#…" (#11733)
This reverts commit 2180a5c998b9c930863c5734ab7500bbd301952a.
* Fix Pursuit interaction with Choice items in Gens 3 and 4
* Fix
---
data/mods/gen2/moves.ts | 11 +++
data/mods/gen4/moves.ts | 19 +++++-
test/sim/moves/pursuit.js | 139 ++++++++++++++++++++++++++++++++------
3 files changed, 146 insertions(+), 23 deletions(-)
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index 1aadb96470..c6ad3efc10 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -573,6 +573,17 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
pursuit: {
inherit: true,
+ beforeTurnCallback(pokemon) {
+ for (const side of this.sides) {
+ if (side.hasAlly(pokemon)) continue;
+ side.addSideCondition('pursuit', pokemon);
+ const data = side.getSideConditionData('pursuit');
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
+ }
+ },
onModifyMove() {},
condition: {
duration: 1,
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index d6ad9cf3c5..38282c5cbe 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1332,6 +1332,19 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
pursuit: {
inherit: true,
+ beforeTurnCallback(pokemon) {
+ if (['frz', 'slp'].includes(pokemon.status) || (pokemon.hasAbility('truant') &&
+ (pokemon.volatiles['truant'] || pokemon.truantTurn))) return;
+ for (const side of this.sides) {
+ if (side.hasAlly(pokemon)) continue;
+ side.addSideCondition('pursuit', pokemon);
+ const data = side.getSideConditionData('pursuit');
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
+ }
+ },
condition: {
duration: 1,
onBeforeSwitchOut(pokemon) {
@@ -1354,7 +1367,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
}
- this.actions.runMove('pursuit', source, source.getLocOf(pokemon));
+ const move = this.dex.getActiveMove('pursuit');
+ source.moveUsed(move, pokemon.position);
+ if (this.actions.useMove(move, source, { target: pokemon }) && source.getItem().isChoice) {
+ source.addVolatile('choicelock');
+ }
}
},
},
diff --git a/test/sim/moves/pursuit.js b/test/sim/moves/pursuit.js
index 504a0a548c..f66de5b62d 100644
--- a/test/sim/moves/pursuit.js
+++ b/test/sim/moves/pursuit.js
@@ -35,28 +35,6 @@ describe(`Pursuit`, () => {
assert.bounded(damage, [256, 304], 'Actual damage: ' + damage);
});
- it(`should continue the switch in Gen 3`, () => {
- battle = common.gen(3).createBattle([[
- { species: "Tyranitar", ability: 'sandstream', moves: ['pursuit'] },
- ], [
- { species: "Alakazam", ability: 'magicguard', moves: ['psyshock'] },
- { species: "Clefable", ability: 'unaware', moves: ['calmmind'] },
- ]]);
- battle.makeChoices('move Pursuit', 'switch 2');
- assert(battle.p2.active[0].hp);
- });
-
- it(`should continue the switch in Gen 4`, () => {
- battle = common.gen(4).createBattle([[
- { species: "Tyranitar", ability: 'sandstream', moves: ['pursuit'] },
- ], [
- { species: "Alakazam", ability: 'magicguard', moves: ['psyshock'] },
- { species: "Clefable", ability: 'unaware', moves: ['calmmind'] },
- ]]);
- battle.makeChoices('move Pursuit', 'switch 2');
- assert(battle.p2.active[0].hp);
- });
-
it(`should not repeat`, () => {
battle = common.createBattle([[
{ species: "Beedrill", ability: 'swarm', item: 'beedrillite', moves: ['pursuit'] },
@@ -146,4 +124,121 @@ describe(`Pursuit`, () => {
battle.makeChoices('move pursuit 1, move sleeptalk', 'auto');
assert.false.fullHP(gengar);
});
+
+ it(`should be able to be paralyzed to prevent activation`, () => {
+ battle = common.createBattle({ forceRandomChance: true }, [[
+ { species: "Tyranitar", moves: ['pursuit', 'sleeptalk'] },
+ ], [
+ { species: "Jolteon", moves: ['thunderwave'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ ]]);
+ const jolteon = battle.p2.pokemon[0];
+ battle.makeChoices('move sleeptalk', 'move thunderwave');
+ assert.equal(battle.p1.active[0].status, 'par');
+ battle.makeChoices('move pursuit', 'switch 2');
+ assert.fullHP(jolteon);
+ });
+
+ describe(`[Gen 4]`, () => {
+ it(`should continue the switch`, () => {
+ battle = common.gen(4).createBattle([[
+ { species: "Tyranitar", ability: 'sandstream', moves: ['pursuit'] },
+ ], [
+ { species: "Alakazam", ability: 'magicguard', moves: ['psyshock'] },
+ { species: "Clefable", ability: 'unaware', moves: ['calmmind'] },
+ ]]);
+ battle.makeChoices('move Pursuit', 'switch 2');
+ assert(battle.p2.active[0].hp);
+ });
+
+ it(`should not activate if the user is asleep at the beginning of the turn`, () => {
+ battle = common.gen(4).createBattle([[
+ { species: "Tyranitar", moves: ['pursuit'] },
+ ], [
+ { species: "Breloom", moves: ['spore'] },
+ { species: "Breloom", moves: ['sleeptalk'] },
+ ]]);
+ battle.makeChoices('move pursuit', 'move spore');
+ assert.equal(battle.p1.active[0].status, 'slp');
+ while (battle.p1.active[0].status === 'slp') {
+ battle.makeChoices('move pursuit', 'switch 2');
+ }
+ // Tyranitar woke up and used Pursuit
+ const activeBreloom = battle.p2.active[0];
+ assert.bounded(activeBreloom.maxhp - activeBreloom.hp, [33, 40]);
+ assert.fullHP(battle.p2.pokemon[1].hp);
+ });
+
+ it(`should be able to be paralyzed to prevent activation`, () => {
+ battle = common.gen(4).createBattle({ forceRandomChance: true }, [[
+ { species: "Tyranitar", moves: ['pursuit', 'sleeptalk'] },
+ ], [
+ { species: "Jolteon", moves: ['thunderwave'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ ]]);
+ const jolteon = battle.p2.pokemon[0];
+ battle.makeChoices('move sleeptalk', 'move thunderwave');
+ assert.equal(battle.p1.active[0].status, 'par');
+ battle.makeChoices('move pursuit', 'switch 2');
+ assert.false.fullHP(jolteon);
+ });
+ });
+
+ describe(`[Gen 3]`, () => {
+ it(`should continue the switch`, () => {
+ battle = common.gen(3).createBattle([[
+ { species: "Tyranitar", ability: 'sandstream', moves: ['pursuit'] },
+ ], [
+ { species: "Alakazam", ability: 'magicguard', moves: ['psyshock'] },
+ { species: "Clefable", ability: 'unaware', moves: ['calmmind'] },
+ ]]);
+ battle.makeChoices('move Pursuit', 'switch 2');
+ assert(battle.p2.active[0].hp);
+ });
+ });
+
+ describe(`[Gen 2]`, () => {
+ it(`should continue the switch`, () => {
+ battle = common.gen(2).createBattle([[
+ { species: "Tyranitar", moves: ['pursuit'] },
+ ], [
+ { species: "Alakazam", moves: ['psyshock'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ ]]);
+ battle.makeChoices('move Pursuit', 'switch 2');
+ assert(battle.p2.active[0].hp);
+ });
+
+ it(`should try to activate even if the user is asleep at the beginning of the turn`, () => {
+ battle = common.gen(2).createBattle([[
+ { species: "Paras", moves: ['pursuit'], evs: { spa: 252 } },
+ ], [
+ { species: "Parasect", moves: ['spore'], evs: { hp: 252, spd: 252 } },
+ { species: "Parasect", moves: ['sleeptalk'], evs: { hp: 252, spd: 252 } },
+ ]]);
+ battle.makeChoices('move pursuit', 'move spore');
+ assert.equal(battle.p1.active[0].status, 'slp');
+ while (battle.p1.active[0].status === 'slp') {
+ battle.makeChoices('move pursuit', 'switch 2');
+ }
+ // Paras woke up and used Pursuit
+ assert.fullHP(battle.p2.active[0].hp);
+ const inactiveParasect = battle.p2.pokemon[1];
+ assert.bounded(inactiveParasect.maxhp - inactiveParasect.hp, [42, 50]);
+ });
+
+ it(`should be able to be paralyzed to prevent activation`, () => {
+ battle = common.gen(2).createBattle({ forceRandomChance: true }, [[
+ { species: "Tyranitar", moves: ['pursuit', 'sleeptalk'] },
+ ], [
+ { species: "Jolteon", moves: ['thunderwave'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ ]]);
+ const jolteon = battle.p2.pokemon[0];
+ battle.makeChoices('move sleeptalk', 'move thunderwave');
+ assert.equal(battle.p1.active[0].status, 'par');
+ battle.makeChoices('move pursuit', 'switch 2');
+ assert.fullHP(jolteon);
+ });
+ });
});
From fcd41c87a108000b6ade7b2b4a8129375f9aa298 Mon Sep 17 00:00:00 2001
From: Yoshiblaze <53023564+Yoshiblaze@users.noreply.github.com>
Date: Sun, 1 Feb 2026 14:49:08 -0500
Subject: [PATCH 054/233] Add New Pet Mod of the Season, Six by Six Random
Battle, and Remove Previous PMOTM (#11737)
* Delete data/random-battles/scootopiav2 directory
* 6x6 Part 1
* Delete data/mods/scootopiav2 directory
* 6x6 Pt 2
* 6x6 Pt 3
---
config/formats.ts | 53 +-
data/mods/scootopiav2/abilities.ts | 135 -
data/mods/scootopiav2/conditions.ts | 67 -
data/mods/scootopiav2/formats-data.ts | 218 -
data/mods/scootopiav2/items.ts | 88 -
data/mods/scootopiav2/learnsets.ts | 4473 -----------------
data/mods/scootopiav2/moves.ts | 1284 -----
data/mods/scootopiav2/pokedex.ts | 551 --
data/mods/scootopiav2/rulesets.ts | 38 -
data/mods/scootopiav2/typechart.ts | 530 --
data/mods/sixbysix/formats-data.ts | 113 +
data/mods/sixbysix/items.ts | 32 +
data/mods/sixbysix/learnsets.ts | 2580 ++++++++++
data/mods/sixbysix/pokedex.ts | 542 ++
data/mods/sixbysix/rulesets.ts | 17 +
.../mods/{scootopiav2 => sixbysix}/scripts.ts | 6 +-
.../scootopiav2/random-sets.json | 856 ----
data/random-battles/sixbysix/random-sets.json | 557 ++
.../{scootopiav2 => sixbysix}/teams.ts | 1961 ++++----
19 files changed, 4829 insertions(+), 9272 deletions(-)
delete mode 100644 data/mods/scootopiav2/abilities.ts
delete mode 100644 data/mods/scootopiav2/conditions.ts
delete mode 100644 data/mods/scootopiav2/formats-data.ts
delete mode 100644 data/mods/scootopiav2/items.ts
delete mode 100644 data/mods/scootopiav2/learnsets.ts
delete mode 100644 data/mods/scootopiav2/moves.ts
delete mode 100644 data/mods/scootopiav2/pokedex.ts
delete mode 100644 data/mods/scootopiav2/rulesets.ts
delete mode 100644 data/mods/scootopiav2/typechart.ts
create mode 100644 data/mods/sixbysix/formats-data.ts
create mode 100644 data/mods/sixbysix/items.ts
create mode 100644 data/mods/sixbysix/learnsets.ts
create mode 100644 data/mods/sixbysix/pokedex.ts
create mode 100644 data/mods/sixbysix/rulesets.ts
rename data/mods/{scootopiav2 => sixbysix}/scripts.ts (95%)
delete mode 100644 data/random-battles/scootopiav2/random-sets.json
create mode 100644 data/random-battles/sixbysix/random-sets.json
rename data/random-battles/{scootopiav2 => sixbysix}/teams.ts (94%)
diff --git a/config/formats.ts b/config/formats.ts
index 692f7812dd..ef305c1447 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3384,21 +3384,19 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Pet Mods",
},
{
- name: "[Gen 9] Scootopia Random Battle",
- desc: `A Gen 9 Fakemon micrometa featuring the Super Types mechanic, granting 1 Pokemon per team an additional and powerful new typing.`,
- mod: 'scootopiav2',
- team: 'randomSC',
+ name: "[Gen 9] Six by Six Random Battle",
+ desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
+ mod: 'sixbysix',
+ team: 'random6x6',
ruleset: [
'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod',
- 'Terastal Clause', 'Super Type Moves Rule', 'Data Preview', 'Sprite Viewer',
+ 'Terastal Clause', 'Data Preview', 'Sprite Viewer',
],
onBegin() {
- this.add(`raw|Need help with all of the new moves, abilities, and wacky stuff?
Then make sure to check out the Scootopia Spreadsheet or use /dt! `);
- this.add('-message', `Welcome to Scootopia!`);
- this.add('-message', `This is a fakemon micrometa created by Scoopapa, featuring the Super Types mechanic!`);
- this.add('-message', `Super Types are powerful additional types that a Pokemon can gain by holding a specific Super Type Orb!`);
+ this.add('-message', `Welcome to Six by Six!`);
+ this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3742131/`);
+ this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
},
onSwitchInPriority: 100,
onSwitchIn(pokemon) {
@@ -3410,32 +3408,31 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 9] Scootopia", // Roomtours
- desc: `A Gen 9 Fakemon micrometa featuring the Super Types mechanic, granting 1 Pokemon per team an additional and powerful new typing.`,
- mod: 'scootopiav2',
+ name: "[Gen 9] Six by Six", // Roomtours
+ desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
+ mod: 'sixbysix',
searchShow: false,
- ruleset: ['Standard NatDex', 'Terastal Clause', 'Z-Move Clause', 'Super Type Moves Rule', 'Data Preview', 'Sprite Viewer'],
+ ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', 'Terastal Clause', 'Data Preview', 'Sprite Viewer'],
banlist: [
- 'All Pokemon', 'Crystal Heart', 'Wild Heart',
+ 'All Pokemon', 'Last Respects', 'Shed Tail',
'King\'s Rock', 'Razor Fang', 'Baton Pass',
],
unbanlist: [
- 'Arbrella', 'Krachiten', 'Scalaron', 'Rantler', 'Woolora', 'Albatrygon', 'Orchile',
- 'Embuck', 'Cindoe', 'Cobracotta', 'Minillow', 'Crossont', 'Torgeist', 'Platypad', 'Lumoth',
- 'Aurorowl', 'Carapex', 'Dojodo', 'Nunopod', 'Zeploom', 'Brawnkey', 'Salamalix', 'Cinnastar',
- 'MuabBoa', 'Sturgard', 'Harzodia', 'Cyllindrake', 'Kodokai', 'Electangle', 'Dolphena', 'Soleron',
- 'Soleron-Awakened', 'Jaegorm', 'Jaegorm-Collective', 'Elemadillo', 'Axolacred', 'Roscenti',
- 'Blunderbusk', 'Barracoth', 'Jamborai', 'Dracoil', 'Celespirit', 'Noxtrice', 'Avastar',
- 'Faerenheit', 'Cellsius', 'Kelven', 'Salaos', 'Morndos', 'Pythos', 'Corundell', 'Quadringo',
- 'Saphor', 'Fenreil', 'Efflor', 'Flocura', 'Flocura-Nexus',
+ 'Kingdra-Classic', 'Kingdra-Brinepool', 'Kingdra-Druid', 'Kingdra-Bard', 'Kingdra-Gourmet', 'Kingdra-Ancient',
+ 'Nidoqueen-Classic', 'Nidoqueen-Erudite', 'Nidoqueen-Volcanic',
+ 'Nidoqueen-Rosegold', 'Nidoqueen-Shaman', 'Nidoqueen-Jasper',
+ 'Bisharp-Centurion', 'Bisharp-Savage', 'Bisharp-Ronin', 'Bisharp-Mantis', 'Bisharp-Revenant', 'Bisharp-Assassin',
+ 'Corviknight-Thunderbird', 'Corviknight-Genie', 'Corviknight-Yeti',
+ 'Corviknight-Analytical', 'Corviknight-Martian', 'Corviknight-Falcon',
+ 'Krookodile-Infernal', 'Krookodile-Abyssal', 'Krookodile-Wetlander',
+ 'Krookodile-Cave Dweller', 'Krookodile-Cliffside', 'Krookodile-Quantum',
+ 'Ogerpon-Muerta', 'Ogerpon-Easter', 'Ogerpon-Ankh', 'Ogerpon-Eid', 'Ogerpon-Vessel', 'Ogerpon-Kitsune',
],
onBegin() {
- this.add(`raw|Need help with all of the new moves, abilities, and wacky stuff?
Then make sure to check out the Scootopia Spreadsheet or use /dt! `);
- this.add('-message', `Welcome to Scootopia!`);
- this.add('-message', `This is a fakemon micrometa created by Scoopapa, featuring the Super Types mechanic!`);
- this.add('-message', `Super Types are powerful additional types that a Pokemon can gain by holding a specific Super Type Orb!`);
+ this.add('-message', `Welcome to Six by Six!`);
+ this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3742131/`);
+ this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
},
onSwitchInPriority: 100,
onSwitchIn(pokemon) {
diff --git a/data/mods/scootopiav2/abilities.ts b/data/mods/scootopiav2/abilities.ts
deleted file mode 100644
index 90d59ddb10..0000000000
--- a/data/mods/scootopiav2/abilities.ts
+++ /dev/null
@@ -1,135 +0,0 @@
-export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
- mythicalpresence: {
- name: "Mythical Presence",
- shortDesc: "Lowers opposing Pokemon Special Attack by 1 stage when switching in.",
- onStart(pokemon) {
- let activated = false;
- for (const target of pokemon.adjacentFoes()) {
- if (!activated) {
- this.add('-ability', pokemon, 'Mythical Presence', 'boost');
- activated = true;
- }
- if (target.volatiles['substitute']) {
- this.add('-immune', target);
- } else {
- this.boost({ spa: -1 }, target, pokemon, null, true);
- }
- }
- },
- },
- powerconstruct: {
- onResidualOrder: 27,
- onResidual(pokemon) {
- if (pokemon.baseSpecies.baseSpecies !== 'Flocura' || pokemon.transformed || !pokemon.hp) return;
- if (pokemon.species.id === 'flocuranexus' || pokemon.hp > pokemon.maxhp / 2) return;
- this.add('-activate', pokemon, 'ability: Power Construct');
- pokemon.formeChange('Flocura-Nexus', 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]');
- },
- flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
- name: "Power Construct",
- rating: 5,
- num: 211,
- },
- battlebond: {
- shortDesc: "Change to a stronger forme after getting a KO.",
- onSourceAfterFaint(length, target, source, effect) {
- if (effect?.effectType !== 'Move') {
- return;
- }
- if (source.species.id === 'soleron' && source.hp && !source.transformed && source.side.foe.pokemonLeft) {
- this.add('-activate', source, 'ability: Battle Bond');
- source.formeChange('Soleron-Awakened', this.effect, true);
- }
- },
- onModifyMovePriority: -1,
- flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
- name: "Battle Bond",
- rating: 4,
- num: 210,
- },
- crystalheart: {
- shortDesc: "User becomes Crystal type. While Crystal type, 33% boost to Def and SpD",
- onStart(pokemon) {
- if (pokemon.hasType('Crystal')) return false;
- if (!pokemon.addType('Crystal')) return false;
- pokemon.setType(["Crystal"]);
- this.add('-start', pokemon, 'typechange', 'Crystal', '[from] ability: Crystal Heart');
- },
- onModifyDefPriority: 6,
- onModifyDef(def, pokemon) {
- if (pokemon.hasType('Crystal')) return this.chainModify(1 + (1 / 3));
- },
- onModifySpDPriority: 6,
- onModifySpD(spd, pokemon) {
- if (pokemon.hasType('Crystal')) return this.chainModify(1 + (1 / 3));
- },
- name: "Crystal Heart",
- },
- wildheart: {
- onStart(pokemon) {
- if (pokemon.hasType('Feral')) return false;
- if (!pokemon.addType('Feral')) return false;
- pokemon.setType(["Feral"]);
- this.add('-start', pokemon, 'typechange', "Feral", '[from] ability: Wild Heart');
- },
- onModifyAtkPriority: 6,
- onModifyAtk(atk, pokemon) {
- if (pokemon.hasType('Feral')) return this.chainModify(1 + (1 / 3));
- },
- onModifySpAPriority: 6,
- onModifySpA(spa, pokemon) {
- if (pokemon.hasType('Feral')) return this.chainModify(1 + (1 / 3));
- },
- name: "Wild Heart",
- shortDesc: "User becomes Feral type. While Feral type, 33% boost to Atk and SpA",
- },
- schooling: {
- onStart(pokemon) {
- if (pokemon.baseSpecies.baseSpecies !== 'Jaegorm' || pokemon.transformed) return;
- if (pokemon.hp > pokemon.maxhp / 4) {
- if (pokemon.species.id === 'jaegorm') {
- pokemon.formeChange('Jaegorm-Collective');
- }
- } else {
- if (pokemon.species.id === 'jaegormcollective') {
- pokemon.formeChange('Jaegorm');
- }
- }
- },
- onResidualOrder: 27,
- onResidual(pokemon) {
- if (
- pokemon.baseSpecies.baseSpecies !== 'Jaegorm' || pokemon.transformed || !pokemon.hp
- ) return;
- if (pokemon.hp > pokemon.maxhp / 4) {
- if (pokemon.species.id === 'jaegorm') {
- pokemon.formeChange('Jaegorm-Collective');
- }
- } else {
- if (pokemon.species.id === 'jaegormcollective') {
- pokemon.formeChange('Jaegorm');
- }
- }
- },
- flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
- name: "Schooling",
- shortDesc: "If user is Jaegorm, changes to Collective Form if it has > 1/4 max HP, else Solo Form.",
- rating: 3,
- num: 208,
- },
- shellbunker: {
- onDamage(damage, target, source, effect) {
- if (effect.effectType !== 'Move' || !target.hurtThisTurn) return damage;
- return damage / 2;
- },
- name: "Shell Bunker",
- shortDesc: "After taking damage, Def and SpD are doubled for the rest of the turn.",
- },
-};
diff --git a/data/mods/scootopiav2/conditions.ts b/data/mods/scootopiav2/conditions.ts
deleted file mode 100644
index 7086193b90..0000000000
--- a/data/mods/scootopiav2/conditions.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
- frz: {
- name: 'frz',
- /*
- start: " [Pokemon] was chilled!",
- alreadyStarted: " [POKEMON] is already chilled!",
- end: " [POKEMON] warmed up!",
- endFromItem: " [POKEMON]'s [ITEM] warmed it up!",
- endFromMove: " [POKEMON]'s [MOVE] warmed it up!",
- cant: "[POKEMON] is chilled!",
- */
- effectType: 'Status',
- onStart(target, source, sourceEffect) {
- if (sourceEffect && sourceEffect.effectType === 'Ability') {
- this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
- } else {
- this.add('-status', target, 'frz');
- }
- },
- onResidualOrder: 9,
- onResidual(pokemon) {
- this.damage(pokemon.baseMaxhp / 16);
- },
- onModifySpA(spa, pokemon) {
- return this.chainModify(0.5);
- },
- },
- slp: {
- name: 'slp',
- effectType: 'Status',
- onStart(target, source, sourceEffect) {
- if (sourceEffect && sourceEffect.effectType === 'Ability') {
- this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
- } else if (sourceEffect && sourceEffect.effectType === 'Move') {
- this.add('-status', target, 'slp', '[from] move: ' + sourceEffect.name);
- } else {
- this.add('-status', target, 'slp');
- }
- // 1-3 turns
- this.effectState.startTime = 3;
- const sleepMoves = ["sleeppowder", "spore", "grasswhistle", "darkvoid", "hypnosis"];
- if (sourceEffect && sourceEffect.effectType === 'Move') {
- if (sleepMoves.includes(sourceEffect.id)) this.effectState.startTime = 2;
- }
- this.effectState.time = this.effectState.startTime;
- },
- onBeforeMovePriority: 10,
- onBeforeMove(pokemon, target, move) {
- if (pokemon.hasAbility('earlybird')) {
- pokemon.statusState.time--;
- }
- pokemon.statusState.time--;
- if (pokemon.statusState.time <= 0) {
- pokemon.cureStatus();
- return;
- }
- this.add('cant', pokemon, 'slp');
- if (move.sleepUsable) {
- return;
- }
- return false;
- },
- onModifySpe(spe, pokemon) {
- return this.chainModify(0.5);
- },
- },
-};
diff --git a/data/mods/scootopiav2/formats-data.ts b/data/mods/scootopiav2/formats-data.ts
deleted file mode 100644
index a917f298fa..0000000000
--- a/data/mods/scootopiav2/formats-data.ts
+++ /dev/null
@@ -1,218 +0,0 @@
-export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
- arbrella: {
- tier: "OU",
- doublesTier: "DOU",
- },
- krachiten: {
- tier: "OU",
- doublesTier: "DOU",
- },
- scalaron: {
- tier: "OU",
- doublesTier: "DOU",
- },
- rantler: {
- tier: "OU",
- doublesTier: "DOU",
- },
- woolora: {
- tier: "OU",
- doublesTier: "DOU",
- },
- albatrygon: {
- tier: "OU",
- doublesTier: "DOU",
- },
- orchile: {
- tier: "OU",
- doublesTier: "DOU",
- },
- embuck: {
- tier: "OU",
- doublesTier: "DOU",
- },
- cindoe: {
- tier: "OU",
- doublesTier: "DOU",
- },
- cobracotta: {
- tier: "OU",
- doublesTier: "DOU",
- },
- minillow: {
- tier: "OU",
- doublesTier: "DOU",
- },
- crossont: {
- tier: "OU",
- doublesTier: "DOU",
- },
- torgeist: {
- tier: "OU",
- doublesTier: "DOU",
- },
- platypad: {
- tier: "OU",
- doublesTier: "DOU",
- },
- lumoth: {
- tier: "OU",
- doublesTier: "DOU",
- },
- aurorowl: {
- tier: "OU",
- doublesTier: "DOU",
- },
- carapex: {
- tier: "OU",
- doublesTier: "DOU",
- },
- dojodo: {
- tier: "OU",
- doublesTier: "DOU",
- },
- nunopod: {
- tier: "OU",
- doublesTier: "DOU",
- },
- zeploom: {
- tier: "OU",
- doublesTier: "DOU",
- },
- sturgard: {
- tier: "OU",
- doublesTier: "DOU",
- },
- brawnkey: {
- tier: "OU",
- doublesTier: "DOU",
- },
- salamalix: {
- tier: "OU",
- doublesTier: "DOU",
- },
- cinnastar: {
- tier: "OU",
- doublesTier: "DOU",
- },
- muabboa: {
- tier: "OU",
- doublesTier: "DOU",
- },
- harzodia: {
- tier: "OU",
- doublesTier: "DOU",
- },
- cyllindrake: {
- tier: "OU",
- doublesTier: "DOU",
- },
- kodokai: {
- tier: "OU",
- doublesTier: "DOU",
- },
- electangle: {
- tier: "OU",
- doublesTier: "DOU",
- },
- dolphena: {
- tier: "OU",
- doublesTier: "DOU",
- },
- soleron: {
- tier: "OU",
- doublesTier: "DOU",
- },
- jaegorm: {
- tier: "OU",
- doublesTier: "DOU",
- },
- elemadillo: {
- tier: "OU",
- doublesTier: "DOU",
- },
- axolacred: {
- tier: "OU",
- doublesTier: "DOU",
- },
- roscenti: {
- tier: "OU",
- doublesTier: "DOU",
- },
- blunderbusk: {
- tier: "OU",
- doublesTier: "DOU",
- },
- barracoth: {
- tier: "OU",
- doublesTier: "DOU",
- },
- jamborai: {
- tier: "OU",
- doublesTier: "DOU",
- },
- dracoil: {
- tier: "OU",
- doublesTier: "DOU",
- },
- celespirit: {
- tier: "OU",
- doublesTier: "DOU",
- },
- noxtrice: {
- tier: "OU",
- doublesTier: "DOU",
- },
- avastar: {
- tier: "OU",
- doublesTier: "DOU",
- },
- faerenheit: {
- tier: "OU",
- doublesTier: "DOU",
- },
- cellsius: {
- tier: "OU",
- doublesTier: "DOU",
- },
- kelven: {
- tier: "OU",
- doublesTier: "DOU",
- },
- salaos: {
- tier: "OU",
- doublesTier: "DOU",
- },
- morndos: {
- tier: "OU",
- doublesTier: "DOU",
- },
- pythos: {
- tier: "OU",
- doublesTier: "DOU",
- },
- corundell: {
- tier: "OU",
- doublesTier: "DOU",
- },
- quadringo: {
- tier: "OU",
- doublesTier: "DOU",
- },
- saphor: {
- tier: "OU",
- doublesTier: "DOU",
- },
- fenreil: {
- tier: "OU",
- doublesTier: "DOU",
- },
- efflor: {
- tier: "OU",
- doublesTier: "DOU",
- },
- flocura: {
- tier: "OU",
- doublesTier: "DOU",
- },
-};
diff --git a/data/mods/scootopiav2/items.ts b/data/mods/scootopiav2/items.ts
deleted file mode 100644
index 5b340b51a1..0000000000
--- a/data/mods/scootopiav2/items.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- crystalorb: {
- name: "Crystal Orb",
- num: 1001,
- desc: "The holder's secondary type is replaced with Crystal. 20% boost to Crystal attacks.",
- onBeforeSwitchIn(pokemon) {
- if (this.effectState.usedSuperType && this.effectState.superTypeUser !== pokemon.fullname) return false;
- if (pokemon.hasType('Crystal')) return false;
- if (!pokemon.addType('Crystal')) return false;
- pokemon.setType([pokemon.types[0], "Crystal"]);
- this.effectState.usedSuperType = true;
- this.effectState.superTypeUser = "first_switch";
- },
- onStart(pokemon) {
- if (this.effectState.usedSuperType && this.effectState.superTypeUser === "first_switch") {
- this.add('-message', pokemon.name + " is a Crystal type!");
- this.effectState.superTypeUser = pokemon.fullname;
- }
- if (this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname) {
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- }
- },
- onUpdate(pokemon) {
- if (
- this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname && !pokemon.hasType('Crystal')
- ) {
- pokemon.setType([pokemon.types[0], "Crystal"]);
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- }
- },
- onTakeItem(item, pokemon, source) {
- if (source?.hasType("Crystal")) {
- return false;
- }
- return true;
- },
- onBasePowerPriority: 15,
- onBasePower(basePower, user, target, move) {
- if (move && move.type === 'Crystal') {
- return this.chainModify([0x1333, 0x1000]);
- }
- },
- gen: 9,
- },
- feralorb: {
- name: "Feral Orb",
- num: 1002,
- desc: "The holder's secondary type is replaced with Feral. 20% boost to Feral attacks.",
- onBeforeSwitchIn(pokemon) {
- if (this.effectState.usedSuperType && this.effectState.superTypeUser !== pokemon.fullname) return false;
- if (pokemon.hasType('Feral')) return false;
- if (!pokemon.addType('Feral')) return false;
- pokemon.setType([pokemon.types[0], "Feral"]);
- this.effectState.usedSuperType = true;
- this.effectState.superTypeUser = "first_switch";
- },
- onStart(pokemon) {
- if (this.effectState.usedSuperType && this.effectState.superTypeUser === "first_switch") {
- this.add('-message', pokemon.name + " is a Feral type!");
- this.effectState.superTypeUser = pokemon.fullname;
- }
- if (this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname) {
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- }
- },
- onUpdate(pokemon) {
- if (
- this.effectState.usedSuperType && this.effectState.superTypeUser === pokemon.fullname && !pokemon.hasType('Feral')
- ) {
- pokemon.setType([pokemon.types[0], "Feral"]);
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- }
- },
- onTakeItem(item, pokemon, source) {
- if (source?.hasType("Feral")) {
- return false;
- }
- return true;
- },
- onBasePowerPriority: 15,
- onBasePower(basePower, user, target, move) {
- if (move && move.type === 'Feral') {
- return this.chainModify([0x1333, 0x1000]);
- }
- },
- gen: 9,
- },
-};
diff --git a/data/mods/scootopiav2/learnsets.ts b/data/mods/scootopiav2/learnsets.ts
deleted file mode 100644
index 3573141dfa..0000000000
--- a/data/mods/scootopiav2/learnsets.ts
+++ /dev/null
@@ -1,4473 +0,0 @@
-export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = {
- arbrella: {
- learnset: {
- woodhammer: ["9L1"],
- seedbomb: ["9L1"],
- grassyglide: ["9L1"],
- bulletseed: ["9L1"],
- solarblade: ["9L1"],
- razorleaf: ["9L1"],
- vinewhip: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- drillrun: ["9L1"],
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- superpower: ["9L1"],
- xscissor: ["9L1"],
- lunge: ["9L1"],
- skittersmack: ["9L1"],
- nightslash: ["9L1"],
- shadowclaw: ["9L1"],
- slash: ["9L1"],
- scratch: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- leafstorm: ["9L1"],
- gigadrain: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- grasspledge: ["9L1"],
- frenzyplant: ["9L1"],
- earthpower: ["9L1"],
- scorchingsands: ["9L1"],
- ancientpower: ["9L1"],
- shadowball: ["9L1"],
- shoreup: ["9L1"],
- stealthrock: ["9L1"],
- swordsdance: ["9L1"],
- rockpolish: ["9L1"],
- spikyshield: ["9L1"],
- worryseed: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- safeguard: ["9L1"],
- synthesis: ["9L1"],
- substitute: ["9L1"],
- facade: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralshred: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- krachiten: {
- learnset: {
- aquacutter: ["9L1"],
- focusenergy: ["9L1"],
- firstimpression: ["9L1"],
- leechlife: ["9L1"],
- lunge: ["9L1"],
- uturn: ["9L1"],
- liquidation: ["9L1"],
- superpower: ["9L1"],
- crunch: ["9L1"],
- psychicfangs: ["9L1"],
- rapidspin: ["9L1"],
- toxicspikes: ["9L1"],
- toxic: ["9L1"],
- recover: ["9L1"],
- taunt: ["9L1"],
- switcheroo: ["9L1"],
- calmmind: ["9L1"],
- bugbuzz: ["9L1"],
- xscissor: ["9L1"],
- bugbite: ["9L1"],
- skittersmack: ["9L1"],
- strugglebug: ["9L1"],
- waterfall: ["9L1"],
- surf: ["9L1"],
- hydropump: ["9L1"],
- scald: ["9L1"],
- dive: ["9L1"],
- bubble: ["9L1"],
- waterpulse: ["9L1"],
- brine: ["9L1"],
- bubblebeam: ["9L1"],
- psychocut: ["9L1"],
- zenheadbutt: ["9L1"],
- psychic: ["9L1"],
- poisonjab: ["9L1"],
- sludgebomb: ["9L1"],
- shadowball: ["9L1"],
- shadowclaw: ["9L1"],
- darkpulse: ["9L1"],
- nightslash: ["9L1"],
- bite: ["9L1"],
- assurance: ["9L1"],
- payback: ["9L1"],
- slash: ["9L1"],
- scratch: ["9L1"],
- weatherball: ["9L1"],
- terrainpulse: ["9L1"],
- honeclaws: ["9L1"],
- lightscreen: ["9L1"],
- safeguard: ["9L1"],
- aquaring: ["9L1"],
- lifedew: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- chillingwater: ["9L1"],
- icespinner: ["9L1"],
- helpinghand: ["9L1"],
- quickguard: ["9L1"],
- facade: ["9L1"],
- haze: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- scalaron: {
- learnset: {
- haze: ["9L1"],
- whirlwind: ["9L1"],
- roar: ["9L1"],
- hurricane: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- mysticalfire: ["9L1"],
- uturn: ["9L1"],
- dragontail: ["9L1"],
- defog: ["9L1"],
- roost: ["9L1"],
- toxic: ["9L1"],
- willowisp: ["9L1"],
- taunt: ["9L1"],
- airslash: ["9L1"],
- aircutter: ["9L1"],
- wingattack: ["9L1"],
- gust: ["9L1"],
- dualwingbeat: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- acrobatics: ["9L1"],
- heatwave: ["9L1"],
- flareblitz: ["9L1"],
- flamecharge: ["9L1"],
- inferno: ["9L1"],
- incinerate: ["9L1"],
- firefang: ["9L1"],
- firespin: ["9L1"],
- ember: ["9L1"],
- dragonpulse: ["9L1"],
- dragonclaw: ["9L1"],
- scaleshot: ["9L1"],
- darkpulse: ["9L1"],
- snarl: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- thunderfang: ["9L1"],
- shockwave: ["9L1"],
- irontail: ["9L1"],
- doubleedge: ["9L1"],
- crushclaw: ["9L1"],
- hyperbeam: ["9L1"],
- tailwind: ["9L1"],
- dragondance: ["9L1"],
- memento: ["9L1"],
- meanlook: ["9L1"],
- scaryface: ["9L1"],
- torment: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- facade: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- rantler: {
- learnset: {
- doubleedge: ["9L1"],
- facade: ["9L1"],
- hyperfang: ["9L1"],
- bodyslam: ["9L1"],
- quickattack: ["9L1"],
- gigaimpact: ["9L1"],
- headbutt: ["9L1"],
- slash: ["9L1"],
- fakeout: ["9L1"],
- lastresort: ["9L1"],
- retaliate: ["9L1"],
- strength: ["9L1"],
- scratch: ["9L1"],
- iciclecrash: ["9L1"],
- icefang: ["9L1"],
- iceshard: ["9L1"],
- earthquake: ["9L1"],
- highhorsepower: ["9L1"],
- stompingtantrum: ["9L1"],
- superpower: ["9L1"],
- brickbreak: ["9L1"],
- revenge: ["9L1"],
- rocksmash: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- payback: ["9L1"],
- haze: ["9L1"],
- roar: ["9L1"],
- assurance: ["9L1"],
- thief: ["9L1"],
- psychicfangs: ["9L1"],
- wildcharge: ["9L1"],
- thunderfang: ["9L1"],
- megahorn: ["9L1"],
- firstimpression: ["9L1"],
- ironhead: ["9L1"],
- hornleech: ["9L1"],
- playrough: ["9L1"],
- icebeam: ["9L1"],
- blizzard: ["9L1"],
- frostbreath: ["9L1"],
- freezedry: ["9L1"],
- aurorabeam: ["9L1"],
- powdersnow: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- snarl: ["9L1"],
- darkpulse: ["9L1"],
- surf: ["9L1"],
- waterpulse: ["9L1"],
- shockwave: ["9L1"],
- mudslap: ["9L1"],
- swordsdance: ["9L1"],
- bulkup: ["9L1"],
- taunt: ["9L1"],
- nobleroar: ["9L1"],
- workup: ["9L1"],
- snowscape: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- auroraveil: ["9L1"],
- grassyterrain: ["9L1"],
- mistyterrain: ["9L1"],
- yawn: ["9L1"],
- babydolleyes: ["9L1"],
- charm: ["9L1"],
- focusenergy: ["9L1"],
- howl: ["9L1"],
- helpinghand: ["9L1"],
- sheercold: ["9L1"],
- honeclaws: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- icespinner: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- woolora: {
- learnset: {
- moonblast: ["9L1"],
- wildcharge:["9L1"],
- healingwish: ["9L1"],
- drainingkiss: ["9L1"],
- mistyexplosion: ["9L1"],
- disarmingvoice: ["9L1"],
- mysticalfire: ["9L1"],
- facade: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- storedpower: ["9L1"],
- shadowball: ["9L1"],
- energyball: ["9L1"],
- playrough: ["9L1"],
- highhorsepower: ["9L1"],
- zenheadbutt: ["9L1"],
- bodypress: ["9L1"],
- megahorn: ["9L1"],
- bounce: ["9L1"],
- hyperbeam: ["9L1"],
- gigaimpact: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- takedown: ["9L1"],
- retaliate: ["9L1"],
- headbutt: ["9L1"],
- tackle: ["9L1"],
- calmmind: ["9L1"],
- moonlight: ["9L1"],
- teleport: ["9L1"],
- roar: ["9L1"],
- wish: ["9L1"],
- cottonguard: ["9L1"],
- healbell: ["9L1"],
- bulkup: ["9L1"],
- mistyterrain: ["9L1"],
- raindance: ["9L1"],
- growl: ["9L1"],
- babydolleyes: ["9L1"],
- guardswap: ["9L1"],
- helpinghand: ["9L1"],
- batonpass: ["9L1"],
- agility: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- albatrygon: {
- learnset: {
- encore: ["9L1"],
- taunt: ["9L1"],
- bravebird: ["9L1"],
- helpinghand: ["9L1"],
- acrobatics: ["9L1"],
- beatup: ["9L1"],
- drillpeck: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- aerialace: ["9L1"],
- pluck: ["9L1"],
- peck: ["9L1"],
- sacredsword: ["9L1"],
- foulplay: ["9L1"],
- darkestlariat: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- brutalswing: ["9L1"],
- thief: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- gigaimpact: ["9L1"],
- spikes: ["9L1"],
- switcheroo: ["9L1"],
- partingshot: ["9L1"],
- defog: ["9L1"],
- memento: ["9L1"],
- featherdance: ["9L1"],
- workup: ["9L1"],
- smartstrike: ["9L1"],
- steelwing: ["9L1"],
- growl: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- mistyterrain: ["9L1"],
- skillswap: ["9L1"],
- screech: ["9L1"],
- tailwind: ["9L1"],
- wonderroom: ["9L1"],
- magicroom: ["9L1"],
- mimic: ["9L1"],
- allyswitch: ["9L1"],
- focusenergy: ["9L1"],
- laserfocus: ["9L1"],
- tidyup: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- facade: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- whirlwind: ["9L1"],
- endure: ["9L1"],
- wideguard: ["9L1"],
- quickguard: ["9L1"],
- uturn: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralspray: ["9L1"],
- },
- },
- orchile: {
- learnset: {
- moonblast: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- sleeppowder: ["9L1"],
- ragepowder: ["9L1"],
- beatup: ["9L1"],
- sludgebomb: ["9L1"],
- clearsmog: ["9L1"],
- gigadrain: ["9L1"],
- leafstorm: ["9L1"],
- energyball: ["9L1"],
- earthpower: ["9L1"],
- facade: ["9L1"],
- mysticalfire: ["9L1"],
- psychic: ["9L1"],
- shadowball: ["9L1"],
- darkpulse: ["9L1"],
- strengthsap: ["9L1"],
- willowisp: ["9L1"],
- spikes: ["9L1"],
- toxicspikes: ["9L1"],
- toxic: ["9L1"],
- stunspore: ["9L1"],
- leechseed: ["9L1"],
- calmmind: ["9L1"],
- aromatherapy: ["9L1"],
- synthesis: ["9L1"],
- trickroom: ["9L1"],
- sludge: ["9L1"],
- acid: ["9L1"],
- venoshock: ["9L1"],
- gunkshot: ["9L1"],
- poisonjab: ["9L1"],
- crosspoison: ["9L1"],
- poisonsting: ["9L1"],
- solarbeam: ["9L1"],
- grassknot: ["9L1"],
- petaldance: ["9L1"],
- vinewhip: ["9L1"],
- megadrain: ["9L1"],
- petalblizzard: ["9L1"],
- seedbomb: ["9L1"],
- magicalleaf: ["9L1"],
- absorb: ["9L1"],
- grassyglide: ["9L1"],
- razorleaf: ["9L1"],
- mudslap: ["9L1"],
- dreameater: ["9L1"],
- psychocut: ["9L1"],
- nightslash: ["9L1"],
- payback: ["9L1"],
- pollenpuff: ["9L1"],
- cut: ["9L1"],
- endeavor: ["9L1"],
- slash: ["9L1"],
- helpinghand: ["9L1"],
- wrap: ["9L1"],
- bodyslam: ["9L1"],
- tackle: ["9L1"],
- growth: ["9L1"],
- worryseed: ["9L1"],
- sweetscent: ["9L1"],
- safeguard: ["9L1"],
- corrosivegas: ["9L1"],
- poisonpowder: ["9L1"],
- venomdrench: ["9L1"],
- disable: ["9L1"],
- curse: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- grassyterrain: ["9L1"],
- attract: ["9L1"],
- protect: ["9L1"],
- substitute: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- snore: ["9L1"],
- endure: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralshred: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- embuck: {
- learnset: {
- flareblitz: ["9L1"],
- beatup: ["9L1"],
- blazekick: ["9L1"],
- closecombat: ["9L1"],
- highhorsepower: ["9L1"],
- megahorn: ["9L1"],
- uturn: ["9L1"],
- morningsun: ["9L1"],
- bulkup: ["9L1"],
- willowisp: ["9L1"],
- taunt: ["9L1"],
- doublekick: ["9L1"],
- tackle: ["9L1"],
- growl: ["9L1"],
- smokescreen: ["9L1"],
- ember: ["9L1"],
- sunnyday: ["9L1"],
- flamecharge: ["9L1"],
- snarl: ["9L1"],
- agility: ["9L1"],
- inferno: ["9L1"],
- superpower: ["9L1"],
- aerialace: ["9L1"],
- assurance: ["9L1"],
- attract: ["9L1"],
- bounce: ["9L1"],
- confide: ["9L1"],
- darkpulse: ["9L1"],
- doubleteam: ["9L1"],
- echoedvoice: ["9L1"],
- endure: ["9L1"],
- energyball: ["9L1"],
- facade: ["9L1"],
- falseswipe: ["9L1"],
- fly: ["9L1"],
- focusblast: ["9L1"],
- frustration: ["9L1"],
- gigaimpact: ["9L1"],
- heatwave: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- laserfocus: ["9L1"],
- nastyplot: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- solarbeam: ["9L1"],
- substitute: ["9L1"],
- swagger: ["9L1"],
- swordsdance: ["9L1"],
- thief: ["9L1"],
- throatchop: ["9L1"],
- uproar: ["9L1"],
- wildcharge:["9L1"],
- workup: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- helpinghand: ["9L1"],
- aurasphere: ["9L1"],
- vacuumwave: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- cindoe: {
- learnset: {
- fierywrath: ["9L1"],
- overheat: ["9L1"],
- beatup: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- mysticalfire: ["9L1"],
- psychic: ["9L1"],
- nastyplot: ["9L1"],
- calmmind: ["9L1"],
- morningsun: ["9L1"],
- taunt: ["9L1"],
- moonlight: ["9L1"],
- tackle: ["9L1"],
- growl: ["9L1"],
- smokescreen: ["9L1"],
- ember: ["9L1"],
- agility: ["9L1"],
- inferno: ["9L1"],
- blazekick: ["9L1"],
- darkpulse: ["9L1"],
- partingshot: ["9L1"],
- aerialace: ["9L1"],
- assurance: ["9L1"],
- attract: ["9L1"],
- bounce: ["9L1"],
- confide: ["9L1"],
- doubleteam: ["9L1"],
- echoedvoice: ["9L1"],
- endure: ["9L1"],
- energyball: ["9L1"],
- facade: ["9L1"],
- falseswipe: ["9L1"],
- focusblast: ["9L1"],
- frustration: ["9L1"],
- gigaimpact: ["9L1"],
- incinerate: ["9L1"],
- heatwave: ["9L1"],
- hyperbeam: ["9L1"],
- laserfocus: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- sleeptalk: ["9L1"],
- snarl: ["9L1"],
- snore: ["9L1"],
- solarbeam: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- swordsdance: ["9L1"],
- thief: ["9L1"],
- throatchop: ["9L1"],
- uproar: ["9L1"],
- helpinghand: ["9L1"],
- uturn: ["9L1"],
- wildcharge:["9L1"],
- willowisp: ["9L1"],
- workup: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- cobracotta: {
- learnset: {
- powerwhip: ["9L1"],
- toxic: ["9L1"],
- petalblizzard: ["9L1"],
- seedbomb: ["9L1"],
- bulletseed: ["9L1"],
- grassyglide: ["9L1"],
- razorleaf: ["9L1"],
- gunkshot: ["9L1"],
- poisonjab: ["9L1"],
- poisonfang: ["9L1"],
- poisonsting: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- rockblast: ["9L1"],
- rollout: ["9L1"],
- knockoff: ["9L1"],
- suckerpunch: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- brutalswing: ["9L1"],
- payback: ["9L1"],
- thief: ["9L1"],
- psychicfangs: ["9L1"],
- rocksmash: ["9L1"],
- revenge: ["9L1"],
- bodyslam: ["9L1"],
- gigaimpact: ["9L1"],
- wrap: ["9L1"],
- gigadrain: ["9L1"],
- energyball: ["9L1"],
- leafstorm: ["9L1"],
- grassknot: ["9L1"],
- solarbeam: ["9L1"],
- megadrain: ["9L1"],
- petaldance: ["9L1"],
- sludgebomb: ["9L1"],
- venoshock: ["9L1"],
- sludge: ["9L1"],
- acid: ["9L1"],
- acidspray: ["9L1"],
- belch: ["9L1"],
- darkpulse: ["9L1"],
- earthpower: ["9L1"],
- ancientpower: ["9L1"],
- sweetscent: ["9L1"],
- naturepower: ["9L1"],
- hyperbeam: ["9L1"],
- shellsmash: ["9L1"],
- coil: ["9L1"],
- glare: ["9L1"],
- nastyplot: ["9L1"],
- stealthrock: ["9L1"],
- synthesis: ["9L1"],
- leechseed: ["9L1"],
- spitup: ["9L1"],
- stockpile: ["9L1"],
- swallow: ["9L1"],
- focusenergy: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- grassyterrain: ["9L1"],
- laserfocus: ["9L1"],
- helpinghand: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- dragontail: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- minillow: {
- learnset: {
- haze: ["9L1"],
- hydropump: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- chillingwater: ["9L1"],
- moonblast: ["9L1"],
- nastyplot: ["9L1"],
- drainingkiss: ["9L1"],
- mistyexplosion: ["9L1"],
- icebeam: ["9L1"],
- psychic: ["9L1"],
- flipturn: ["9L1"],
- moonlight: ["9L1"],
- bubble: ["9L1"],
- tailwhip: ["9L1"],
- babydolleyes: ["9L1"],
- aquajet: ["9L1"],
- aquaring: ["9L1"],
- bubblebeam: ["9L1"],
- soak: ["9L1"],
- waterfall: ["9L1"],
- agility: ["9L1"],
- dazzlinggleam: ["9L1"],
- attract: ["9L1"],
- blizzard: ["9L1"],
- bodyslam: ["9L1"],
- bounce: ["9L1"],
- dive: ["9L1"],
- doubleteam: ["9L1"],
- drillrun: ["9L1"],
- helpinghand: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- gigaimpact: ["9L1"],
- snowscape: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- muddywater: ["9L1"],
- mudshot: ["9L1"],
- poisonjab: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- round: ["9L1"],
- scaleshot: ["9L1"],
- shadowball: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- substitute: ["9L1"],
- swagger: ["9L1"],
- swift: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- zenheadbutt: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- feralbite: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- followme: ["9L1"],
- },
- },
- crossont: {
- learnset: {
- recover: ["9L1"],
- megahorn: ["9L1"],
- pinmissile: ["9L1"],
- attackorder: ["9L1"],
- closecombat: ["9L1"],
- superpower: ["9L1"],
- rockblast: ["9L1"],
- circlethrow: ["9L1"],
- knockoff: ["9L1"],
- earthquake: ["9L1"],
- stoneedge: ["9L1"],
- spiritshackle: ["9L1"],
- spikes: ["9L1"],
- bulkup: ["9L1"],
- focusenergy: ["9L1"],
- submission: ["9L1"],
- astonish: ["9L1"],
- defensecurl: ["9L1"],
- strugglebug: ["9L1"],
- fling: ["9L1"],
- armthrust: ["9L1"],
- lockon: ["9L1"],
- bulletseed: ["9L1"],
- dynamicpunch: ["9L1"],
- laserfocus: ["9L1"],
- crosschop: ["9L1"],
- wideguard: ["9L1"],
- finalgambit: ["9L1"],
- aerialace: ["9L1"],
- attract: ["9L1"],
- brickbreak: ["9L1"],
- bugbite: ["9L1"],
- bugbuzz: ["9L1"],
- bulldoze: ["9L1"],
- confide: ["9L1"],
- covet: ["9L1"],
- doubleteam: ["9L1"],
- endeavor: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- fakeout: ["9L1"],
- firepunch: ["9L1"],
- focusblast: ["9L1"],
- focuspunch: ["9L1"],
- frustration: ["9L1"],
- gigaimpact: ["9L1"],
- gunkshot: ["9L1"],
- helpinghand: ["9L1"],
- hyperbeam: ["9L1"],
- icepunch: ["9L1"],
- lowkick: ["9L1"],
- lowsweep: ["9L1"],
- outrage: ["9L1"],
- payback: ["9L1"],
- poweruppunch: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- rockclimb: ["9L1"],
- rockslide: ["9L1"],
- rocksmash: ["9L1"],
- rocktomb: ["9L1"],
- roleplay: ["9L1"],
- round: ["9L1"],
- seedbomb: ["9L1"],
- sleeptalk: ["9L1"],
- smackdown: ["9L1"],
- snore: ["9L1"],
- spite: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- taunt: ["9L1"],
- thief: ["9L1"],
- throatchop: ["9L1"],
- thunderpunch: ["9L1"],
- uproar: ["9L1"],
- workup: ["9L1"],
- xscissor: ["9L1"],
- axekick: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- torgeist: {
- learnset: {
- shadowball: ["9L1"],
- facade: ["9L1"],
- hex: ["9L1"],
- ominouswind: ["9L1"],
- boomburst: ["9L1"],
- hypervoice: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- weatherball: ["9L1"],
- heatwave: ["9L1"],
- icywind: ["9L1"],
- darkpulse: ["9L1"],
- shockwave: ["9L1"],
- uturn: ["9L1"],
- poltergeist: ["9L1"],
- shadowsneak: ["9L1"],
- phantomforce: ["9L1"],
- astonish: ["9L1"],
- dualwingbeat: ["9L1"],
- acrobatics: ["9L1"],
- suckerpunch: ["9L1"],
- foulplay: ["9L1"],
- thief: ["9L1"],
- payback: ["9L1"],
- headbutt: ["9L1"],
- wrap: ["9L1"],
- doubleedge: ["9L1"],
- painsplit: ["9L1"],
- trick: ["9L1"],
- taunt: ["9L1"],
- nastyplot: ["9L1"],
- calmmind: ["9L1"],
- willowisp: ["9L1"],
- toxicthread: ["9L1"],
- tailwind: ["9L1"],
- defog: ["9L1"],
- raindance: ["9L1"],
- disable: ["9L1"],
- workup: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- meanlook: ["9L1"],
- perishsong: ["9L1"],
- metalsound: ["9L1"],
- gust: ["9L1"],
- haze: ["9L1"],
- screech: ["9L1"],
- imprison: ["9L1"],
- destinybond: ["9L1"],
- memento: ["9L1"],
- magiccoat: ["9L1"],
- sunnyday: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- platypad: {
- learnset: {
- revivalblessing: ["9L1"],
- wavecrash: ["9L1"],
- wish: ["9L1"],
- gigadrain: ["9L1"],
- leafstorm: ["9L1"],
- sludgebomb: ["9L1"],
- weatherball: ["9L1"],
- hydropump: ["9L1"],
- scald: ["9L1"],
- shadowball: ["9L1"],
- flipturn: ["9L1"],
- dragontail: ["9L1"],
- poisonjab: ["9L1"],
- petalblizzard: ["9L1"],
- earthquake: ["9L1"],
- slackoff: ["9L1"],
- spikes: ["9L1"],
- toxicspikes: ["9L1"],
- roar: ["9L1"],
- toxic: ["9L1"],
- aromatherapy: ["9L1"],
- haze: ["9L1"],
- leechseed: ["9L1"],
- stunspore: ["9L1"],
- bellydrum: ["9L1"],
- venoshock: ["9L1"],
- sludgewave: ["9L1"],
- poisonsting: ["9L1"],
- crosspoison: ["9L1"],
- poisontail: ["9L1"],
- solarbeam: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- magicalleaf: ["9L1"],
- seedbomb: ["9L1"],
- bulletseed: ["9L1"],
- grassyglide: ["9L1"],
- megadrain: ["9L1"],
- absorb: ["9L1"],
- aquatail: ["9L1"],
- liquidation: ["9L1"],
- surf: ["9L1"],
- whirlpool: ["9L1"],
- icywind: ["9L1"],
- zenheadbutt: ["9L1"],
- extrasensory: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- rockslide: ["9L1"],
- rollout: ["9L1"],
- outrage: ["9L1"],
- shockwave: ["9L1"],
- drainingkiss: ["9L1"],
- nightshade: ["9L1"],
- shadowclaw: ["9L1"],
- wildcharge: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- fling: ["9L1"],
- pollenpuff: ["9L1"],
- doubleedge: ["9L1"],
- hyperbeam: ["9L1"],
- gigaimpact: ["9L1"],
- bodyslam: ["9L1"],
- covet: ["9L1"],
- hypervoice: ["9L1"],
- uproar: ["9L1"],
- tackle: ["9L1"],
- curse: ["9L1"],
- moonlight: ["9L1"],
- venomdrench: ["9L1"],
- poisonpowder: ["9L1"],
- yawn: ["9L1"],
- defensecurl: ["9L1"],
- attract: ["9L1"],
- afteryou: ["9L1"],
- charm: ["9L1"],
- psychup: ["9L1"],
- lifedew: ["9L1"],
- amnesia: ["9L1"],
- stockpile: ["9L1"],
- swallow: ["9L1"],
- spitup: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- snowscape: ["9L1"],
- sandstorm: ["9L1"],
- grassyterrain: ["9L1"],
- safeguard: ["9L1"],
- wideguard: ["9L1"],
- block: ["9L1"],
- helpinghand: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- facade: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- chillingwater: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- lumoth: {
- learnset: {
- shadowball: ["9L1"],
- hex: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- bugbuzz: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- quiverdance: ["9L1"],
- willowisp: ["9L1"],
- sleeppowder: ["9L1"],
- defog: ["9L1"],
- astonish: ["9L1"],
- leer: ["9L1"],
- infestation: ["9L1"],
- stringshot: ["9L1"],
- silverwind: ["9L1"],
- psybeam: ["9L1"],
- ragepowder: ["9L1"],
- calmmind: ["9L1"],
- expandingforce: ["9L1"],
- allyswitch: ["9L1"],
- chargebeam: ["9L1"],
- confide: ["9L1"],
- covet: ["9L1"],
- darkpulse: ["9L1"],
- doubleteam: ["9L1"],
- dreameater: ["9L1"],
- embargo: ["9L1"],
- facade: ["9L1"],
- frustration: ["9L1"],
- grassknot: ["9L1"],
- gravity: ["9L1"],
- hyperbeam: ["9L1"],
- laserfocus: ["9L1"],
- lastresort: ["9L1"],
- lightscreen: ["9L1"],
- magiccoat: ["9L1"],
- magicroom: ["9L1"],
- protect: ["9L1"],
- psychup: ["9L1"],
- raindance: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- safeguard: ["9L1"],
- shockwave: ["9L1"],
- signalbeam: ["9L1"],
- skillswap: ["9L1"],
- sleeptalk: ["9L1"],
- snatch: ["9L1"],
- snore: ["9L1"],
- strugglebug: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- haze: ["9L1"],
- telekinesis: ["9L1"],
- thunderwave: ["9L1"],
- torment: ["9L1"],
- helpinghand: ["9L1"],
- trick: ["9L1"],
- trickroom: ["9L1"],
- uturn: ["9L1"],
- wonderroom: ["9L1"],
- zenheadbutt: ["9L1"],
- silktrap: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- },
- },
- aurorowl: {
- learnset: {
- haze: ["9L1"],
- frostbreath: ["9L1"],
- dualwingbeat: ["9L1"],
- icebeam: ["9L1"],
- aircutter: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- focusblast: ["9L1"],
- iceshard: ["9L1"],
- tripleaxel: ["9L1"],
- aerialace: ["9L1"],
- bravebird: ["9L1"],
- uturn: ["9L1"],
- nastyplot: ["9L1"],
- sheercold: ["9L1"],
- roost: ["9L1"],
- defog: ["9L1"],
- icywind: ["9L1"],
- tackle: ["9L1"],
- sandattack: ["9L1"],
- gust: ["9L1"],
- quickattack: ["9L1"],
- whirlwind: ["9L1"],
- featherdance: ["9L1"],
- aurorabeam: ["9L1"],
- attract: ["9L1"],
- blizzard: ["9L1"],
- confide: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- fly: ["9L1"],
- frustration: ["9L1"],
- gigaimpact: ["9L1"],
- snowscape: ["9L1"],
- hyperbeam: ["9L1"],
- laserfocus: ["9L1"],
- pluck: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- skyattack: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- steelwing: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- tailwind: ["9L1"],
- thief: ["9L1"],
- uproar: ["9L1"],
- workup: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- },
- },
- carapex: {
- learnset: {
- acrobatics: ["9L1"],
- tailwind: ["9L1"],
- megahorn: ["9L1"],
- uturn: ["9L1"],
- dualwingbeat: ["9L1"],
- bodypress: ["9L1"],
- knockoff: ["9L1"],
- earthquake: ["9L1"],
- stoneedge: ["9L1"],
- stealthrock: ["9L1"],
- defog: ["9L1"],
- roost: ["9L1"],
- irondefense: ["9L1"],
- whirlwind: ["9L1"],
- tackle: ["9L1"],
- defensecurl: ["9L1"],
- endure: ["9L1"],
- rollout: ["9L1"],
- furycutter: ["9L1"],
- batonpass: ["9L1"],
- reversal: ["9L1"],
- bugbuzz: ["9L1"],
- aerialace: ["9L1"],
- airslash: ["9L1"],
- allyswitch: ["9L1"],
- attract: ["9L1"],
- brutalswing: ["9L1"],
- cut: ["9L1"],
- dig: ["9L1"],
- doubleteam: ["9L1"],
- echoedvoice: ["9L1"],
- energyball: ["9L1"],
- facade: ["9L1"],
- fly: ["9L1"],
- frustration: ["9L1"],
- gigadrain: ["9L1"],
- helpinghand: ["9L1"],
- hurricane: ["9L1"],
- lastresort: ["9L1"],
- leechlife: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- shadowball: ["9L1"],
- shadowclaw: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- thief: ["9L1"],
- uproar: ["9L1"],
- workup: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- dojodo: {
- learnset: {
- highjumpkick: ["9L1"],
- closecombat: ["9L1"],
- drainpunch: ["9L1"],
- bodypress: ["9L1"],
- knockoff: ["9L1"],
- icepunch: ["9L1"],
- firepunch: ["9L1"],
- thunderpunch: ["9L1"],
- poisonjab: ["9L1"],
- stompingtantrum: ["9L1"],
- bravebird: ["9L1"],
- bulkup: ["9L1"],
- swordsdance: ["9L1"],
- irondefense: ["9L1"],
- taunt: ["9L1"],
- coaching: ["9L1"],
- peck: ["9L1"],
- sandattack: ["9L1"],
- armthrust: ["9L1"],
- fakeout: ["9L1"],
- forcepalm: ["9L1"],
- whirlwind: ["9L1"],
- brickbreak: ["9L1"],
- batonpass: ["9L1"],
- detect: ["9L1"],
- jumpkick: ["9L1"],
- drillpeck: ["9L1"],
- matblock: ["9L1"],
- reversal: ["9L1"],
- gigaimpact: ["9L1"],
- attract: ["9L1"],
- confide: ["9L1"],
- dig: ["9L1"],
- dualwingbeat: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- featherdance: ["9L1"],
- fling: ["9L1"],
- focusblast: ["9L1"],
- focuspunch: ["9L1"],
- frustration: ["9L1"],
- helpinghand: ["9L1"],
- hyperbeam: ["9L1"],
- ironhead: ["9L1"],
- beatup: ["9L1"],
- lowkick: ["9L1"],
- lowsweep: ["9L1"],
- payback: ["9L1"],
- pluck: ["9L1"],
- poweruppunch: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- rocksmash: ["9L1"],
- roleplay: ["9L1"],
- round: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- strength: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- superpower: ["9L1"],
- swagger: ["9L1"],
- throatchop: ["9L1"],
- workup: ["9L1"],
- jetpunch: ["9L1"],
- quickguard: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralhealing: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- nunopod: {
- learnset: {
- lunge: ["9L1"],
- beatup: ["9L1"],
- leechlife: ["9L1"],
- firstimpression: ["9L1"],
- xscissor: ["9L1"],
- furycutter: ["9L1"],
- bugbite: ["9L1"],
- earthquake: ["9L1"],
- highhorsepower: ["9L1"],
- stompingtantrum: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- tripleaxel: ["9L1"],
- highjumpkick: ["9L1"],
- bodypress: ["9L1"],
- rollingkick: ["9L1"],
- brickbreak: ["9L1"],
- tropkick: ["9L1"],
- flipturn: ["9L1"],
- zenheadbutt: ["9L1"],
- ironhead: ["9L1"],
- brutalswing: ["9L1"],
- payback: ["9L1"],
- blazekick: ["9L1"],
- acrobatics: ["9L1"],
- rapidspin: ["9L1"],
- megakick: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- pound: ["9L1"],
- bugbuzz: ["9L1"],
- strugglebug: ["9L1"],
- earthpower: ["9L1"],
- scorchingsands: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- solarbeam: ["9L1"],
- surf: ["9L1"],
- shadowball: ["9L1"],
- extrasensory: ["9L1"],
- recover: ["9L1"],
- stealthrock: ["9L1"],
- workup: ["9L1"],
- toxic: ["9L1"],
- swordsdance: ["9L1"],
- acidarmor: ["9L1"],
- trickroom: ["9L1"],
- rototiller: ["9L1"],
- safeguard: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- grassyterrain: ["9L1"],
- mistyterrain: ["9L1"],
- psychicterrain: ["9L1"],
- electricterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- facade: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- zeploom: {
- learnset: {
- scorchingsands: ["9L1"],
- facade: ["9L1"],
- earthpower: ["9L1"],
- mudslap: ["9L1"],
- mudbomb: ["9L1"],
- mudshot: ["9L1"],
- energysiphon: ["9L1"],
- gigadrain: ["9L1"],
- energyball: ["9L1"],
- leafstorm: ["9L1"],
- grassknot: ["9L1"],
- megadrain: ["9L1"],
- nightshade: ["9L1"],
- shadowball: ["9L1"],
- hex: ["9L1"],
- clearsmog: ["9L1"],
- sludgebomb: ["9L1"],
- acidspray: ["9L1"],
- darkpulse: ["9L1"],
- leafblade: ["9L1"],
- seedbomb: ["9L1"],
- bulletseed: ["9L1"],
- earthquake: ["9L1"],
- uturn: ["9L1"],
- gunkshot: ["9L1"],
- poisonjab: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- bounce: ["9L1"],
- wrap: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- explosion: ["9L1"],
- selfdestruct: ["9L1"],
- pound: ["9L1"],
- spore: ["9L1"],
- synthesis: ["9L1"],
- stealthrock: ["9L1"],
- defog: ["9L1"],
- toxic: ["9L1"],
- encore: ["9L1"],
- stunspore: ["9L1"],
- memento: ["9L1"],
- workup: ["9L1"],
- leechseed: ["9L1"],
- toxicthread: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- grassyterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- ragepowder: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralshred: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- brawnkey: {
- learnset: {
- bodypress: ["9L1"],
- facade: ["9L1"],
- beatup: ["9L1"],
- closecombat: ["9L1"],
- drainpunch: ["9L1"],
- rocksmash: ["9L1"],
- submission: ["9L1"],
- revenge: ["9L1"],
- brickbreak: ["9L1"],
- crosschop: ["9L1"],
- karatechop: ["9L1"],
- poweruppunch: ["9L1"],
- vitalthrow: ["9L1"],
- ironhead: ["9L1"],
- heavyslam: ["9L1"],
- steelroller: ["9L1"],
- smartstrike: ["9L1"],
- earthquake: ["9L1"],
- highhorsepower: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- payback: ["9L1"],
- thief: ["9L1"],
- assurance: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- megakick: ["9L1"],
- slam: ["9L1"],
- gigaimpact: ["9L1"],
- bind: ["9L1"],
- pound: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- vacuumwave: ["9L1"],
- flashcannon: ["9L1"],
- mirrorshot: ["9L1"],
- mirrorcoat: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- storedpower: ["9L1"],
- shadowball: ["9L1"],
- darkpulse: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- triattack: ["9L1"],
- irondefense: ["9L1"],
- bulkup: ["9L1"],
- stealthrock: ["9L1"],
- spikes: ["9L1"],
- calmmind: ["9L1"],
- magiccoat: ["9L1"],
- coaching: ["9L1"],
- wideguard: ["9L1"],
- workup: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- psychicterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- chillyreception: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- salamalix: {
- learnset: {
- accelerock: ["9L1"],
- stoneedge: ["9L1"],
- beatup: ["9L1"],
- rockslide: ["9L1"],
- rockblast: ["9L1"],
- rocktomb: ["9L1"],
- rockthrow: ["9L1"],
- rockpolish: ["9L1"],
- ironhead: ["9L1"],
- bulletpunch: ["9L1"],
- irontail: ["9L1"],
- metalclaw: ["9L1"],
- earthquake: ["9L1"],
- stompingtantrum: ["9L1"],
- bulldoze: ["9L1"],
- closecombat: ["9L1"],
- superpower: ["9L1"],
- bodypress: ["9L1"],
- rocksmash: ["9L1"],
- poweruppunch: ["9L1"],
- revenge: ["9L1"],
- brickbreak: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- psychicfangs: ["9L1"],
- zenheadbutt: ["9L1"],
- firefang: ["9L1"],
- thunderfang: ["9L1"],
- outrage: ["9L1"],
- dragonhammer: ["9L1"],
- dragontail: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- retaliate: ["9L1"],
- gigaimpact: ["9L1"],
- stealthrock: ["9L1"],
- spikes: ["9L1"],
- swordsdance: ["9L1"],
- bulkup: ["9L1"],
- taunt: ["9L1"],
- torment: ["9L1"],
- scaryface: ["9L1"],
- workup: ["9L1"],
- irondefense: ["9L1"],
- defensecurl: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- focusenergy: ["9L1"],
- laserfocus: ["9L1"],
- honeclaws: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- roar: ["9L1"],
- wideguard: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- cinnastar: {
- learnset: {
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- focusblast: ["9L1"],
- clearsmog: ["9L1"],
- poisonjab: ["9L1"],
- powergem: ["9L1"],
- stoneedge: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- earthquake: ["9L1"],
- earthpower: ["9L1"],
- toxic: ["9L1"],
- recover: ["9L1"],
- stealthrock: ["9L1"],
- wish: ["9L1"],
- haze: ["9L1"],
- corrosivegas: ["9L1"],
- sludge: ["9L1"],
- acid: ["9L1"],
- acidspray: ["9L1"],
- venoshock: ["9L1"],
- rocktomb: ["9L1"],
- rollout: ["9L1"],
- rockthrow: ["9L1"],
- meteorbeam: ["9L1"],
- ancientpower: ["9L1"],
- sandtomb: ["9L1"],
- magnitude: ["9L1"],
- mudslap: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- psychic: ["9L1"],
- psychocut: ["9L1"],
- flashcannon: ["9L1"],
- smartstrike: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- explosion: ["9L1"],
- lightscreen: ["9L1"],
- flash: ["9L1"],
- afteryou: ["9L1"],
- guardsplit: ["9L1"],
- guardswap: ["9L1"],
- skillswap: ["9L1"],
- powertrick: ["9L1"],
- harden: ["9L1"],
- irondefense: ["9L1"],
- acidarmor: ["9L1"],
- safeguard: ["9L1"],
- wonderroom: ["9L1"],
- sandstorm: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- mortalspin: ["9L1"],
- },
- },
- muabboa: {
- learnset: {
- earthquake: ["9L1"],
- highhorsepower: ["9L1"],
- stompingtantrum: ["9L1"],
- bulldoze: ["9L1"],
- closecombat: ["9L1"],
- superpower: ["9L1"],
- sacredsword: ["9L1"],
- highjumpkick: ["9L1"],
- machpunch: ["9L1"],
- brickbreak: ["9L1"],
- crosschop: ["9L1"],
- karatechop: ["9L1"],
- poweruppunch: ["9L1"],
- rocksmash: ["9L1"],
- submission: ["9L1"],
- vitalthrow: ["9L1"],
- revenge: ["9L1"],
- uturn: ["9L1"],
- xscissor: ["9L1"],
- knockoff: ["9L1"],
- nightslash: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- thief: ["9L1"],
- leafblade: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- slash: ["9L1"],
- gigaimpact: ["9L1"],
- quickattack: ["9L1"],
- fakeout: ["9L1"],
- smartstrike: ["9L1"],
- zenheadbutt: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- earthpower: ["9L1"],
- scorchingsands: ["9L1"],
- shadowball: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- swordsdance: ["9L1"],
- encore: ["9L1"],
- switcheroo: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- grassyterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- quickguard: ["9L1"],
- crystaltail: ["9L1"],
- crystalhealing: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- volvolpa: {
- learnset: {
- volttackle: ["9L1"],
- wildcharge: ["9L1"],
- helpinghand: ["9L1"],
- thunderfang: ["9L1"],
- spark: ["9L1"],
- hyperfang: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- slash: ["9L1"],
- scratch: ["9L1"],
- quickattack: ["9L1"],
- gigaimpact: ["9L1"],
- icefang: ["9L1"],
- crunch: ["9L1"],
- uturn: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- voltswitch: ["9L1"],
- chargebeam: ["9L1"],
- discharge: ["9L1"],
- risingvoltage: ["9L1"],
- shockwave: ["9L1"],
- electroweb: ["9L1"],
- electroball: ["9L1"],
- thundershock: ["9L1"],
- hypervoice: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- icebeam: ["9L1"],
- blizzard: ["9L1"],
- frostbreath: ["9L1"],
- darkpulse: ["9L1"],
- snarl: ["9L1"],
- thunderwave: ["9L1"],
- sheercold: ["9L1"],
- agility: ["9L1"],
- eerieimpulse: ["9L1"],
- workup: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- snowscape: ["9L1"],
- electricterrain: ["9L1"],
- tailwhip: ["9L1"],
- screech: ["9L1"],
- magnetrise: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- roar: ["9L1"],
- icespinner: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- harzodia: {
- learnset: {
- allyswitch: ["9L1"],
- solarbeam: ["9L1"],
- helpinghand: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- meteorbeam: ["9L1"],
- shadowball: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- dazzlinggleam: ["9L1"],
- thunderbolt: ["9L1"],
- calmmind: ["9L1"],
- trick: ["9L1"],
- agility: ["9L1"],
- recover: ["9L1"],
- thunderwave: ["9L1"],
- healbell: ["9L1"],
- futuresight: ["9L1"],
- expandingforce: ["9L1"],
- storedpower: ["9L1"],
- dreameater: ["9L1"],
- psybeam: ["9L1"],
- confusion: ["9L1"],
- zenheadbutt: ["9L1"],
- thunder: ["9L1"],
- chargebeam: ["9L1"],
- shockwave: ["9L1"],
- zapcannon: ["9L1"],
- fling: ["9L1"],
- hypervoice: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- hyperbeam: ["9L1"],
- teleport: ["9L1"],
- reflect: ["9L1"],
- lightscreen: ["9L1"],
- disable: ["9L1"],
- eerieimpulse: ["9L1"],
- gravity: ["9L1"],
- healpulse: ["9L1"],
- imprison: ["9L1"],
- laserfocus: ["9L1"],
- magicroom: ["9L1"],
- metronome: ["9L1"],
- mimic: ["9L1"],
- psychicterrain: ["9L1"],
- psychoshift: ["9L1"],
- psychup: ["9L1"],
- recycle: ["9L1"],
- safeguard: ["9L1"],
- speedswap: ["9L1"],
- swift: ["9L1"],
- trickroom: ["9L1"],
- wish: ["9L1"],
- wonderroom: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- quickguard: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- cyllindrake: {
- learnset: {
- spinout: ["9L1"],
- heavyslam: ["9L1"],
- stealthrock: ["9L1"],
- steelroller: ["9L1"],
- ironhead: ["9L1"],
- metalclaw: ["9L1"],
- dragonclaw: ["9L1"],
- outrage: ["9L1"],
- scaleshot: ["9L1"],
- dragontail: ["9L1"],
- dragonrush: ["9L1"],
- highhorsepower: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- smackdown: ["9L1"],
- rollout: ["9L1"],
- superpower: ["9L1"],
- bodypress: ["9L1"],
- brickbreak: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- firstimpression: ["9L1"],
- uturn: ["9L1"],
- wildcharge: ["9L1"],
- thunderfang: ["9L1"],
- firefang: ["9L1"],
- heatcrash: ["9L1"],
- flareblitz: ["9L1"],
- rapidspin: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- tackle: ["9L1"],
- steelbeam: ["9L1"],
- flashcannon: ["9L1"],
- mirrorshot: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- dragonbreath: ["9L1"],
- twister: ["9L1"],
- earthpower: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- flamethrower: ["9L1"],
- fireblast: ["9L1"],
- darkpulse: ["9L1"],
- aurasphere: ["9L1"],
- sludgebomb: ["9L1"],
- clearsmog: ["9L1"],
- boomburst: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- shiftgear: ["9L1"],
- toxic: ["9L1"],
- morningsun: ["9L1"],
- irondefense: ["9L1"],
- roar: ["9L1"],
- honeclaws: ["9L1"],
- workup: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- dragondance: ["9L1"],
- curse: ["9L1"],
- metalsound: ["9L1"],
- screech: ["9L1"],
- leer: ["9L1"],
- haze: ["9L1"],
- tarshot: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- quickguard: ["9L1"],
- helpinghand: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- feralspray: ["9L1"],
- },
- },
- kodokai: {
- learnset: {
- haze: ["9L1"],
- poltergeist: ["9L1"],
- phantomforce: ["9L1"],
- shadowpunch: ["9L1"],
- astonish: ["9L1"],
- firepunch: ["9L1"],
- flamewheel: ["9L1"],
- drainpunch: ["9L1"],
- brickbreak: ["9L1"],
- rocksmash: ["9L1"],
- shadowball: ["9L1"],
- hex: ["9L1"],
- ominouswind: ["9L1"],
- darkpulse: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- flameburst: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- heatwave: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- sludgebomb: ["9L1"],
- clearsmog: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- moonlight: ["9L1"],
- trickroom: ["9L1"],
- wish: ["9L1"],
- aromatherapy: ["9L1"],
- willowisp: ["9L1"],
- encore: ["9L1"],
- destinybond: ["9L1"],
- disable: ["9L1"],
- safeguard: ["9L1"],
- lightscreen: ["9L1"],
- smokescreen: ["9L1"],
- grudge: ["9L1"],
- facade: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- mistyterrain: ["9L1"],
- sweetscent: ["9L1"],
- sweetkiss: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- electangle: {
- learnset: {
- wildcharge: ["9L1"],
- gyroball: ["9L1"],
- zingzap: ["9L1"],
- powerwhip: ["9L1"],
- earthquake: ["9L1"],
- rockslide: ["9L1"],
- heatcrash: ["9L1"],
- superpower: ["9L1"],
- bodypress: ["9L1"],
- thunderbolt: ["9L1"],
- discharge: ["9L1"],
- voltswitch: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- overheat: ["9L1"],
- dazzlinggleam: ["9L1"],
- stealthrock: ["9L1"],
- thunderwave: ["9L1"],
- haze: ["9L1"],
- aromatherapy: ["9L1"],
- thunder: ["9L1"],
- risingvoltage: ["9L1"],
- spark: ["9L1"],
- chargebeam: ["9L1"],
- shockwave: ["9L1"],
- electroball: ["9L1"],
- electroweb: ["9L1"],
- thundershock: ["9L1"],
- grassknot: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- brickbreak: ["9L1"],
- fling: ["9L1"],
- payback: ["9L1"],
- brutalswing: ["9L1"],
- rocksmash: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- slam: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- swift: ["9L1"],
- triattack: ["9L1"],
- gigaimpact: ["9L1"],
- hyperbeam: ["9L1"],
- workup: ["9L1"],
- helpinghand: ["9L1"],
- agility: ["9L1"],
- irondefense: ["9L1"],
- electricterrain: ["9L1"],
- eerieimpulse: ["9L1"],
- magnetrise: ["9L1"],
- magneticflux: ["9L1"],
- lightscreen: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- flashcannon: ["9L1"],
- ironhead: ["9L1"],
- steelbeam: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- wideguard: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- dolphena: {
- learnset: {
- liquidation: ["9L1"],
- flipturn: ["9L1"],
- aquatail: ["9L1"],
- waterfall: ["9L1"],
- outrage: ["9L1"],
- dragontail: ["9L1"],
- dragonrush: ["9L1"],
- scaleshot: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- irontail: ["9L1"],
- acrobatics: ["9L1"],
- dualwingbeat: ["9L1"],
- crunch: ["9L1"],
- lashout: ["9L1"],
- payback: ["9L1"],
- firefang: ["9L1"],
- icefang: ["9L1"],
- thunderfang: ["9L1"],
- psychicfangs: ["9L1"],
- brickbreak: ["9L1"],
- bodyslam: ["9L1"],
- wrap: ["9L1"],
- headbutt: ["9L1"],
- gigaimpact: ["9L1"],
- doubleedge: ["9L1"],
- thrash: ["9L1"],
- flail: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- hydropump: ["9L1"],
- brine: ["9L1"],
- bubblebeam: ["9L1"],
- dive: ["9L1"],
- waterpulse: ["9L1"],
- watergun: ["9L1"],
- whirlpool: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- dragonbreath: ["9L1"],
- twister: ["9L1"],
- icebeam: ["9L1"],
- blizzard: ["9L1"],
- icywind: ["9L1"],
- energyball: ["9L1"],
- darkpulse: ["9L1"],
- dragondance: ["9L1"],
- moonlight: ["9L1"],
- coil: ["9L1"],
- defog: ["9L1"],
- lightscreen: ["9L1"],
- workup: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- mistyterrain: ["9L1"],
- laserfocus: ["9L1"],
- focusenergy: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- chillingwater: ["9L1"],
- roar: ["9L1"],
- icespinner: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- soleron: {
- learnset: {
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- discharge: ["9L1"],
- voltswitch: ["9L1"],
- shockwave: ["9L1"],
- chargebeam: ["9L1"],
- thundershock: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- aircutter: ["9L1"],
- gust: ["9L1"],
- heatwave: ["9L1"],
- weatherball: ["9L1"],
- hypervoice: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- wildcharge: ["9L1"],
- spark: ["9L1"],
- bravebird: ["9L1"],
- dualwingbeat: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- peck: ["9L1"],
- drillpeck: ["9L1"],
- skyattack: ["9L1"],
- pluck: ["9L1"],
- acrobatics: ["9L1"],
- uturn: ["9L1"],
- doubleedge: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- tackle: ["9L1"],
- roost: ["9L1"],
- defog: ["9L1"],
- thunderwave: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- whirlwind: ["9L1"],
- workup: ["9L1"],
- featherdance: ["9L1"],
- charge: ["9L1"],
- metalsound: ["9L1"],
- magneticflux: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- electricterrain: ["9L1"],
- laserfocus: ["9L1"],
- mistyterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- wideguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- },
- },
- soleronawakened: {
- learnset: {
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- discharge: ["9L1"],
- voltswitch: ["9L1"],
- shockwave: ["9L1"],
- chargebeam: ["9L1"],
- thundershock: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- aircutter: ["9L1"],
- gust: ["9L1"],
- heatwave: ["9L1"],
- weatherball: ["9L1"],
- hypervoice: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- wildcharge: ["9L1"],
- spark: ["9L1"],
- bravebird: ["9L1"],
- dualwingbeat: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- peck: ["9L1"],
- drillpeck: ["9L1"],
- skyattack: ["9L1"],
- pluck: ["9L1"],
- acrobatics: ["9L1"],
- uturn: ["9L1"],
- doubleedge: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- tackle: ["9L1"],
- roost: ["9L1"],
- defog: ["9L1"],
- thunderwave: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- whirlwind: ["9L1"],
- workup: ["9L1"],
- featherdance: ["9L1"],
- charge: ["9L1"],
- metalsound: ["9L1"],
- magneticflux: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- electricterrain: ["9L1"],
- laserfocus: ["9L1"],
- mistyterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- wideguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- },
- },
- jaegorm: {
- learnset: {
- firstimpression: ["9L1"],
- calmmind: ["9L1"],
- uturn: ["9L1"],
- attackorder: ["9L1"],
- lunge: ["9L1"],
- leechlife: ["9L1"],
- bugbite: ["9L1"],
- xscissor: ["9L1"],
- photonray: ["9L1"],
- zenheadbutt: ["9L1"],
- psychocut: ["9L1"],
- knockoff: ["9L1"],
- darkestlariat: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- thief: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- superpower: ["9L1"],
- brickbreak: ["9L1"],
- rocksmash: ["9L1"],
- crosschop: ["9L1"],
- dragontail: ["9L1"],
- dragonclaw: ["9L1"],
- outrage: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- crushclaw: ["9L1"],
- slash: ["9L1"],
- gigaimpact: ["9L1"],
- tackle: ["9L1"],
- bugbuzz: ["9L1"],
- strugglebug: ["9L1"],
- silverwind: ["9L1"],
- infestation: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- extrasensory: ["9L1"],
- futuresight: ["9L1"],
- psybeam: ["9L1"],
- confusion: ["9L1"],
- darkpulse: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- cosmicpower: ["9L1"],
- honeclaws: ["9L1"],
- workup: ["9L1"],
- growth: ["9L1"],
- acidarmor: ["9L1"],
- imprison: ["9L1"],
- hypnosis: ["9L1"],
- magicroom: ["9L1"],
- mirrorcoat: ["9L1"],
- powerswap: ["9L1"],
- psychicterrain: ["9L1"],
- supersonic: ["9L1"],
- wonderroom: ["9L1"],
- safeguard: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- afteryou: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- pounce: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- jaegormcollective: {
- learnset: {
- firstimpression: ["9L1"],
- calmmind: ["9L1"],
- uturn: ["9L1"],
- attackorder: ["9L1"],
- lunge: ["9L1"],
- leechlife: ["9L1"],
- bugbite: ["9L1"],
- xscissor: ["9L1"],
- photongeyser: ["9L1"],
- zenheadbutt: ["9L1"],
- psychocut: ["9L1"],
- knockoff: ["9L1"],
- darkestlariat: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- thief: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- superpower: ["9L1"],
- brickbreak: ["9L1"],
- rocksmash: ["9L1"],
- crosschop: ["9L1"],
- dragontail: ["9L1"],
- dragonclaw: ["9L1"],
- outrage: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- crushclaw: ["9L1"],
- slash: ["9L1"],
- gigaimpact: ["9L1"],
- tackle: ["9L1"],
- bugbuzz: ["9L1"],
- strugglebug: ["9L1"],
- silverwind: ["9L1"],
- infestation: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- extrasensory: ["9L1"],
- futuresight: ["9L1"],
- psybeam: ["9L1"],
- confusion: ["9L1"],
- darkpulse: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- cosmicpower: ["9L1"],
- honeclaws: ["9L1"],
- workup: ["9L1"],
- growth: ["9L1"],
- acidarmor: ["9L1"],
- imprison: ["9L1"],
- hypnosis: ["9L1"],
- magicroom: ["9L1"],
- mirrorcoat: ["9L1"],
- powerswap: ["9L1"],
- psychicterrain: ["9L1"],
- supersonic: ["9L1"],
- wonderroom: ["9L1"],
- safeguard: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- afteryou: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- pounce: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- elemadillo: {
- learnset: {
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- discharge: ["9L1"],
- voltswitch: ["9L1"],
- electroball: ["9L1"],
- flashcannon: ["9L1"],
- steelbeam: ["9L1"],
- energyball: ["9L1"],
- wildcharge: ["9L1"],
- zingzap: ["9L1"],
- ironhead: ["9L1"],
- spinout: ["9L1"],
- highhorsepower: ["9L1"],
- uturn: ["9L1"],
- rapidspin: ["9L1"],
- shiftgear: ["9L1"],
- thunderwave: ["9L1"],
- reflect: ["9L1"],
- lightscreen: ["9L1"],
- eerieimpulse: ["9L1"],
- agility: ["9L1"],
- thundershock: ["9L1"],
- tackle: ["9L1"],
- growl: ["9L1"],
- spark: ["9L1"],
- thunderfang: ["9L1"],
- metalclaw: ["9L1"],
- safeguard: ["9L1"],
- doubleedge: ["9L1"],
- gigaimpact: ["9L1"],
- bodyslam: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- round: ["9L1"],
- bulldoze: ["9L1"],
- rocktomb: ["9L1"],
- rockslide: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- electricterrain: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- sandstorm: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- endure: ["9L1"],
- doubleshock: ["9L1"],
- helpinghand: ["9L1"],
- quickguard: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- axolacred: {
- learnset: {
- acrobatics: ["9L1"],
- dracometeor: ["9L1"],
- coreenforcer: ["9L1"],
- dragontail: ["9L1"],
- dragonpulse: ["9L1"],
- airslash: ["9L1"],
- meteorbeam: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- energyball: ["9L1"],
- weatherball: ["9L1"],
- flipturn: ["9L1"],
- shedtail: ["9L1"],
- morningsun: ["9L1"],
- recover: ["9L1"],
- defog: ["9L1"],
- encore: ["9L1"],
- dragonbreath: ["9L1"],
- twister: ["9L1"],
- dragonclaw: ["9L1"],
- aerialace: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- aircutter: ["9L1"],
- gust: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- safeguard: ["9L1"],
- mist: ["9L1"],
- haze: ["9L1"],
- futuresight: ["9L1"],
- roost: ["9L1"],
- extrasensory: ["9L1"],
- shadowball: ["9L1"],
- psychic: ["9L1"],
- hypervoice: ["9L1"],
- bodyslam: ["9L1"],
- round: ["9L1"],
- hyperbeam: ["9L1"],
- raindance: ["9L1"],
- snowscape: ["9L1"],
- sunnyday: ["9L1"],
- sandstorm: ["9L1"],
- mistyterrain: ["9L1"],
- psychicterrain: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- endure: ["9L1"],
- chillingwater: ["9L1"],
- stealthrock: ["9L1"],
- helpinghand: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- healingwish: ["9L1"],
- wish: ["9L1"],
- },
- },
- roscenti: {
- learnset: {
- pinmissile: ["9L1"],
- firstimpression: ["9L1"],
- megahorn: ["9L1"],
- leechlife: ["9L1"],
- lunge: ["9L1"],
- uturn: ["9L1"],
- bulletseed: ["9L1"],
- powerwhip: ["9L1"],
- hornleech: ["9L1"],
- solarblade: ["9L1"],
- superpower: ["9L1"],
- swordsdance: ["9L1"],
- leechseed: ["9L1"],
- growth: ["9L1"],
- taunt: ["9L1"],
- strugglebug: ["9L1"],
- stringshot: ["9L1"],
- bugbuzz: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- solarbeam: ["9L1"],
- vinewhip: ["9L1"],
- razorleaf: ["9L1"],
- bugbite: ["9L1"],
- seedbomb: ["9L1"],
- scratch: ["9L1"],
- furycutter: ["9L1"],
- slash: ["9L1"],
- nightslash: ["9L1"],
- leafblade: ["9L1"],
- petalblizzard: ["9L1"],
- suckerpunch: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- drillrun: ["9L1"],
- synthesis: ["9L1"],
- irontail: ["9L1"],
- strength: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- gigaimpact: ["9L1"],
- hyperbeam: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- pounce: ["9L1"],
- trailblaze: ["9L1"],
- quickguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalcage: ["9L1"],
- crystalhealing: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- blunderbusk: {
- learnset: {
- haze: ["9L1"],
- waterpulse: ["9L1"],
- hydropump: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- chillingwater: ["9L1"],
- aurasphere: ["9L1"],
- darkpulse: ["9L1"],
- dragonpulse: ["9L1"],
- icebeam: ["9L1"],
- energyball: ["9L1"],
- flashcannon: ["9L1"],
- terrainpulse: ["9L1"],
- recover: ["9L1"],
- shellsmash: ["9L1"],
- stealthrock: ["9L1"],
- tackle: ["9L1"],
- bubble: ["9L1"],
- withdraw: ["9L1"],
- aquajet: ["9L1"],
- whirlpool: ["9L1"],
- bubblebeam: ["9L1"],
- laserfocus: ["9L1"],
- razorshell: ["9L1"],
- acidarmor: ["9L1"],
- muddywater: ["9L1"],
- attract: ["9L1"],
- blizzard: ["9L1"],
- brine: ["9L1"],
- dive: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- explosion: ["9L1"],
- facade: ["9L1"],
- focusblast: ["9L1"],
- gigaimpact: ["9L1"],
- snowscape: ["9L1"],
- icywind: ["9L1"],
- irondefense: ["9L1"],
- lightscreen: ["9L1"],
- liquidation: ["9L1"],
- mudshot: ["9L1"],
- payback: ["9L1"],
- poisonjab: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- rockblast: ["9L1"],
- round: ["9L1"],
- screech: ["9L1"],
- selfdestruct: ["9L1"],
- shadowball: ["9L1"],
- sleeptalk: ["9L1"],
- sludgebomb: ["9L1"],
- smartstrike: ["9L1"],
- snore: ["9L1"],
- steelroller: ["9L1"],
- substitute: ["9L1"],
- swagger: ["9L1"],
- toxic: ["9L1"],
- swift: ["9L1"],
- torment: ["9L1"],
- triattack: ["9L1"],
- weatherball: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- barracoth: {
- learnset: {
- wavecrash: ["9L1"],
- chillingwater: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- hydropump: ["9L1"],
- beatup: ["9L1"],
- icebeam: ["9L1"],
- freezedry: ["9L1"],
- liquidation: ["9L1"],
- flipturn: ["9L1"],
- tripleaxel: ["9L1"],
- iceshard: ["9L1"],
- iciclecrash: ["9L1"],
- earthquake: ["9L1"],
- bodypress: ["9L1"],
- heavyslam: ["9L1"],
- dragontail: ["9L1"],
- slackoff: ["9L1"],
- curse: ["9L1"],
- sheercold: ["9L1"],
- roar: ["9L1"],
- auroraveil: ["9L1"],
- chillyreception: ["9L1"],
- slash: ["9L1"],
- tackle: ["9L1"],
- tailwhip: ["9L1"],
- bubble: ["9L1"],
- mudshot: ["9L1"],
- workup: ["9L1"],
- focusenergy: ["9L1"],
- icefang: ["9L1"],
- haze: ["9L1"],
- brine: ["9L1"],
- encore: ["9L1"],
- nightslash: ["9L1"],
- dive: ["9L1"],
- aquatail: ["9L1"],
- snowscape: ["9L1"],
- attract: ["9L1"],
- avalanche: ["9L1"],
- blizzard: ["9L1"],
- confide: ["9L1"],
- doubleteam: ["9L1"],
- drillrun: ["9L1"],
- echoedvoice: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- fling: ["9L1"],
- frostbreath: ["9L1"],
- frustration: ["9L1"],
- gigaimpact: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- irontail: ["9L1"],
- protect: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- round: ["9L1"],
- safeguard: ["9L1"],
- sleeptalk: ["9L1"],
- smartstrike: ["9L1"],
- snore: ["9L1"],
- substitute: ["9L1"],
- superpower: ["9L1"],
- swagger: ["9L1"],
- thief: ["9L1"],
- waterfall: ["9L1"],
- waterpulse: ["9L1"],
- aquacutter: ["9L1"],
- helpinghand: ["9L1"],
- wideguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- sturgard: {
- learnset: {
- wavecrash: ["9L1"],
- headsmash: ["9L1"],
- doubleedge: ["9L1"],
- flipturn: ["9L1"],
- liquidation: ["9L1"],
- aquatail: ["9L1"],
- aquajet: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- hydropump: ["9L1"],
- earthpower: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- stoneedge: ["9L1"],
- waterpulse: ["9L1"],
- dive: ["9L1"],
- rockslide: ["9L1"],
- rockblast: ["9L1"],
- drainingkiss: ["9L1"],
- chillingwater: ["9L1"],
- raindance: ["9L1"],
- stealthrock: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- mistyterrain: ["9L1"],
- muddywater: ["9L1"],
- mudshot: ["9L1"],
- watergun: ["9L1"],
- rockpolish: ["9L1"],
- irondefense: ["9L1"],
- bodypress: ["9L1"],
- bodyslam: ["9L1"],
- bonerush: ["9L1"],
- amnesia: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- protect: ["9L1"],
- substitute: ["9L1"],
- endure: ["9L1"],
- reflect: ["9L1"],
- irontail: ["9L1"],
- ironhead: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- curse: ["9L1"],
- feralrush: ["9L1"],
- feralspray: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- crystalbash: ["9L1"],
- crystaltail: ["9L1"],
- crystalcage: ["9L1"],
- crystalbeam: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- }
- },
- jamborai: {
- learnset: {
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- clearsmog: ["9L1"],
- acidspray: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- storedpower: ["9L1"],
- futuresight: ["9L1"],
- shadowball: ["9L1"],
- hydropump: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- chillingwater: ["9L1"],
- icebeam: ["9L1"],
- blizzard: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- toxic: ["9L1"],
- recover: ["9L1"],
- toxicspikes: ["9L1"],
- calmmind: ["9L1"],
- acidarmor: ["9L1"],
- triattack: ["9L1"],
- teleport: ["9L1"],
- sludge: ["9L1"],
- psybeam: ["9L1"],
- confusion: ["9L1"],
- acid: ["9L1"],
- gastroacid: ["9L1"],
- bodyslam: ["9L1"],
- gunkshot: ["9L1"],
- zenheadbutt: ["9L1"],
- psychocut: ["9L1"],
- wrap: ["9L1"],
- wringout: ["9L1"],
- hyperbeam: ["9L1"],
- bubblebeam: ["9L1"],
- darkpulse: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- venoshock: ["9L1"],
- poisonsting: ["9L1"],
- poisongas: ["9L1"],
- skillswap: ["9L1"],
- guardswap: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- safeguard: ["9L1"],
- powertrick: ["9L1"],
- trickroom: ["9L1"],
- wonderroom: ["9L1"],
- mirrorcoat: ["9L1"],
- magiccoat: ["9L1"],
- magicroom: ["9L1"],
- embargo: ["9L1"],
- mortalspin: ["9L1"],
- twinbeam: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralpower: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- dracoil: {
- learnset: {
- belch: ["9L1"],
- roar: ["9L1"],
- outrage: ["9L1"],
- dragontail: ["9L1"],
- dragonrush: ["9L1"],
- dualwingbeat: ["9L1"],
- acrobatics: ["9L1"],
- earthquake: ["9L1"],
- irontail: ["9L1"],
- defog: ["9L1"],
- ironhead: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- icebeam: ["9L1"],
- thunderbolt: ["9L1"],
- darkpulse: ["9L1"],
- coil: ["9L1"],
- dragondance: ["9L1"],
- glare: ["9L1"],
- roost: ["9L1"],
- toxic: ["9L1"],
- tackle: ["9L1"],
- leer: ["9L1"],
- gust: ["9L1"],
- tailwhip: ["9L1"],
- bite: ["9L1"],
- twister: ["9L1"],
- tailwind: ["9L1"],
- uturn: ["9L1"],
- bounce: ["9L1"],
- aerialace: ["9L1"],
- agility: ["9L1"],
- attract: ["9L1"],
- blizzard: ["9L1"],
- bodyslam: ["9L1"],
- breakingswipe: ["9L1"],
- bulldoze: ["9L1"],
- bulletseed: ["9L1"],
- crunch: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- falseswipe: ["9L1"],
- firespin: ["9L1"],
- fly: ["9L1"],
- gigaimpact: ["9L1"],
- heatwave: ["9L1"],
- hyperbeam: ["9L1"],
- hypervoice: ["9L1"],
- pluck: ["9L1"],
- powerswap: ["9L1"],
- protect: ["9L1"],
- psychup: ["9L1"],
- raindance: ["9L1"],
- rest: ["9L1"],
- whirlwind: ["9L1"],
- haze: ["9L1"],
- rocksmash: ["9L1"],
- round: ["9L1"],
- safeguard: ["9L1"],
- sleeptalk: ["9L1"],
- snore: ["9L1"],
- solarbeam: ["9L1"],
- steelwing: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- swift: ["9L1"],
- thief: ["9L1"],
- thunder: ["9L1"],
- uproar: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- celespirit: {
- learnset: {
- shadowball: ["9L1"],
- hex: ["9L1"],
- moonblast: ["9L1"],
- icebeam: ["9L1"],
- thunderbolt: ["9L1"],
- calmmind: ["9L1"],
- moonlight: ["9L1"],
- sheercold: ["9L1"],
- hypnosis: ["9L1"],
- astonish: ["9L1"],
- growl: ["9L1"],
- fairywind: ["9L1"],
- helpinghand: ["9L1"],
- nightshade: ["9L1"],
- ominouswind: ["9L1"],
- lifedew: ["9L1"],
- healpulse: ["9L1"],
- curse: ["9L1"],
- icywind: ["9L1"],
- healbell: ["9L1"],
- eerieimpulse: ["9L1"],
- healingwish: ["9L1"],
- attract: ["9L1"],
- blizzard: ["9L1"],
- chargebeam: ["9L1"],
- confide: ["9L1"],
- darkpulse: ["9L1"],
- dazzlinggleam: ["9L1"],
- doubleteam: ["9L1"],
- drainingkiss: ["9L1"],
- dreameater: ["9L1"],
- embargo: ["9L1"],
- endure: ["9L1"],
- energyball: ["9L1"],
- facade: ["9L1"],
- flash: ["9L1"],
- fling: ["9L1"],
- frustration: ["9L1"],
- hyperbeam: ["9L1"],
- infestation: ["9L1"],
- lightscreen: ["9L1"],
- magiccoat: ["9L1"],
- magicroom: ["9L1"],
- meteorbeam: ["9L1"],
- painsplit: ["9L1"],
- payback: ["9L1"],
- protect: ["9L1"],
- psychic: ["9L1"],
- psychup: ["9L1"],
- raindance: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- return: ["9L1"],
- roleplay: ["9L1"],
- round: ["9L1"],
- shadowclaw: ["9L1"],
- shockwave: ["9L1"],
- skillswap: ["9L1"],
- sleeptalk: ["9L1"],
- snatch: ["9L1"],
- snore: ["9L1"],
- spite: ["9L1"],
- substitute: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- taunt: ["9L1"],
- telekinesis: ["9L1"],
- thief: ["9L1"],
- throatchop: ["9L1"],
- thunder: ["9L1"],
- torment: ["9L1"],
- trick: ["9L1"],
- trickroom: ["9L1"],
- zenheadbutt: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- noxtrice: {
- learnset: {
- flareblitz: ["9L1"],
- blazekick: ["9L1"],
- honeclaws: ["9L1"],
- poisonjab: ["9L1"],
- defog: ["9L1"],
- earthquake: ["9L1"],
- gunkshot: ["9L1"],
- uturn: ["9L1"],
- crunch: ["9L1"],
- toxic: ["9L1"],
- willowisp: ["9L1"],
- taunt: ["9L1"],
- roost: ["9L1"],
- stompingtantrum: ["9L1"],
- dragondance: ["9L1"],
- peck: ["9L1"],
- growl: ["9L1"],
- smokescreen: ["9L1"],
- ember: ["9L1"],
- smog: ["9L1"],
- flamewheel: ["9L1"],
- drillpeck: ["9L1"],
- scaryface: ["9L1"],
- memento: ["9L1"],
- bravebird: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- attract: ["9L1"],
- beatup: ["9L1"],
- bounce: ["9L1"],
- breakingswipe: ["9L1"],
- corrosivegas: ["9L1"],
- crosspoison: ["9L1"],
- dragonclaw: ["9L1"],
- dragonpulse: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- faketears: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- fling: ["9L1"],
- foulplay: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- slash: ["9L1"],
- hypervoice: ["9L1"],
- nightslash: ["9L1"],
- heatwave: ["9L1"],
- helpinghand: ["9L1"],
- hurricane: ["9L1"],
- irontail: ["9L1"],
- overheat: ["9L1"],
- payback: ["9L1"],
- pluck: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- round: ["9L1"],
- scaleshot: ["9L1"],
- outrage: ["9L1"],
- shadowclaw: ["9L1"],
- sleeptalk: ["9L1"],
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- snore: ["9L1"],
- steelwing: ["9L1"],
- substitute: ["9L1"],
- swift: ["9L1"],
- thief: ["9L1"],
- thunderwave: ["9L1"],
- venomdrench: ["9L1"],
- venoshock: ["9L1"],
- quickguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- efflor: {
- learnset: {
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- chillyreception: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- substitute: ["9L1"],
- sleeptalk: ["9L1"],
- rockblast: ["9L1"],
- rocktomb: ["9L1"],
- smackdown: ["9L1"],
- rollout: ["9L1"],
- rockthrow: ["9L1"],
- grassyglide: ["9L1"],
- petalblizzard: ["9L1"],
- bulletseed: ["9L1"],
- seedbomb: ["9L1"],
- vinewhip: ["9L1"],
- earthquake: ["9L1"],
- highhorsepower: ["9L1"],
- bulldoze: ["9L1"],
- stompingtantrum: ["9L1"],
- bodypress: ["9L1"],
- heavyslam: ["9L1"],
- ironhead: ["9L1"],
- gyroball: ["9L1"],
- bite: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- zenheadbutt: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- megapunch: ["9L1"],
- megakick: ["9L1"],
- takedown: ["9L1"],
- pound: ["9L1"],
- headbutt: ["9L1"],
- powergem: ["9L1"],
- meteorbeam: ["9L1"],
- ancientpower: ["9L1"],
- gigadrain: ["9L1"],
- grassknot: ["9L1"],
- energyball: ["9L1"],
- megadrain: ["9L1"],
- absorb: ["9L1"],
- magicalleaf: ["9L1"],
- leafage: ["9L1"],
- earthpower: ["9L1"],
- mudbomb: ["9L1"],
- mudslap: ["9L1"],
- dazzlinggleam: ["9L1"],
- leer: ["9L1"],
- stealthrock: ["9L1"],
- rockpolish: ["9L1"],
- curse: ["9L1"],
- synthesis: ["9L1"],
- grassyterrain: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- sandstorm: ["9L1"],
- mistyterrain: ["9L1"],
- growth: ["9L1"],
- watergun: ["9L1"],
- defensecurl: ["9L1"],
- rapidspin: ["9L1"],
- leechseed: ["9L1"],
- ingrain: ["9L1"],
- solarbeam: ["9L1"],
- weatherball: ["9L1"],
- bellydrum: ["9L1"],
- helpinghand: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- crystalhealing: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- avastar: {
- learnset: {
- psychic: ["9L1"],
- psyshock: ["9L1"],
- futuresight: ["9L1"],
- flashcannon: ["9L1"],
- steelbeam: ["9L1"],
- dazzlinggleam: ["9L1"],
- darkpulse: ["9L1"],
- shadowball: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- thunderwave: ["9L1"],
- hurricane: ["9L1"],
- rapidspin: ["9L1"],
- calmmind: ["9L1"],
- recover: ["9L1"],
- teleport: ["9L1"],
- irondefense: ["9L1"],
- gravity: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- safeguard: ["9L1"],
- trickroom: ["9L1"],
- quash: ["9L1"],
- heavyslam: ["9L1"],
- zenheadbutt: ["9L1"],
- bodyslam: ["9L1"],
- gigaimpact: ["9L1"],
- hyperbeam: ["9L1"],
- psybeam: ["9L1"],
- confusion: ["9L1"],
- magnetbomb: ["9L1"],
- ironhead: ["9L1"],
- gyroball: ["9L1"],
- spark: ["9L1"],
- psychicterrain: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralhealing: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- faerenheit: {
- learnset: {
- acrobatics: ["9L1"],
- lavaplume: ["9L1"],
- aerialace: ["9L1"],
- burnup: ["9L1"],
- calmmind: ["9L1"],
- dazzlinggleam: ["9L1"],
- encore: ["9L1"],
- firespin: ["9L1"],
- fireblast: ["9L1"],
- flamecharge: ["9L1"],
- flamethrower: ["9L1"],
- flash: ["9L1"],
- gravity: ["9L1"],
- healbell: ["9L1"],
- heatcrash: ["9L1"],
- hyperbeam: ["9L1"],
- imprison: ["9L1"],
- lightscreen: ["9L1"],
- mistyexplosion: ["9L1"],
- mistyterrain: ["9L1"],
- moonblast: ["9L1"],
- mysticalfire: ["9L1"],
- overheat: ["9L1"],
- playrough: ["9L1"],
- psychup: ["9L1"],
- reflect: ["9L1"],
- skillswap: ["9L1"],
- sunnyday: ["9L1"],
- trick: ["9L1"],
- trickroom: ["9L1"],
- willowisp: ["9L1"],
- wish: ["9L1"],
- triattack: ["9L1"],
- flareblitz: ["9L1"],
- fairywind: ["9L1"],
- ember: ["9L1"],
- safeguard: ["9L1"],
- wrap: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- pound: ["9L1"],
- gigaimpact: ["9L1"],
- zenheadbutt: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- morningsun: ["9L1"],
- helpinghand: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- cellsius: {
- learnset: {
- hydropump: ["9L1"],
- scald: ["9L1"],
- surf: ["9L1"],
- brine: ["9L1"],
- dive: ["9L1"],
- bubblebeam: ["9L1"],
- waterpulse: ["9L1"],
- watergun: ["9L1"],
- moonblast: ["9L1"],
- dazzlinggleam: ["9L1"],
- mistyexplosion: ["9L1"],
- fairywind: ["9L1"],
- icebeam: ["9L1"],
- icywind: ["9L1"],
- blizzard: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- psychic: ["9L1"],
- extrasensory: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- flipturn: ["9L1"],
- liquidation: ["9L1"],
- waterfall: ["9L1"],
- playrough: ["9L1"],
- ironhead: ["9L1"],
- zenheadbutt: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- wrap: ["9L1"],
- defog: ["9L1"],
- healbell: ["9L1"],
- calmmind: ["9L1"],
- haze: ["9L1"],
- trick: ["9L1"],
- lifedew: ["9L1"],
- aquaring: ["9L1"],
- charm: ["9L1"],
- raindance: ["9L1"],
- mistyterrain: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- sunnyday: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- chillingwater: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- kelven: {
- learnset: {
- spiritbreak: ["9L1"],
- tripleaxel: ["9L1"],
- iciclecrash: ["9L1"],
- iceshard: ["9L1"],
- avalanche: ["9L1"],
- playrough: ["9L1"],
- closecombat: ["9L1"],
- sacredsword: ["9L1"],
- crosschop: ["9L1"],
- stoneedge: ["9L1"],
- nightslash: ["9L1"],
- hornleech: ["9L1"],
- ironhead: ["9L1"],
- smartstrike: ["9L1"],
- zenheadbutt: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- rapidspin: ["9L1"],
- slash: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- icebeam: ["9L1"],
- blizzard: ["9L1"],
- frostbreath: ["9L1"],
- aurorabeam: ["9L1"],
- powdersnow: ["9L1"],
- icywind: ["9L1"],
- moonblast: ["9L1"],
- dazzlinggleam: ["9L1"],
- mistyexplosion: ["9L1"],
- flashcannon: ["9L1"],
- powergem: ["9L1"],
- mysticalfire: ["9L1"],
- swordsdance: ["9L1"],
- spikes: ["9L1"],
- sheercold: ["9L1"],
- auroraveil: ["9L1"],
- calmmind: ["9L1"],
- reflect: ["9L1"],
- snowscape: ["9L1"],
- mistyterrain: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- icespinner: ["9L1"],
- helpinghand: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- },
- },
- salaos: {
- learnset: {
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- beatup: ["9L1"],
- fierywrath: ["9L1"],
- suckerpunch: ["9L1"],
- crunch: ["9L1"],
- bite: ["9L1"],
- thief: ["9L1"],
- payback: ["9L1"],
- brutalswing: ["9L1"],
- feintattack: ["9L1"],
- assurance: ["9L1"],
- lashout: ["9L1"],
- dragontail: ["9L1"],
- dragonclaw: ["9L1"],
- outrage: ["9L1"],
- firefang: ["9L1"],
- psychicfangs: ["9L1"],
- zenheadbutt: ["9L1"],
- aquatail: ["9L1"],
- powerwhip: ["9L1"],
- seedbomb: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- darkpulse: ["9L1"],
- snarl: ["9L1"],
- sludgebomb: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- surf: ["9L1"],
- scald: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- solarbeam: ["9L1"],
- psychic: ["9L1"],
- confusion: ["9L1"],
- dazzlinggleam: ["9L1"],
- dragonpulse: ["9L1"],
- hyperbeam: ["9L1"],
- recover: ["9L1"],
- toxic: ["9L1"],
- toxicspikes: ["9L1"],
- amnesia: ["9L1"],
- lightscreen: ["9L1"],
- psychicterrain: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- comeuppance: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- morndos: {
- learnset: {
- whirlwind: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- bravebird: ["9L1"],
- dualwingbeat: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- skyattack: ["9L1"],
- wingattack: ["9L1"],
- skydrop: ["9L1"],
- beatup: ["9L1"],
- foulplay: ["9L1"],
- darkestlariat: ["9L1"],
- lashout: ["9L1"],
- nightslash: ["9L1"],
- assurance: ["9L1"],
- payback: ["9L1"],
- thief: ["9L1"],
- uturn: ["9L1"],
- seedbomb: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- slash: ["9L1"],
- oblivionwing: ["9L1"],
- hurricane: ["9L1"],
- airslash: ["9L1"],
- aircutter: ["9L1"],
- gust: ["9L1"],
- darkpulse: ["9L1"],
- heatwave: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- psychic: ["9L1"],
- mudslap: ["9L1"],
- roost: ["9L1"],
- defog: ["9L1"],
- taunt: ["9L1"],
- disable: ["9L1"],
- perishsong: ["9L1"],
- featherdance: ["9L1"],
- torment: ["9L1"],
- screech: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- tailwind: ["9L1"],
- curse: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- comeuppance: ["9L1"],
- wideguard: ["9L1"],
- quickguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- pythos: {
- learnset: {
- aurasphere: ["9L1"],
- crunch: ["9L1"],
- knockoff: ["9L1"],
- suckerpunch: ["9L1"],
- bite: ["9L1"],
- brutalswing: ["9L1"],
- payback: ["9L1"],
- assurance: ["9L1"],
- lashout: ["9L1"],
- superpower: ["9L1"],
- brickbreak: ["9L1"],
- rocksmash: ["9L1"],
- beatup: ["9L1"],
- revenge: ["9L1"],
- irontail: ["9L1"],
- ironhead: ["9L1"],
- psychicfangs: ["9L1"],
- firefang: ["9L1"],
- dragontail: ["9L1"],
- outrage: ["9L1"],
- scaleshot: ["9L1"],
- superfang: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- headbutt: ["9L1"],
- wrap: ["9L1"],
- constrict: ["9L1"],
- bind: ["9L1"],
- gigaimpact: ["9L1"],
- darkpulse: ["9L1"],
- focusblast: ["9L1"],
- flamethrower: ["9L1"],
- psychic: ["9L1"],
- gigadrain: ["9L1"],
- energyball: ["9L1"],
- grassknot: ["9L1"],
- solarbeam: ["9L1"],
- wringout: ["9L1"],
- hyperbeam: ["9L1"],
- coil: ["9L1"],
- glare: ["9L1"],
- nastyplot: ["9L1"],
- taunt: ["9L1"],
- torment: ["9L1"],
- screech: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- snowscape: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- comeuppance: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralbite: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- corundell: {
- learnset: {
- stoneedge: ["9L1"],
- energyball: ["9L1"],
- solarbeam: ["9L1"],
- solarblade: ["9L1"],
- overheat: ["9L1"],
- flareblitz: ["9L1"],
- flamecharge: ["9L1"],
- rockslide: ["9L1"],
- rockblast: ["9L1"],
- smackdown: ["9L1"],
- rocktomb: ["9L1"],
- rockpolish: ["9L1"],
- bodypress: ["9L1"],
- superpower: ["9L1"],
- wildcharge: ["9L1"],
- zingzap: ["9L1"],
- spark: ["9L1"],
- earthquake: ["9L1"],
- stompingtantrum: ["9L1"],
- bulldoze: ["9L1"],
- dualwingbeat: ["9L1"],
- doubleedge: ["9L1"],
- bodyslam: ["9L1"],
- takedown: ["9L1"],
- pound: ["9L1"],
- slam: ["9L1"],
- gigaimpact: ["9L1"],
- meteorbeam: ["9L1"],
- revelationdance: ["9L1"],
- powergem: ["9L1"],
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- risingvoltage: ["9L1"],
- voltswitch: ["9L1"],
- discharge: ["9L1"],
- chargebeam: ["9L1"],
- shockwave: ["9L1"],
- thundershock: ["9L1"],
- earthpower: ["9L1"],
- scorchingsands: ["9L1"],
- triattack: ["9L1"],
- shadowball: ["9L1"],
- extrasensory: ["9L1"],
- hyperbeam: ["9L1"],
- stealthrock: ["9L1"],
- recover: ["9L1"],
- thunderwave: ["9L1"],
- painsplit: ["9L1"],
- electricterrain: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- metalsound: ["9L1"],
- eerieimpulse: ["9L1"],
- magnetrise: ["9L1"],
- lightscreen: ["9L1"],
- reflect: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- quadringo: {
- learnset: {
- dragontail: ["9L1"],
- dragonclaw: ["9L1"],
- beatup: ["9L1"],
- outrage: ["9L1"],
- dragonrush: ["9L1"],
- spiritbreak: ["9L1"],
- playrough: ["9L1"],
- earthquake: ["9L1"],
- bulldoze: ["9L1"],
- rockslide: ["9L1"],
- irontail: ["9L1"],
- aquatail: ["9L1"],
- bravebird: ["9L1"],
- dualwingbeat: ["9L1"],
- wingattack: ["9L1"],
- bounce: ["9L1"],
- nightslash: ["9L1"],
- brutalswing: ["9L1"],
- gigaimpact: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- takedown: ["9L1"],
- strength: ["9L1"],
- steelwing: ["9L1"],
- slam: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- dragonbreath: ["9L1"],
- twister: ["9L1"],
- moonblast: ["9L1"],
- drainingkiss: ["9L1"],
- dazzlinggleam: ["9L1"],
- mistyexplosion: ["9L1"],
- fairywind: ["9L1"],
- mysticalfire: ["9L1"],
- surf: ["9L1"],
- waterpulse: ["9L1"],
- airslash: ["9L1"],
- aircutter: ["9L1"],
- swift: ["9L1"],
- hypervoice: ["9L1"],
- hyperbeam: ["9L1"],
- roost: ["9L1"],
- defog: ["9L1"],
- healbell: ["9L1"],
- haze: ["9L1"],
- featherdance: ["9L1"],
- attract: ["9L1"],
- workup: ["9L1"],
- confide: ["9L1"],
- raindance: ["9L1"],
- sunnyday: ["9L1"],
- safeguard: ["9L1"],
- mimic: ["9L1"],
- leer: ["9L1"],
- mistyterrain: ["9L1"],
- calmmind: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- whirlwind: ["9L1"],
- helpinghand: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- saphor: {
- learnset: {
- doubleedge: ["9L1"],
- scorchingsands: ["9L1"],
- headlongrush: ["9L1"],
- bodyslam: ["9L1"],
- earthquake: ["9L1"],
- stoneedge: ["9L1"],
- superpower: ["9L1"],
- bodypress: ["9L1"],
- wildcharge: ["9L1"],
- hornleech: ["9L1"],
- trailblaze: ["9L1"],
- heavyslam: ["9L1"],
- ironhead: ["9L1"],
- megahorn: ["9L1"],
- playrough: ["9L1"],
- hypervoice: ["9L1"],
- triattack: ["9L1"],
- shadowball: ["9L1"],
- darkpulse: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- earthpower: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- grassknot: ["9L1"],
- solarbeam: ["9L1"],
- meteorbeam: ["9L1"],
- powergem: ["9L1"],
- psychic: ["9L1"],
- dazzlinggleam: ["9L1"],
- calmmind: ["9L1"],
- milkdrink: ["9L1"],
- bulkup: ["9L1"],
- stealthrock: ["9L1"],
- irondefense: ["9L1"],
- roar: ["9L1"],
- nobleroar: ["9L1"],
- healbell: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- headbutt: ["9L1"],
- round: ["9L1"],
- bulldoze: ["9L1"],
- rocktomb: ["9L1"],
- rockslide: ["9L1"],
- rockblast: ["9L1"],
- highhorsepower: ["9L1"],
- gigaimpact: ["9L1"],
- hyperbeam: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- endure: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- mistyterrain: ["9L1"],
- grassyterrain: ["9L1"],
- helpinghand: ["9L1"],
- wideguard: ["9L1"],
- crystalcutter: ["9L1"],
- crystaltail: ["9L1"],
- crystalbash: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- crystalshard: ["9L1"],
- },
- },
- fenreil: {
- learnset: {
- wildcharge: ["9L1"],
- ironhead: ["9L1"],
- irontail: ["9L1"],
- doubleedge: ["9L1"],
- howl: ["9L1"],
- bodyslam: ["9L1"],
- darkpulse: ["9L1"],
- snarl: ["9L1"],
- crunch: ["9L1"],
- jawlock: ["9L1"],
- knockoff: ["9L1"],
- playrough: ["9L1"],
- uturn: ["9L1"],
- stoneedge: ["9L1"],
- rockslide: ["9L1"],
- rockblast: ["9L1"],
- rocktomb: ["9L1"],
- psychicfangs: ["9L1"],
- firefang: ["9L1"],
- flamecharge: ["9L1"],
- icefang: ["9L1"],
- thunderfang: ["9L1"],
- trailblaze: ["9L1"],
- hypervoice: ["9L1"],
- shadowball: ["9L1"],
- aurasphere: ["9L1"],
- focusblast: ["9L1"],
- earthpower: ["9L1"],
- swordsdance: ["9L1"],
- nastyplot: ["9L1"],
- taunt: ["9L1"],
- substitute: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- round: ["9L1"],
- endure: ["9L1"],
- bite: ["9L1"],
- torment: ["9L1"],
- assurance: ["9L1"],
- meanlook: ["9L1"],
- scaryface: ["9L1"],
- superpower: ["9L1"],
- brutalswing: ["9L1"],
- nobleroar: ["9L1"],
- growl: ["9L1"],
- tackle: ["9L1"],
- roar: ["9L1"],
- headbutt: ["9L1"],
- superfang: ["9L1"],
- stompingtantrum: ["9L1"],
- helpinghand: ["9L1"],
- quickguard: ["9L1"],
- feralbite: ["9L1"],
- feralshred: ["9L1"],
- feralrush: ["9L1"],
- feralshriek: ["9L1"],
- feralpower: ["9L1"],
- feralbreath: ["9L1"],
- feralspray: ["9L1"],
- feralresilience: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- flocura: {
- learnset: {
- leafstorm: ["9L1"],
- focusblast: ["9L1"],
- aurasphere: ["9L1"],
- seedbomb: ["9L1"],
- bulletseed: ["9L1"],
- psychocut: ["9L1"],
- leechseed: ["9L1"],
- earthpower: ["9L1"],
- guardswap: ["9L1"],
- guardsplit: ["9L1"],
- powerswap: ["9L1"],
- uturn: ["9L1"],
- lunge: ["9L1"],
- zenheadbutt: ["9L1"],
- acrobatics: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- petalblizzard: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- takedown: ["9L1"],
- gigaimpact: ["9L1"],
- pollenpuff: ["9L1"],
- shadowball: ["9L1"],
- hex: ["9L1"],
- psychic: ["9L1"],
- futuresight: ["9L1"],
- psyshock: ["9L1"],
- darkpulse: ["9L1"],
- thunderbolt: ["9L1"],
- thunder: ["9L1"],
- dazzlinggleam: ["9L1"],
- powergem: ["9L1"],
- meteorbeam: ["9L1"],
- energyball: ["9L1"],
- gigadrain: ["9L1"],
- triattack: ["9L1"],
- hyperbeam: ["9L1"],
- sleeppowder: ["9L1"],
- stealthrock: ["9L1"],
- thunderwave: ["9L1"],
- painsplit: ["9L1"],
- taunt: ["9L1"],
- calmmind: ["9L1"],
- nastyplot: ["9L1"],
- amnesia: ["9L1"],
- workup: ["9L1"],
- psychicterrain: ["9L1"],
- mistyterrain: ["9L1"],
- sunnyday: ["9L1"],
- raindance: ["9L1"],
- snowscape: ["9L1"],
- sandstorm: ["9L1"],
- cottonspore: ["9L1"],
- stunspore: ["9L1"],
- attract: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- facade: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- swagger: ["9L1"],
- helpinghand: ["9L1"],
- crystaltail: ["9L1"],
- crystalbeam: ["9L1"],
- crystalcage: ["9L1"],
- crystalburst: ["9L1"],
- crystalhealing: ["9L1"],
- crystalfortification: ["9L1"],
- feralrush: ["9L1"],
- feralpower: ["9L1"],
- feralresilience: ["9L1"],
- feralspray: ["9L1"],
- feralhealing: ["9L1"],
- },
- },
- flocuranexus: {
- learnset: {
- },
- },
-};
diff --git a/data/mods/scootopiav2/moves.ts b/data/mods/scootopiav2/moves.ts
deleted file mode 100644
index 93f63b3cbe..0000000000
--- a/data/mods/scootopiav2/moves.ts
+++ /dev/null
@@ -1,1284 +0,0 @@
-export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
- shedtail: {
- num: 880,
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Shed Tail",
- pp: 10,
- priority: 0,
- flags: {},
- shortDesc: "Sac 12.5% HP, switch, heal ally 25%. Ally: 50% dmg redux this turn.",
- onTryHit(source) {
- if (!this.canSwitch(source.side)) {
- this.add('-fail', source);
- return this.NOT_FAIL;
- }
- if (source.hp <= Math.ceil(source.maxhp / 8)) {
- this.add('-fail', source, 'move: Shed Tail', '[weak]');
- return this.NOT_FAIL;
- }
- },
- onHit(target) {
- this.directDamage(Math.ceil(target.maxhp / 8));
- },
- slotCondition: 'shedtail',
- condition: {
- duration: 1,
- onSwap(target) {
- if (!target.fainted && (target.hp < target.maxhp || target.status)) {
- target.heal(target.maxhp / 4);
- this.add('-heal', target, target.getHealth, '[from] move: Healing Wish');
- }
- },
- onModifyDef(def, pokemon) {
- return this.chainModify(2);
- },
- onModifySpD(spd, pokemon) {
- return this.chainModify(2);
- },
- },
- selfSwitch: 'shedtail',
- secondary: null,
- target: "self",
- type: "Normal",
- zMove: { effect: 'clearnegativeboost' },
- },
- photonray: {
- accuracy: 100,
- basePower: 90,
- category: "Special",
- name: "Photon Ray",
- pp: 10,
- priority: 0,
- flags: { protect: 1, mirror: 1 },
- onModifyMove(move, pokemon) {
- if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical';
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Photon Geyser", target);
- },
- secondary: null,
- target: "normal",
- type: "Psychic",
- contestType: "Cool",
- },
- energysiphon: {
- accuracy: 100,
- basePower: 50,
- category: "Special",
- name: "Energy Siphon",
- shortDesc: "Drains target's HP for 3 turns.",
- pp: 10,
- priority: 0,
- flags: { protect: 1, mirror: 1, heal: 1, contact: 1 },
- drain: [1, 2],
- secondary: null,
- target: "normal",
- type: "Grass",
- volatileStatus: 'energysiphon',
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Fell Stinger", target);
- },
- condition: {
- onStart(target) {
- this.add('-start', target, 'move: Energy Siphon');
- },
- duration: 3,
- onResidualOrder: 8,
- onResidual(pokemon) {
- const target = this.getAtSlot(pokemon.volatiles['energysiphon'].sourceSlot);
- if (!target || target.fainted || target.hp <= 0) {
- console.log('Nothing to leech into');
- return;
- }
- const damage = this.damage(pokemon.baseMaxhp / 8, pokemon, target);
- if (damage) {
- this.heal(damage / 2, target, pokemon);
- }
- },
- },
- },
- sheercold: {
- accuracy: 85,
- basePower: 0,
- category: "Status",
- name: "Sheer Cold",
- pp: 15,
- priority: 0,
- flags: { protect: 1, reflectable: 1, mirror: 1 },
- status: 'frz',
- shortDesc: "Inflicts Freeze status on the opponent (1/16 Residual damage, halved SpA).",
- secondary: null,
- target: "normal",
- type: "Ice",
- zMove: { boost: { atk: 1 } },
- contestType: "Beautiful",
- },
- spore: {
- inherit: true,
- pp: 10,
- desc: "Puts the opponent to sleep for 1 turn",
- },
- sleeppowder: {
- inherit: true,
- pp: 15,
- accuracy: 90,
- desc: "Puts the opponent to sleep for 1 turn",
- },
- hypnosis: {
- inherit: true,
- pp: 20,
- accuracy: 85,
- desc: "Puts the opponent to sleep for 1 turn",
- },
- grasswhistle: {
- inherit: true,
- isNonstandard: null,
- pp: 25,
- accuracy: 80,
- desc: "Puts the opponent to sleep for 1 turn",
- },
- sing: {
- inherit: true,
- isNonstandard: null,
- pp: 25,
- accuracy: 80,
- desc: "Puts the opponent to sleep for 1 turn",
- },
- crystalcutter: {
- name: "Crystal Cutter",
- accuracy: 100,
- basePower: 50,
- category: "Physical",
- pp: 15,
- type: "Crystal",
- shortDesc: "Always crits. User recovers 50% of damage dealt",
- priority: 0,
- flags: { protect: 1, mirror: 1, contact: 1, slicing: 1 },
- target: "normal",
- willCrit: true,
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Psycho Cut", target);
- },
- drain: [1, 2],
- },
- crystaltail: {
- name: "Crystal Tail",
- accuracy: 85,
- basePower: 120,
- category: "Physical",
- pp: 5,
- type: "Crystal",
- shortDesc: "20% to lower foe's Atk by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1, contact: 1 },
- target: "normal",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Dragon Tail", target);
- },
- secondary: {
- chance: 20,
- boosts: {
- atk: -1,
- },
- },
- },
- crystalbash: {
- name: "Crystal Bash",
- accuracy: 100,
- basePower: 100,
- category: "Physical",
- pp: 10,
- type: "Crystal",
- shortDesc: "10% to lower foe's Atk by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1, contact: 1 },
- target: "normal",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Iron Head", target);
- },
- secondary: {
- chance: 10,
- boosts: {
- atk: -1,
- },
- },
- },
- crystalbeam: {
- name: "Crystal Beam",
- accuracy: 100,
- basePower: 90,
- category: "Special",
- pp: 15,
- type: "Crystal",
- shortDesc: "30% to lower foe's SpA by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1 },
- target: "normal",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Aurora Beam", target);
- },
- secondary: {
- chance: 30,
- boosts: {
- spa: -1,
- },
- },
- },
- crystalcage: {
- name: "Crystal Cage",
- accuracy: 85,
- basePower: 85,
- category: "Special",
- pp: 10,
- type: "Crystal",
- shortDesc: "Traps and damages for 4-5 turns.",
- priority: 0,
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Diamond Storm", target);
- },
- flags: { protect: 1, mirror: 1 },
- volatileStatus: 'partiallytrapped',
- target: "normal",
- secondary: null,
- },
- crystalburst: {
- accuracy: 100,
- basePower: 120,
- category: "Special",
- name: "Crystal Burst",
- pp: 5,
- shortDesc: "Lower's user's SpA by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1 },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Clanging Scales", target);
- },
- self: {
- boosts: {
- spa: -1,
- },
- },
- secondary: null,
- target: "allAdjacentFoes",
- type: "Crystal",
- contestType: "Beautiful",
- },
- crystalhealing: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Crystal Healing",
- pp: 5,
- priority: 0,
- shortDesc: "Cures whole team's status conditions. 1/16 residual healing at the end of each turn.",
- flags: { snatch: 1, distance: 1, bypasssub: 1 },
- onHit(pokemon, source) {
- this.add('-activate', source, 'move: Crystal Healing');
- const side = pokemon.side;
- let success = false;
- for (const ally of side.pokemon) {
- if (ally.cureStatus()) success = true;
- }
- return success;
- },
- volatileStatus: 'crystalhealing',
- condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'Crystal Healing');
- },
- onResidualOrder: 6,
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
- },
- target: "allyTeam",
- type: "Crystal",
- zMove: { effect: 'heal' },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Heal Bell", target);
- },
- contestType: "Beautiful",
- },
- crystalfortification: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Crystal Fortification",
- pp: 20,
- priority: 0,
- shortDesc: "+1 Def, +1 SpD. Clears negative stat changes.",
- flags: { snatch: 1 },
- onHit(pokemon, source) {
- let b: BoostID;
- let didBoost = false;
- const negBoosts: Partial> = {};
- for (b in source.boosts) {
- if (source.boosts[b] < 0) negBoosts[b] = source.boosts[b] * -1;
- didBoost = true;
- }
- if (didBoost) {
- this.boost(negBoosts, source);
- }
- },
- boosts: {
- def: 1,
- spd: 1,
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Iron Defense", target);
- },
- secondary: null,
- target: "self",
- type: "Crystal",
- zMove: { boost: { spd: 1 } },
- contestType: "Beautiful",
- },
- crystalshard: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Crystal Shard",
- shortDesc: "Sets a layer of Spikes. (Not a new kind of hazard)",
- pp: 20,
- priority: 0,
- flags: { reflectable: 1, nonsky: 1 },
- onHitSide(side, source) {
- source.side.foe.addSideCondition("spikes");
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Spikes", target);
- },
- secondary: null,
- target: "foeSide",
- type: "Crystal",
- zMove: { boost: { spd: 1 } },
- contestType: "Beautiful",
- },
- feralbite: {
- name: "Feral Bite",
- accuracy: 100,
- basePower: 90,
- category: "Physical",
- pp: 15,
- type: "Feral",
- shortDesc: "30% chance to Poison foe.",
- priority: 0,
- flags: { protect: 1, mirror: 1, contact: 1, bite: 1 },
- target: "normal",
- secondary: {
- chance: 30,
- status: "psn",
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Poison Fang", target);
- },
- },
- feralshred: {
- name: "Feral Shred",
- accuracy: 100,
- basePower: 20,
- category: "Physical",
- pp: 15,
- type: "Feral",
- shortDesc: "Hits twice. Lowers foe's Def by 1 on each hit",
- priority: 0,
- multihit: 2,
- flags: { protect: 1, mirror: 1, contact: 1 },
- target: "normal",
- secondary: {
- chance: 100,
- boosts: {
- def: -1,
- },
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Dragon Claw", target);
- },
- },
- feralrush: {
- name: "Feral Rush",
- accuracy: 100,
- basePower: 120,
- category: "Physical",
- pp: 10,
- type: "Feral",
- shortDesc: "User takes 1/3 recoil damage. 20% to lower foe's Def by 1",
- priority: 0,
- recoil: [33, 100],
- flags: { protect: 1, mirror: 1, contact: 1 },
- target: "normal",
- secondary: {
- chance: 20,
- boosts: {
- def: -1,
- },
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Double-Edge", target);
- },
- },
- feralshriek: {
- name: "Feral Shriek",
- accuracy: 100,
- basePower: 90,
- category: "Special",
- pp: 15,
- type: "Feral",
- shortDesc: "20% to lower foe's SpD by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1, sound: 1 },
- target: "allAdjacentFoes",
- secondary: {
- chance: 20,
- boosts: {
- spd: -1,
- },
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Overdrive", target);
- },
- },
- feralpower: {
- accuracy: 100,
- basePower: 110,
- category: "Special",
- name: "Feral Power",
- pp: 5,
- priority: 0,
- shortDesc: "Lowers user's Def by 1",
- flags: { protect: 1, mirror: 1, bypasssub: 1 },
- selfBoost: {
- boosts: {
- def: -1,
- },
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Searing Shot", target);
- },
- secondary: null,
- target: "allAdjacentFoes",
- type: "Feral",
- contestType: "Tough",
- },
- feralbreath: {
- name: "Feral Breath",
- accuracy: 100,
- basePower: 80,
- category: "Special",
- pp: 10,
- type: "Feral",
- shortDesc: "100% to lower foe's SpD by 1",
- priority: 0,
- flags: { protect: 1, mirror: 1 },
- target: "normal",
- secondary: {
- chance: 100,
- boosts: {
- spd: -1,
- },
- },
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Dragon Rage", target);
- },
- },
- feralhealing: {
- num: 816,
- accuracy: true,
- basePower: 0,
- category: "Status",
- priority: 0,
- flags: { heal: 1, bypasssub: 1, allyanim: 1 },
- onHit(pokemon) {
- const success = !!this.heal(this.modify(pokemon.maxhp, 0.25));
- return pokemon.cureStatus() || success;
- },
- secondary: null,
- target: "allies",
- name: "Feral Healing",
- pp: 15,
- shortDesc: "Heals user 25% and cures status.",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Jungle Healing", target);
- },
- type: "Feral",
- zMove: { boost: { def: 1 } },
- contestType: "Cool",
- },
- feralspray: {
- accuracy: 100,
- basePower: 0,
- category: "Status",
- name: "Feral Spray",
- pp: 25,
- priority: 0,
- shortDesc: "+1 Atk, +1 SpA. Poisons the foe.",
- flags: { protect: 1, reflectable: 1, mirror: 1 },
- selfBoost: {
- boosts: {
- atk: 1,
- spa: 1,
- },
- },
- status: 'psn',
- secondary: null,
- target: "normal",
- type: "Feral",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Acid Spray", target);
- },
- zMove: { boost: { def: 1 } },
- contestType: "Clever",
- },
- feralresilience: {
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Feral Resilience",
- pp: 20,
- priority: 0,
- flags: { snatch: 1 },
- shortDesc: "+1 Atk, +1 SpA. Cures user's status conditions.",
- onHit(pokemon) {
- if (['', 'slp'].includes(pokemon.status)) return false;
- pokemon.cureStatus();
- },
- secondary: null,
- target: "self",
- boosts: {
- atk: 1,
- spa: 1,
- },
- type: "Feral",
- zMove: { effect: 'heal' },
- contestType: "Cute",
- onPrepareHit(target, source, move) {
- this.attrLastMove('[still]');
- this.add('-anim', source, "Refresh", target);
- },
- },
- karatechop: {
- inherit: true,
- isNonstandard: null,
- },
- doubleslap: {
- inherit: true,
- isNonstandard: null,
- },
- cometpunch: {
- inherit: true,
- isNonstandard: null,
- },
- razorwind: {
- inherit: true,
- isNonstandard: null,
- },
- jumpkick: {
- inherit: true,
- isNonstandard: null,
- },
- rollingkick: {
- inherit: true,
- isNonstandard: null,
- },
- twineedle: {
- inherit: true,
- isNonstandard: null,
- },
- sonicboom: {
- inherit: true,
- isNonstandard: null,
- },
- submission: {
- inherit: true,
- isNonstandard: null,
- },
- dragonrage: {
- inherit: true,
- isNonstandard: null,
- },
- meditate: {
- inherit: true,
- isNonstandard: null,
- },
- rage: {
- inherit: true,
- isNonstandard: null,
- },
- barrier: {
- inherit: true,
- isNonstandard: null,
- },
- bide: {
- inherit: true,
- isNonstandard: null,
- },
- mirrormove: {
- inherit: true,
- isNonstandard: null,
- },
- eggbomb: {
- inherit: true,
- isNonstandard: null,
- },
- boneclub: {
- inherit: true,
- isNonstandard: null,
- },
- clamp: {
- inherit: true,
- isNonstandard: null,
- },
- skullbash: {
- inherit: true,
- isNonstandard: null,
- },
- spikecannon: {
- inherit: true,
- isNonstandard: null,
- },
- constrict: {
- inherit: true,
- isNonstandard: null,
- },
- kinesis: {
- inherit: true,
- isNonstandard: null,
- },
- barrage: {
- inherit: true,
- isNonstandard: null,
- },
- lovelykiss: {
- inherit: true,
- isNonstandard: null,
- },
- bubble: {
- inherit: true,
- isNonstandard: null,
- },
- dizzypunch: {
- inherit: true,
- isNonstandard: null,
- },
- flash: {
- inherit: true,
- isNonstandard: null,
- },
- psywave: {
- inherit: true,
- isNonstandard: null,
- },
- bonemerang: {
- inherit: true,
- isNonstandard: null,
- },
- hyperfang: {
- inherit: true,
- isNonstandard: null,
- },
- sharpen: {
- inherit: true,
- isNonstandard: null,
- },
- conversion: {
- inherit: true,
- isNonstandard: null,
- },
- sketch: {
- inherit: true,
- isNonstandard: null,
- },
- triplekick: {
- inherit: true,
- isNonstandard: null,
- },
- spiderweb: {
- inherit: true,
- isNonstandard: null,
- },
- mindreader: {
- inherit: true,
- isNonstandard: null,
- },
- nightmare: {
- inherit: true,
- isNonstandard: null,
- },
- conversion2: {
- inherit: true,
- isNonstandard: null,
- },
- aeroblast: {
- inherit: true,
- isNonstandard: null,
- },
- feintattack: {
- inherit: true,
- isNonstandard: null,
- },
- octazooka: {
- inherit: true,
- isNonstandard: null,
- },
- foresight: {
- inherit: true,
- isNonstandard: null,
- },
- return: {
- inherit: true,
- isNonstandard: null,
- },
- frustration: {
- inherit: true,
- isNonstandard: null,
- },
- sacredfire: {
- inherit: true,
- isNonstandard: null,
- },
- magnitude: {
- inherit: true,
- isNonstandard: null,
- },
- pursuit: {
- inherit: true,
- isNonstandard: null,
- },
- vitalthrow: {
- inherit: true,
- isNonstandard: null,
- },
- hiddenpower: {
- inherit: true,
- isNonstandard: null,
- },
- hail: {
- inherit: true,
- isNonstandard: null,
- },
- smellingsalts: {
- inherit: true,
- isNonstandard: null,
- },
- naturepower: {
- inherit: true,
- isNonstandard: null,
- },
- assist: {
- inherit: true,
- isNonstandard: null,
- },
- magiccoat: {
- inherit: true,
- isNonstandard: null,
- },
- revenge: {
- inherit: true,
- isNonstandard: null,
- },
- refresh: {
- inherit: true,
- isNonstandard: null,
- },
- grudge: {
- inherit: true,
- isNonstandard: null,
- },
- snatch: {
- inherit: true,
- isNonstandard: null,
- },
- secretpower: {
- inherit: true,
- isNonstandard: null,
- },
- camouflage: {
- inherit: true,
- isNonstandard: null,
- },
- tailglow: {
- inherit: true,
- isNonstandard: null,
- },
- lusterpurge: {
- inherit: true,
- isNonstandard: null,
- },
- mistball: {
- inherit: true,
- isNonstandard: null,
- },
- mudsport: {
- inherit: true,
- isNonstandard: null,
- },
- iceball: {
- inherit: true,
- isNonstandard: null,
- },
- needlearm: {
- inherit: true,
- isNonstandard: null,
- },
- aromatherapy: {
- inherit: true,
- isNonstandard: null,
- },
- odorsleuth: {
- inherit: true,
- isNonstandard: null,
- },
- silverwind: {
- inherit: true,
- isNonstandard: null,
- },
- signalbeam: {
- inherit: true,
- isNonstandard: null,
- },
- skyuppercut: {
- inherit: true,
- isNonstandard: null,
- },
- watersport: {
- inherit: true,
- isNonstandard: null,
- },
- doomdesire: {
- inherit: true,
- isNonstandard: null,
- },
- psychoboost: {
- inherit: true,
- isNonstandard: null,
- },
- miracleeye: {
- inherit: true,
- isNonstandard: null,
- },
- wakeupslap: {
- inherit: true,
- isNonstandard: null,
- },
- naturalgift: {
- inherit: true,
- isNonstandard: null,
- },
- embargo: {
- inherit: true,
- isNonstandard: null,
- },
- psychoshift: {
- inherit: true,
- isNonstandard: null,
- },
- trumpcard: {
- inherit: true,
- isNonstandard: null,
- },
- healblock: {
- inherit: true,
- isNonstandard: null,
- },
- wringout: {
- inherit: true,
- isNonstandard: null,
- },
- luckychant: {
- inherit: true,
- isNonstandard: null,
- },
- mefirst: {
- inherit: true,
- isNonstandard: null,
- },
- punishment: {
- inherit: true,
- isNonstandard: null,
- },
- mudbomb: {
- inherit: true,
- isNonstandard: null,
- },
- mirrorshot: {
- inherit: true,
- isNonstandard: null,
- },
- rockclimb: {
- inherit: true,
- isNonstandard: null,
- },
- rockwrecker: {
- inherit: true,
- isNonstandard: null,
- },
- magnetbomb: {
- inherit: true,
- isNonstandard: null,
- },
- captivate: {
- inherit: true,
- isNonstandard: null,
- },
- chatter: {
- inherit: true,
- isNonstandard: null,
- },
- healorder: {
- inherit: true,
- isNonstandard: null,
- },
- crushgrip: {
- inherit: true,
- isNonstandard: null,
- },
- darkvoid: {
- inherit: true,
- isNonstandard: null,
- },
- seedflare: {
- inherit: true,
- isNonstandard: null,
- },
- ominouswind: {
- inherit: true,
- isNonstandard: null,
- },
- autotomize: {
- inherit: true,
- isNonstandard: null,
- },
- telekinesis: {
- inherit: true,
- isNonstandard: null,
- },
- stormthrow: {
- inherit: true,
- isNonstandard: null,
- },
- flameburst: {
- inherit: true,
- isNonstandard: null,
- },
- synchronoise: {
- inherit: true,
- isNonstandard: null,
- },
- chipaway: {
- inherit: true,
- isNonstandard: null,
- },
- skydrop: {
- inherit: true,
- isNonstandard: null,
- },
- bestow: {
- inherit: true,
- isNonstandard: null,
- },
- dualchop: {
- inherit: true,
- isNonstandard: null,
- },
- heartstamp: {
- inherit: true,
- isNonstandard: null,
- },
- leaftornado: {
- inherit: true,
- isNonstandard: null,
- },
- steamroller: {
- inherit: true,
- isNonstandard: null,
- },
- headcharge: {
- inherit: true,
- isNonstandard: null,
- },
- geargrind: {
- inherit: true,
- isNonstandard: null,
- },
- searingshot: {
- inherit: true,
- isNonstandard: null,
- },
- technoblast: {
- inherit: true,
- isNonstandard: null,
- },
- secretsword: {
- inherit: true,
- isNonstandard: null,
- },
- glaciate: {
- inherit: true,
- isNonstandard: null,
- },
- boltstrike: {
- inherit: true,
- isNonstandard: null,
- },
- blueflare: {
- inherit: true,
- isNonstandard: null,
- },
- freezeshock: {
- inherit: true,
- isNonstandard: null,
- },
- iceburn: {
- inherit: true,
- isNonstandard: null,
- },
- fusionflare: {
- inherit: true,
- isNonstandard: null,
- },
- fusionbolt: {
- inherit: true,
- isNonstandard: null,
- },
- matblock: {
- inherit: true,
- isNonstandard: null,
- },
- rototiller: {
- inherit: true,
- isNonstandard: null,
- },
- trickortreat: {
- inherit: true,
- isNonstandard: null,
- },
- iondeluge: {
- inherit: true,
- isNonstandard: null,
- },
- forestscurse: {
- inherit: true,
- isNonstandard: null,
- },
- topsyturvy: {
- inherit: true,
- isNonstandard: null,
- },
- craftyshield: {
- inherit: true,
- isNonstandard: null,
- },
- flowershield: {
- inherit: true,
- isNonstandard: null,
- },
- electrify: {
- inherit: true,
- isNonstandard: null,
- },
- kingsshield: {
- inherit: true,
- isNonstandard: null,
- },
- venomdrench: {
- inherit: true,
- isNonstandard: null,
- },
- powder: {
- inherit: true,
- isNonstandard: null,
- },
- geomancy: {
- inherit: true,
- isNonstandard: null,
- },
- poweruppunch: {
- inherit: true,
- isNonstandard: null,
- },
- oblivionwing: {
- inherit: true,
- isNonstandard: null,
- },
- thousandarrows: {
- inherit: true,
- isNonstandard: null,
- },
- thousandwaves: {
- inherit: true,
- isNonstandard: null,
- },
- landswrath: {
- inherit: true,
- isNonstandard: null,
- },
- lightofruin: {
- inherit: true,
- isNonstandard: null,
- },
- sparklingaria: {
- inherit: true,
- isNonstandard: null,
- },
- floralhealing: {
- inherit: true,
- isNonstandard: null,
- },
- spotlight: {
- inherit: true,
- isNonstandard: null,
- },
- toxicthread: {
- inherit: true,
- isNonstandard: null,
- },
- laserfocus: {
- inherit: true,
- isNonstandard: null,
- },
- gearup: {
- inherit: true,
- isNonstandard: null,
- },
- anchorshot: {
- inherit: true,
- isNonstandard: null,
- },
- purify: {
- inherit: true,
- isNonstandard: null,
- },
- coreenforcer: {
- inherit: true,
- isNonstandard: null,
- },
- beakblast: {
- inherit: true,
- isNonstandard: null,
- },
- clangingscales: {
- inherit: true,
- isNonstandard: null,
- },
- dragonhammer: {
- inherit: true,
- isNonstandard: null,
- },
- shelltrap: {
- inherit: true,
- isNonstandard: null,
- },
- shadowbone: {
- inherit: true,
- isNonstandard: null,
- },
- prismaticlaser: {
- inherit: true,
- isNonstandard: null,
- },
- spectralthief: {
- inherit: true,
- isNonstandard: null,
- },
- sunsteelstrike: {
- inherit: true,
- isNonstandard: null,
- },
- moongeistbeam: {
- inherit: true,
- isNonstandard: null,
- },
- naturesmadness: {
- inherit: true,
- isNonstandard: null,
- },
- multiattack: {
- inherit: true,
- isNonstandard: null,
- },
- mindblown: {
- inherit: true,
- isNonstandard: null,
- },
- plasmafists: {
- inherit: true,
- isNonstandard: null,
- },
- photongeyser: {
- inherit: true,
- isNonstandard: null,
- },
- doubleironbash: {
- inherit: true,
- isNonstandard: null,
- },
- maxguard: {
- inherit: true,
- isNonstandard: null,
- },
- octolock: {
- inherit: true,
- isNonstandard: null,
- },
- boltbeak: {
- inherit: true,
- isNonstandard: null,
- },
- fishiousrend: {
- inherit: true,
- isNonstandard: null,
- },
- clangoroussoul: {
- inherit: true,
- isNonstandard: null,
- },
- decorate: {
- inherit: true,
- isNonstandard: null,
- },
- snaptrap: {
- inherit: true,
- isNonstandard: null,
- },
- aurawheel: {
- inherit: true,
- isNonstandard: null,
- },
- strangesteam: {
- inherit: true,
- isNonstandard: null,
- },
- obstruct: {
- inherit: true,
- isNonstandard: null,
- },
- meteorassault: {
- inherit: true,
- isNonstandard: null,
- },
- eternabeam: {
- inherit: true,
- isNonstandard: null,
- },
-};
diff --git a/data/mods/scootopiav2/pokedex.ts b/data/mods/scootopiav2/pokedex.ts
deleted file mode 100644
index 52f1bcbacd..0000000000
--- a/data/mods/scootopiav2/pokedex.ts
+++ /dev/null
@@ -1,551 +0,0 @@
-export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
- arbrella: {
- num: 2001,
- name: "Arbrella",
- types: ["Grass", "Ground"],
- baseStats: { hp: 80, atk: 115, def: 100, spa: 80, spd: 80, spe: 75 },
- abilities: { 0: "Overgrow", H: "Tough Claws" },
- weightkg: 211,
- eggGroups: ["Undiscovered"],
- },
- krachiten: {
- num: 2002,
- name: "Krachiten",
- types: ["Water", "Bug"],
- baseStats: { hp: 90, atk: 120, def: 70, spa: 78, spd: 60, spe: 112 },
- abilities: { 0: "Torrent", H: "Sniper" },
- weightkg: 59,
- eggGroups: ["Undiscovered"],
- },
- scalaron: {
- num: 2003,
- name: "Scalaron",
- types: ["Fire", "Flying"],
- baseStats: { hp: 90, atk: 70, def: 90, spa: 100, spd: 105, spe: 75 },
- abilities: { 0: "Blaze", H: "Filter" },
- weightkg: 70,
- eggGroups: ["Undiscovered"],
- },
- rantler: {
- num: 2004,
- name: "Rantler",
- types: ["Normal", "Ice"],
- baseStats: { hp: 68, atk: 118, def: 94, spa: 43, spd: 79, spe: 73 },
- abilities: { 0: "Intimidate", 1: "Slush Rush", H: "Tough Claws" },
- weightkg: 67,
- eggGroups: ["Undiscovered"],
- },
- woolora: {
- num: 2005,
- name: "Woolora",
- types: ["Fairy"],
- baseStats: { hp: 70, atk: 75, def: 70, spa: 95, spd: 115, spe: 70 },
- abilities: { 0: "Fluffy", 1: "Rattled", H: "Pastel Veil" },
- weightkg: 50.3,
- eggGroups: ["Undiscovered"],
- },
- albatrygon: {
- num: 2006,
- name: "Albatrygon",
- types: ["Flying"],
- baseStats: { hp: 80, atk: 105, def: 70, spa: 65, spd: 60, spe: 95 },
- abilities: { 0: "Prankster", 1: "Klutz", H: "Unburden" },
- weightkg: 10.1,
- eggGroups: ["Undiscovered"],
- },
- orchile: {
- num: 2007,
- name: "Orchile",
- types: ["Grass", "Fairy"],
- baseStats: { hp: 65, atk: 60, def: 75, spa: 110, spd: 121, spe: 64 },
- abilities: { 0: "Sweet Veil", 1: "Aroma Veil", H: "Flower Veil" },
- weightkg: 45,
- eggGroups: ["Undiscovered"],
- },
- embuck: {
- num: 2008,
- name: "Embuck",
- types: ["Fire", "Fighting"],
- baseStats: { hp: 90, atk: 125, def: 80, spa: 83, spd: 65, spe: 82 },
- abilities: { 0: "Intimidate", H: "Flash Fire" },
- weightkg: 113,
- eggGroups: ["Undiscovered"],
- },
- cindoe: {
- num: 2009,
- name: "Cindoe",
- types: ["Fire", "Dark"],
- baseStats: { hp: 80, atk: 74, def: 55, spa: 110, spd: 100, spe: 106 },
- abilities: { 0: "Natural Cure", H: "Flash Fire" },
- weightkg: 67,
- eggGroups: ["Undiscovered"],
- },
- cobracotta: {
- num: 2010,
- name: "Cobracotta",
- types: ["Grass", "Poison"],
- baseStats: { hp: 80, atk: 90, def: 95, spa: 80, spd: 115, spe: 35 },
- abilities: { 0: "Mold Breaker", 1: "Weak Armor", H: "Heatproof" },
- weightkg: 68,
- eggGroups: ["Undiscovered"],
- },
- minillow: {
- num: 2011,
- name: "Minillow",
- types: ["Water", "Fairy"],
- baseStats: { hp: 70, atk: 64, def: 75, spa: 90, spd: 95, spe: 81 },
- abilities: { 0: "Swift Swim", 1: "Dazzling", H: "Adaptability" },
- weightkg: 22,
- eggGroups: ["Undiscovered"],
- },
- crossont: {
- num: 2012,
- name: "Crossont",
- types: ["Bug", "Fighting"],
- baseStats: { hp: 80, atk: 125, def: 100, spa: 60, spd: 80, spe: 80 },
- abilities: { 0: "Sniper", 1: "Long Reach", H: "Gooey" },
- weightkg: 121,
- eggGroups: ["Undiscovered"],
- },
- torgeist: {
- num: 2013,
- name: "Torgeist",
- types: ["Ghost", "Flying"],
- baseStats: { hp: 55, atk: 65, def: 95, spa: 115, spd: 100, spe: 105 },
- abilities: { 0: "Cursed Body", 1: "Clear Body", H: "Merciless" },
- weightkg: 9.7,
- eggGroups: ["Undiscovered"],
- },
- platypad: {
- num: 2014,
- name: "Platypad",
- types: ["Grass", "Water"],
- baseStats: { hp: 120, atk: 100, def: 80, spa: 100, spd: 80, spe: 40 },
- abilities: { 0: "Thick Fat", 1: "Triage", H: "Flower Veil" },
- weightkg: 89,
- eggGroups: ["Undiscovered"],
- },
- lumoth: {
- num: 2015,
- name: "Lumoth",
- types: ["Bug", "Ghost"],
- baseStats: { hp: 60, atk: 55, def: 91, spa: 110, spd: 85, spe: 94 },
- abilities: { 0: "Levitate" },
- weightkg: 0.5,
- eggGroups: ["Undiscovered"],
- },
- aurorowl: {
- num: 2016,
- name: "Aurorowl",
- types: ["Ice", "Flying"],
- baseStats: { hp: 70, atk: 70, def: 65, spa: 95, spd: 95, spe: 115 },
- abilities: { 0: "Snow Cloak", H: "Technician" },
- weightkg: 15,
- eggGroups: ["Undiscovered"],
- },
- carapex: {
- num: 2017,
- name: "Carapex",
- types: ["Bug", "Flying"],
- baseStats: { hp: 75, atk: 105, def: 155, spa: 55, spd: 90, spe: 60 },
- abilities: { 0: "Wind Rider", 1: "Mold Breaker", H: "Sturdy" },
- weightkg: 135,
- eggGroups: ["Undiscovered"],
- },
- dojodo: {
- num: 2018,
- name: "Dojodo",
- types: ["Fighting"],
- baseStats: { hp: 90, atk: 115, def: 80, spa: 65, spd: 100, spe: 80 },
- abilities: { 0: "Iron Fist", 1: "Stamina", H: "Supreme Overlord" },
- weightkg: 53,
- eggGroups: ["Undiscovered"],
- },
- nunopod: {
- num: 2019,
- name: "Nunopod",
- types: ["Ground", "Bug"],
- baseStats: { hp: 80, atk: 110, def: 125, spa: 68, spd: 75, spe: 67 },
- abilities: { 0: "Earth Eater", H: "Opportunist" },
- weightkg: 68,
- eggGroups: ["Undiscovered"],
- },
- zeploom: {
- num: 2020,
- name: "Zeploom",
- types: ["Grass", "Ground"],
- baseStats: { hp: 55, atk: 55, def: 145, spa: 65, spd: 150, spe: 45 },
- abilities: { 0: "Wind Rider", H: "Levitate" },
- weightkg: 5,
- eggGroups: ["Undiscovered"],
- },
- brawnkey: {
- num: 2021,
- name: "Brawnkey",
- types: ["Steel", "Fighting"],
- baseStats: { hp: 95, atk: 105, def: 105, spa: 85, spd: 80, spe: 50 },
- abilities: { 0: "Levitate" },
- weightkg: 85,
- eggGroups: ["Undiscovered"],
- },
- salamalix: {
- num: 2022,
- name: "Salamalix",
- types: ["Rock", "Steel"],
- baseStats: { hp: 70, atk: 120, def: 120, spa: 45, spd: 65, spe: 90 },
- abilities: { 0: "No Guard", 1: "Mold Breaker", H: "Intimidate" },
- weightkg: 85,
- eggGroups: ["Undiscovered"],
- },
- cinnastar: {
- num: 2023,
- name: "Cinnastar",
- types: ["Rock", "Poison"],
- baseStats: { hp: 110, atk: 95, def: 80, spa: 95, spd: 80, spe: 80 },
- abilities: { 0: "Liquid Ooze", H: "Regenerator" },
- weightkg: 56,
- eggGroups: ["Undiscovered"],
- },
- muabboa: {
- num: 2024,
- name: "MuabBoa",
- types: ["Ground", "Fighting"],
- baseStats: { hp: 65, atk: 100, def: 75, spa: 55, spd: 65, spe: 120 },
- abilities: { 0: "Anticipation", 1: "Sand Rush", H: "Inner Focus" },
- weightkg: 25,
- eggGroups: ["Undiscovered"],
- },
- volvolpa: {
- num: 2025,
- name: "Volvolpa",
- types: ["Electric", "Ice"],
- baseStats: { hp: 76, atk: 97, def: 64, spa: 70, spd: 102, spe: 121 },
- abilities: { 0: "Slush Rush", 1: "Volt Absorb", H: "Strong Jaw" },
- weightkg: 27,
- eggGroups: ["Undiscovered"],
- },
- harzodia: {
- num: 2026,
- name: "Harzodia",
- types: ["Psychic"],
- baseStats: { hp: 65, atk: 55, def: 75, spa: 125, spd: 75, spe: 95 },
- abilities: { 0: "Prankster", 1: "Unburden", H: "Solar Power" },
- weightkg: 35,
- eggGroups: ["Undiscovered"],
- },
- cyllindrake: {
- num: 2027,
- name: "Cyllindrake",
- types: ["Steel", "Dragon"],
- baseStats: { hp: 70, atk: 85, def: 115, spa: 95, spd: 70, spe: 110 },
- abilities: { 0: "Heavy Metal", 1: "Punk Rock", H: "Scrappy" },
- weightkg: 180,
- eggGroups: ["Undiscovered"],
- },
- kodokai: {
- num: 2028,
- name: "Kodokai",
- types: ["Ghost", "Fire"],
- baseStats: { hp: 110, atk: 65, def: 100, spa: 110, spd: 90, spe: 30 },
- abilities: { 0: "White Smoke", H: "Aroma Veil" },
- weightkg: 50,
- eggGroups: ["Undiscovered"],
- },
- electangle: {
- num: 2029,
- name: "Electangle",
- types: ["Steel", "Electric"],
- baseStats: { hp: 120, atk: 90, def: 110, spa: 90, spd: 90, spe: 25 },
- abilities: { 0: "Filter" },
- weightkg: 190,
- eggGroups: ["Undiscovered"],
- },
- dolphena: {
- num: 2030,
- name: "Dolphena",
- types: ["Water", "Dragon"],
- baseStats: { hp: 95, atk: 125, def: 80, spa: 84, spd: 75, spe: 81 },
- abilities: { 0: "Anger Point", H: "Mythical Presence" },
- weightkg: 271,
- eggGroups: ["Undiscovered"],
- },
- elemadillo: {
- num: 2035,
- name: "Elemadillo",
- types: ["Steel", "Electric"],
- baseStats: { hp: 67, atk: 94, def: 73, spa: 103, spd: 64, spe: 129 },
- abilities: { 0: "Weak Armor", 1: "Motor Drive", H: "Stalwart" },
- weightkg: 58,
- eggGroups: ["Undiscovered"],
- },
- axolacred: {
- num: 2036,
- name: "Axolacred",
- types: ["Dragon"],
- baseStats: { hp: 85, atk: 90, def: 85, spa: 95, spd: 95, spe: 65 },
- abilities: { 0: "Magic Guard", H: "Purifying Salt" },
- weightkg: 33,
- eggGroups: ["Undiscovered"],
- },
- roscenti: {
- num: 2037,
- name: "Roscenti",
- types: ["Bug", "Grass"],
- baseStats: { hp: 80, atk: 115, def: 100, spa: 75, spd: 80, spe: 100 },
- abilities: { 0: "Sheer Force", 1: "Chlorophyll", H: "Skill Link" },
- eggGroups: ["Undiscovered"],
- weightkg: 37,
- },
- blunderbusk: {
- num: 2038,
- name: "Blunderbusk",
- types: ["Water"],
- baseStats: { hp: 73, atk: 67, def: 124, spa: 128, spd: 89, spe: 24 },
- abilities: { 0: "Mega Launcher", H: "Shell Bunker" },
- weightkg: 86,
- eggGroups: ["Undiscovered"],
- },
- barracoth: {
- num: 2039,
- name: "Barracoth",
- types: ["Ice", "Water"],
- baseStats: { hp: 140, atk: 115, def: 110, spa: 55, spd: 65, spe: 35 },
- abilities: { 0: "Filter", 1: "Thick Fat", H: "Multiscale" },
- weightkg: 356,
- eggGroups: ["Undiscovered"],
- },
- jamborai: {
- num: 2040,
- name: "Jamborai",
- types: ["Poison", "Psychic"],
- baseStats: { hp: 75, atk: 55, def: 125, spa: 120, spd: 85, spe: 65 },
- abilities: { 0: "Clear Body", 1: "Gooey", H: "Water Absorb" },
- weightkg: 84,
- eggGroups: ["Undiscovered"],
- },
- dracoil: {
- num: 2041,
- name: "Dracoil",
- types: ["Dragon", "Flying"],
- baseStats: { hp: 105, atk: 106, def: 85, spa: 96, spd: 60, spe: 78 },
- abilities: { 0: "Mythical Presence", 1: "Gluttony", H: "Marvel Scale" },
- weightkg: 428,
- eggGroups: ["Undiscovered"],
- },
- celespirit: {
- num: 2042,
- name: "Celespirit",
- types: ["Ghost"],
- baseStats: { hp: 75, atk: 61, def: 73, spa: 117, spd: 135, spe: 69 },
- abilities: { 0: "Levitate", H: "Power Spot" },
- weightkg: 25.8,
- eggGroups: ["Undiscovered"],
- },
- noxtrice: {
- num: 2043,
- name: "Noxtrice",
- types: ["Poison", "Fire"],
- baseStats: { hp: 65, atk: 118, def: 75, spa: 63, spd: 80, spe: 114 },
- abilities: { 0: "Poison Touch", H: "Flash Fire" },
- weightkg: 73.7,
- eggGroups: ["Undiscovered"],
- },
- sturgard: {
- num: 2055,
- name: "Sturgard",
- types: ["Water", "Ground"],
- baseStats: { hp: 105, atk: 110, def: 105, spa: 65, spd: 70, spe: 70 },
- abilities: { 0: "Rock Head", 1: "Battle Armor", H: "Mold Breaker" },
- weightkg: 143,
- eggGroups: ["Undiscovered"],
- },
- avastar: {
- num: 2034,
- name: "Avastar",
- types: ["Psychic", "Steel"],
- baseStats: { hp: 75, atk: 85, def: 110, spa: 115, spd: 100, spe: 60 },
- abilities: { 0: "Stalwart", 1: "Heavy Metal", H: "Shell Bunker" },
- weightkg: 999.9,
- eggGroups: ["Undiscovered"],
- },
- faerenheit: {
- num: 2044,
- name: "Faerenheit",
- types: ["Fire", "Fairy"],
- baseStats: { hp: 71, atk: 83, def: 127, spa: 97, spd: 109, spe: 83 },
- abilities: { 0: "Beast Boost" },
- weightkg: 2.1,
- eggGroups: ["Undiscovered"],
- },
- cellsius: {
- num: 2045,
- name: "Cellsius",
- types: ["Water", "Fairy"],
- baseStats: { hp: 71, atk: 83, def: 83, spa: 109, spd: 127, spe: 97 },
- abilities: { 0: "Beast Boost" },
- weightkg: 2.4,
- eggGroups: ["Undiscovered"],
- },
- kelven: {
- num: 2046,
- name: "Kelven",
- types: ["Ice", "Fairy"],
- baseStats: { hp: 71, atk: 127, def: 109, spa: 83, spd: 83, spe: 97 },
- abilities: { 0: "Beast Boost" },
- weightkg: 2.8,
- eggGroups: ["Undiscovered"],
- },
- salaos: {
- num: 2047,
- name: "Salaos",
- types: ["Dark"],
- baseStats: { hp: 75, atk: 85, def: 90, spa: 110, spd: 130, spe: 90 },
- abilities: { 0: "Good as Gold" },
- weightkg: 74,
- eggGroups: ["Undiscovered"],
- },
- morndos: {
- num: 2048,
- name: "Morndos",
- types: ["Dark", "Flying"],
- baseStats: { hp: 110, atk: 90, def: 75, spa: 90, spd: 85, spe: 130 },
- abilities: { 0: "Synchronize" },
- weightkg: 56,
- eggGroups: ["Undiscovered"],
- },
- pythos: {
- num: 2049,
- name: "Pythos",
- types: ["Dark"],
- baseStats: { hp: 90, atk: 110, def: 130, spa: 85, spd: 90, spe: 75 },
- abilities: { 0: "Guts" },
- weightkg: 178,
- eggGroups: ["Undiscovered"],
- },
- corundell: {
- num: 2050,
- name: "Corundell",
- types: ["Rock", "Electric"],
- baseStats: { hp: 75, atk: 100, def: 130, spa: 105, spd: 80, spe: 110 },
- abilities: { 0: "Lightning Rod", H: "Protosynthesis" },
- weightkg: 137,
- eggGroups: ["Undiscovered"],
- },
- quadringo: {
- num: 2051,
- name: "Quadringo",
- types: ["Fairy", "Dragon"],
- baseStats: { hp: 80, atk: 120, def: 95, spa: 100, spd: 120, spe: 85 },
- abilities: { 0: "Hydration", 1: "Pastel Veil", H: "Inner Focus" },
- weightkg: 156,
- eggGroups: ["Undiscovered"],
- },
- saphor: {
- num: 2052,
- name: "Saphor",
- types: ["Ground", "Normal"],
- baseStats: { hp: 95, atk: 100, def: 105, spa: 100, spd: 105, spe: 95 },
- abilities: { 0: "Thick Fat", 1: "Crystal Heart" },
- weightkg: 638,
- eggGroups: ["Undiscovered"],
- },
- fenreil: {
- num: 2053,
- name: "Fenreil",
- types: ["Dark", "Normal"],
- baseStats: { hp: 80, atk: 105, def: 97, spa: 105, spd: 97, spe: 116 },
- abilities: { 0: "Natural Cure", 1: "Wild Heart" },
- weightkg: 232,
- eggGroups: ["Undiscovered"],
- },
- soleron: {
- num: 2031,
- name: "Soleron",
- types: ["Electric", "Flying"],
- baseStats: { hp: 70, atk: 75, def: 65, spa: 115, spd: 75, spe: 115 },
- abilities: { 0: "Battle Bond" },
- otherFormes: ["Soleron-Awakened"],
- formeOrder: ["Soleron", "Soleron-Awakened"],
- weightkg: 12,
- eggGroups: ["Undiscovered"],
- },
- soleronawakened: {
- num: 2031,
- name: "Soleron-Awakened",
- baseSpecies: "Soleron",
- forme: "Awakened",
- types: ["Electric", "Flying"],
- baseStats: { hp: 70, atk: 105, def: 85, spa: 135, spd: 95, spe: 125 },
- abilities: { 0: "Battle Bond" },
- requiredAbility: "Battle Bond",
- battleOnly: "Soleron",
- weightkg: 24,
- eggGroups: ["Undiscovered"],
- },
- efflor: {
- num: 2032,
- name: "Efflor",
- types: ["Rock", "Grass"],
- baseStats: { hp: 80, atk: 85, def: 110, spa: 105, spd: 110, spe: 25 },
- abilities: { 0: "Solid Rock", 1: "Unaware", H: "Seed Sower" },
- weightkg: 113,
- eggGroups: ["Undiscovered"],
- },
- pictagon: {
- num: 2055,
- name: "Pictagon",
- types: ["Dragon", "Ghost"],
- baseStats: { hp: 105, atk: 105, def: 60, spa: 80, spd: 85, spe: 95 },
- abilities: { 0: "Clear Body", 1: "Infiltrator", H: "No Guard" },
- weightkg: 113,
- eggGroups: ["Undiscovered"],
- },
- jaegorm: {
- num: 2033,
- name: "Jaegorm",
- types: ["Bug", "Psychic"],
- baseStats: { hp: 60, atk: 65, def: 40, spa: 130, spd: 40, spe: 130 },
- abilities: { 0: "Schooling" },
- otherFormes: ["Jaegorm-Collective"],
- formeOrder: ["Jaegorm", "Jaegorm-Collective"],
- weightkg: 10,
- eggGroups: ["Undiscovered"],
- },
- jaegormcollective: {
- num: 2033,
- name: "Jaegorm-Collective",
- baseSpecies: "Jaegorm",
- forme: "Collective",
- types: ["Bug", "Psychic"],
- baseStats: { hp: 60, atk: 145, def: 130, spa: 100, spd: 130, spe: 80 },
- abilities: { 0: "Schooling" },
- requiredAbility: "Schooling",
- battleOnly: "Jaegorm",
- weightkg: 122,
- eggGroups: ["Undiscovered"],
- },
- flocura: {
- num: 2054,
- name: "Flocura",
- types: ["Grass", "Psychic"],
- baseStats: { hp: 55, atk: 85, def: 55, spa: 107, spd: 180, spe: 118 },
- abilities: { 0: "Levitate", H: "Power Construct" },
- otherFormes: ["Flocura-Nexus"],
- formeOrder: ["Flocura", "Flocura-Nexus"],
- weightkg: 7.1,
- eggGroups: ["Undiscovered"],
- },
- flocuranexus: {
- num: 2054,
- name: "Flocura-Nexus",
- baseSpecies: "Flocura",
- forme: "Nexus",
- types: ["Grass", "Psychic"],
- baseStats: { hp: 105, atk: 125, def: 105, spa: 137, spd: 180, spe: 48 },
- abilities: { 0: "Levitate", H: "Power Construct" },
- requiredAbility: "Power Construct",
- battleOnly: "Flocura",
- weightkg: 999,
- eggGroups: ["Undiscovered"],
- },
-};
diff --git a/data/mods/scootopiav2/rulesets.ts b/data/mods/scootopiav2/rulesets.ts
deleted file mode 100644
index 35ce7bd003..0000000000
--- a/data/mods/scootopiav2/rulesets.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
- supertypemovesrule: {
- effectType: 'Rule',
- name: 'Super Type Moves Rule',
- desc: 'Prevents pokemon from using Crystal or Feral moves unless they have a matching type.',
- onBeforeMove(pokemon, target, move) {
- move = {
- ...this.dex.moves.get(move),
- hit: move.hit,
- };
- if (move.type === "Crystal" && !pokemon.hasType("Crystal")) return false;
- if (move.type === "Feral" && !pokemon.hasType("Feral")) return false;
- },
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- const move = this.dex.moves.get(moveSlot.id);
- if ((move.type === "Crystal" && !pokemon.hasType("Crystal")) || (move.type === "Feral" && !pokemon.hasType("Feral"))) {
- pokemon.disableMove(moveSlot.id, false);
- }
- }
- },
- },
- spriteviewer: {
- effectType: 'ValidatorRule',
- name: 'Sprite Viewer',
- desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
- onBegin() {
- this.add('rule', 'Sprite Viewer: Displays sprites in chat');
- },
- onSwitchIn(pokemon) {
- if (!this.effectState[pokemon.species.id]) {
- this.add('-message', `${pokemon.species.name}'s Sprite:`);
- this.add(`raw|
`);
- this.effectState[pokemon.species.id] = true;
- }
- },
- },
-};
diff --git a/data/mods/scootopiav2/typechart.ts b/data/mods/scootopiav2/typechart.ts
deleted file mode 100644
index 3b253d0eff..0000000000
--- a/data/mods/scootopiav2/typechart.ts
+++ /dev/null
@@ -1,530 +0,0 @@
-export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
- bug: {
- damageTaken: {
- Bug: 0,
- Dark: 0,
- Dragon: 0,
- Electric: 0,
- Fairy: 0,
- Fighting: 2,
- Fire: 1,
- Flying: 1,
- Ghost: 0,
- Grass: 2,
- Ground: 2,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 1,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 0,
- },
- HPivs: { atk: 30, def: 30, spd: 30 },
- HPdvs: { atk: 13, def: 13 },
- },
- dark: {
- damageTaken: {
- prankster: 3,
- Bug: 1,
- Dark: 2,
- Dragon: 0,
- Electric: 0,
- Fairy: 1,
- Fighting: 1,
- Fire: 0,
- Flying: 0,
- Ghost: 2,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 3,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 1,
- Feral: 0,
- },
- HPivs: {},
- },
- dragon: {
- damageTaken: {
- Bug: 0,
- Dark: 0,
- Dragon: 1,
- Electric: 2,
- Fairy: 1,
- Fighting: 0,
- Fire: 2,
- Flying: 0,
- Ghost: 0,
- Grass: 2,
- Ground: 0,
- Ice: 1,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 0,
- Steel: 0,
- Water: 2,
- Crystal: 0,
- Feral: 2,
- },
- HPivs: { atk: 30 },
- HPdvs: { def: 14 },
- },
- electric: {
- damageTaken: {
- par: 3,
- Bug: 0,
- Dark: 0,
- Dragon: 0,
- Electric: 2,
- Fairy: 0,
- Fighting: 0,
- Fire: 0,
- Flying: 2,
- Ghost: 0,
- Grass: 0,
- Ground: 1,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 0,
- Steel: 2,
- Water: 0,
- Crystal: 2,
- Feral: 0,
- },
- HPivs: { spa: 30 },
- HPdvs: { atk: 14 },
- },
- fairy: {
- damageTaken: {
- Bug: 2,
- Dark: 2,
- Dragon: 3,
- Electric: 0,
- Fairy: 0,
- Fighting: 2,
- Fire: 0,
- Flying: 0,
- Ghost: 0,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 0,
- Poison: 1,
- Psychic: 0,
- Rock: 0,
- Steel: 1,
- Water: 0,
- Crystal: 0,
- Feral: 1,
- },
- },
- fighting: {
- damageTaken: {
- Bug: 2,
- Dark: 2,
- Dragon: 0,
- Electric: 0,
- Fairy: 1,
- Fighting: 0,
- Fire: 0,
- Flying: 1,
- Ghost: 0,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 1,
- Rock: 2,
- Steel: 0,
- Water: 0,
- Crystal: 2,
- Feral: 0,
- },
- HPivs: { def: 30, spa: 30, spd: 30, spe: 30 },
- HPdvs: { atk: 12, def: 12 },
- },
- fire: {
- damageTaken: {
- brn: 3,
- Bug: 2,
- Dark: 0,
- Dragon: 0,
- Electric: 0,
- Fairy: 2,
- Fighting: 0,
- Fire: 2,
- Flying: 0,
- Ghost: 0,
- Grass: 2,
- Ground: 1,
- Ice: 2,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 1,
- Steel: 2,
- Water: 1,
- Crystal: 1,
- Feral: 2,
- },
- HPivs: { atk: 30, spa: 30, spe: 30 },
- HPdvs: { atk: 14, def: 12 },
- },
- flying: {
- damageTaken: {
- Bug: 2,
- Dark: 0,
- Dragon: 0,
- Electric: 1,
- Fairy: 0,
- Fighting: 2,
- Fire: 0,
- Flying: 0,
- Ghost: 0,
- Grass: 2,
- Ground: 3,
- Ice: 1,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 1,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 1,
- },
- HPivs: { hp: 30, atk: 30, def: 30, spa: 30, spd: 30 },
- HPdvs: { atk: 12, def: 13 },
- },
- ghost: {
- damageTaken: {
- trapped: 3,
- Bug: 2,
- Dark: 1,
- Dragon: 0,
- Electric: 0,
- Fairy: 0,
- Fighting: 3,
- Fire: 0,
- Flying: 0,
- Ghost: 1,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 3,
- Poison: 2,
- Psychic: 0,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 1,
- Feral: 2,
- },
- HPivs: { def: 30, spd: 30 },
- HPdvs: { atk: 13, def: 14 },
- },
- grass: {
- damageTaken: {
- powder: 3,
- Bug: 1,
- Dark: 0,
- Dragon: 0,
- Electric: 2,
- Fairy: 0,
- Fighting: 0,
- Fire: 1,
- Flying: 1,
- Ghost: 0,
- Grass: 2,
- Ground: 2,
- Ice: 1,
- Normal: 0,
- Poison: 1,
- Psychic: 0,
- Rock: 0,
- Steel: 0,
- Water: 2,
- Crystal: 0,
- Feral: 1,
- },
- HPivs: { atk: 30, spa: 30 },
- HPdvs: { atk: 14, def: 14 },
- },
- ground: {
- damageTaken: {
- sandstorm: 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,
- Water: 1,
- Crystal: 0,
- Feral: 0,
- },
- HPivs: { spa: 30, spd: 30 },
- HPdvs: { atk: 12 },
- },
- ice: {
- damageTaken: {
- hail: 3,
- frz: 3,
- Bug: 0,
- Dark: 0,
- Dragon: 0,
- Electric: 0,
- Fairy: 0,
- Fighting: 1,
- Fire: 1,
- Flying: 0,
- Ghost: 0,
- Grass: 0,
- Ground: 0,
- Ice: 2,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 1,
- Steel: 1,
- Water: 0,
- Crystal: 0,
- Feral: 0,
- },
- HPivs: { atk: 30, def: 30 },
- HPdvs: { def: 13 },
- },
- normal: {
- damageTaken: {
- Bug: 0,
- Dark: 0,
- Dragon: 0,
- Electric: 0,
- Fairy: 0,
- Fighting: 1,
- Fire: 0,
- Flying: 0,
- Ghost: 3,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 1,
- },
- },
- poison: {
- damageTaken: {
- psn: 3,
- tox: 3,
- Bug: 2,
- Dark: 0,
- Dragon: 0,
- Electric: 0,
- Fairy: 2,
- Fighting: 2,
- Fire: 0,
- Flying: 0,
- Ghost: 0,
- Grass: 2,
- Ground: 1,
- Ice: 0,
- Normal: 0,
- Poison: 2,
- Psychic: 1,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 2,
- },
- HPivs: { def: 30, spa: 30, spd: 30 },
- HPdvs: { atk: 12, def: 14 },
- },
- psychic: {
- damageTaken: {
- Bug: 1,
- Dark: 1,
- Dragon: 0,
- Electric: 0,
- Fairy: 0,
- Fighting: 2,
- Fire: 0,
- Flying: 0,
- Ghost: 1,
- Grass: 0,
- Ground: 0,
- Ice: 0,
- Normal: 0,
- Poison: 0,
- Psychic: 2,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 0,
- },
- HPivs: { atk: 30, spe: 30 },
- HPdvs: { def: 12 },
- },
- rock: {
- damageTaken: {
- sandstorm: 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,
- Water: 1,
- Crystal: 0,
- Feral: 0,
- },
- HPivs: { def: 30, spd: 30, spe: 30 },
- HPdvs: { atk: 13, def: 12 },
- },
- steel: {
- damageTaken: {
- psn: 3,
- tox: 3,
- sandstorm: 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,
- Water: 0,
- Crystal: 2,
- Feral: 0,
- },
- HPivs: { spd: 30 },
- HPdvs: { atk: 13 },
- },
- water: {
- damageTaken: {
- Bug: 0,
- Dark: 0,
- Dragon: 0,
- Electric: 1,
- Fairy: 0,
- Fighting: 0,
- Fire: 2,
- Flying: 0,
- Ghost: 0,
- Grass: 1,
- Ground: 0,
- Ice: 2,
- Normal: 0,
- Poison: 0,
- Psychic: 0,
- Rock: 0,
- Steel: 2,
- Water: 2,
- Crystal: 0,
- Feral: 1,
- },
- HPivs: { atk: 30, def: 30, spa: 30 },
- HPdvs: { atk: 14, def: 13 },
- },
- crystal: {
- damageTaken: {
- brn: 3,
- sandstorm: 3,
- Bug: 0,
- Dark: 2,
- Dragon: 0,
- Electric: 1,
- Fairy: 0,
- Fighting: 1,
- Fire: 2,
- Flying: 0,
- Ghost: 0,
- Grass: 0,
- Ground: 2,
- Ice: 0,
- Normal: 2,
- Poison: 0,
- Psychic: 0,
- Rock: 2,
- Steel: 1,
- Water: 2,
- Crystal: 2,
- Feral: 2,
- },
- },
- feral: {
- damageTaken: {
- slp: 3,
- Bug: 0,
- Dark: 0,
- Dragon: 1,
- Electric: 0,
- Fairy: 2,
- Fighting: 0,
- Fire: 1,
- Flying: 0,
- Ghost: 2,
- Grass: 0,
- Ground: 0,
- Ice: 2,
- Normal: 0,
- Poison: 1,
- Psychic: 0,
- Rock: 0,
- Steel: 0,
- Water: 0,
- Crystal: 0,
- Feral: 0,
- },
- },
-};
diff --git a/data/mods/sixbysix/formats-data.ts b/data/mods/sixbysix/formats-data.ts
new file mode 100644
index 0000000000..40e510453d
--- /dev/null
+++ b/data/mods/sixbysix/formats-data.ts
@@ -0,0 +1,113 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ kingdraclassic: {
+ tier: "OU",
+ },
+ kingdrabrinepool: {
+ tier: "OU",
+ },
+ kingdradruid: {
+ tier: "OU",
+ },
+ kingdrabard: {
+ tier: "OU",
+ },
+ kingdragourmet: {
+ tier: "OU",
+ },
+ kingdraancient: {
+ tier: "OU",
+ },
+ nidoqueenclassic: {
+ tier: "OU",
+ },
+ nidoqueenerudite: {
+ tier: "OU",
+ },
+ nidoqueenvolcanic: {
+ tier: "OU",
+ },
+ nidoqueenrosegold: {
+ tier: "OU",
+ },
+ nidoqueenshaman: {
+ tier: "OU",
+ },
+ nidoqueenjasper: {
+ tier: "OU",
+ },
+ bisharpcenturion: {
+ tier: "OU",
+ },
+ bisharpsavage: {
+ tier: "OU",
+ },
+ bisharpronin: {
+ tier: "OU",
+ },
+ bisharpmantis: {
+ tier: "OU",
+ },
+ bisharprevenant: {
+ tier: "OU",
+ },
+ bisharpassassin: {
+ tier: "OU",
+ },
+ corviknightthunderbird: {
+ tier: "OU",
+ },
+ corviknightgenie: {
+ tier: "OU",
+ },
+ corviknightyeti: {
+ tier: "OU",
+ },
+ corviknightanalytical: {
+ tier: "OU",
+ },
+ corviknightmartian: {
+ tier: "OU",
+ },
+ corviknightfalcon: {
+ tier: "OU",
+ },
+ krookodileinfernal: {
+ tier: "OU",
+ },
+ krookodileabyssal: {
+ tier: "OU",
+ },
+ krookodilewetlander: {
+ tier: "OU",
+ },
+ krookodilecavedweller: {
+ tier: "OU",
+ },
+ krookodilecliffside: {
+ tier: "OU",
+ },
+ krookodilequantum: {
+ tier: "OU",
+ },
+ ogerponmuerta: {
+ tier: "OU",
+ },
+ ogerponeaster: {
+ tier: "OU",
+ },
+ ogerponankh: {
+ tier: "OU",
+ },
+ ogerponeid: {
+ tier: "OU",
+ },
+ ogerponvessel: {
+ tier: "OU",
+ },
+ ogerponkitsune: {
+ tier: "OU",
+ },
+ ogerpontealtera: {
+ tier: "Illegal",
+ },
+};
diff --git a/data/mods/sixbysix/items.ts b/data/mods/sixbysix/items.ts
new file mode 100644
index 0000000000..df1a3f90c0
--- /dev/null
+++ b/data/mods/sixbysix/items.ts
@@ -0,0 +1,32 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ cornerstonemask: {
+ name: "Cornerstone Mask",
+ spritenum: 758,
+ fling: {
+ basePower: 60,
+ },
+ num: 2406,
+ gen: 9,
+ desc: "No competitive use.",
+ },
+ hearthflamemask: {
+ name: "Hearthflame Mask",
+ spritenum: 760,
+ fling: {
+ basePower: 60,
+ },
+ desc: "No competitive use.",
+ num: 2408,
+ gen: 9,
+ },
+ wellspringmask: {
+ name: "Wellspring Mask",
+ spritenum: 759,
+ fling: {
+ basePower: 60,
+ },
+ desc: "No competitive use.",
+ num: 2407,
+ gen: 9,
+ },
+};
diff --git a/data/mods/sixbysix/learnsets.ts b/data/mods/sixbysix/learnsets.ts
new file mode 100644
index 0000000000..593627bd62
--- /dev/null
+++ b/data/mods/sixbysix/learnsets.ts
@@ -0,0 +1,2580 @@
+export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = {
+ kingdraclassic: {
+ learnset: {
+ aquajet: ["9L1"],
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonhammer: ["9L1"],
+ dragontail: ["9L1"],
+ facade: ["9L1"],
+ flipturn: ["9L1"],
+ knockoff: ["9L1"],
+ liquidation: ["9L1"],
+ outrage: ["9L1"],
+ waterfall: ["9L1"],
+ wavecrash: ["9L1"],
+ breakingswipe: ["9L1"],
+ dragonrush: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ scaleshot: ["9L1"],
+ takedown: ["9L1"],
+ blizzard: ["9L1"],
+ clearsmog: ["9L1"],
+ dracometeor: ["9L1"],
+ dragonpulse: ["9L1"],
+ hydropump: ["9L1"],
+ icebeam: ["9L1"],
+ scald: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ aurorabeam: ["9L1"],
+ bubblebeam: ["9L1"],
+ chillingwater: ["9L1"],
+ dragonbreath: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ muddywater: ["9L1"],
+ swift: ["9L1"],
+ twister: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ agility: ["9L1"],
+ disable: ["9L1"],
+ dragondance: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ dragoncheer: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ kingdrabrinepool: {
+ learnset: {
+ gunkshot: ["9L1"],
+ mortalspin: ["9L1"],
+ sludgebomb: ["9L1"],
+ sludgewave: ["9L1"],
+ toxic: ["9L1"],
+ watershuriken: ["9L1"],
+ acid: ["9L1"],
+ acidspray: ["9L1"],
+ aquaring: ["9L1"],
+ sludge: ["9L1"],
+ venoshock: ["9L1"],
+ aquajet: ["9L1"],
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ dragontail: ["9L1"],
+ facade: ["9L1"],
+ flipturn: ["9L1"],
+ knockoff: ["9L1"],
+ liquidation: ["9L1"],
+ waterfall: ["9L1"],
+ wavecrash: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ clearsmog: ["9L1"],
+ hydropump: ["9L1"],
+ scald: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ bubblebeam: ["9L1"],
+ chillingwater: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ muddywater: ["9L1"],
+ swift: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ agility: ["9L1"],
+ disable: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ nidoqueenclassic: {
+ learnset: {
+ aquatail: ["9L1"],
+ barbbarrage: ["9L1"],
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ counter: ["9L1"],
+ crunch: ["9L1"],
+ dragontail: ["9L1"],
+ drillrun: ["9L1"],
+ earthquake: ["9L1"],
+ facade: ["9L1"],
+ firepunch: ["9L1"],
+ focuspunch: ["9L1"],
+ highhorsepower: ["9L1"],
+ icepunch: ["9L1"],
+ outrage: ["9L1"],
+ poisonjab: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ seismictoss: ["9L1"],
+ shadowclaw: ["9L1"],
+ smackdown: ["9L1"],
+ stoneedge: ["9L1"],
+ suckerpunch: ["9L1"],
+ superfang: ["9L1"],
+ superpower: ["9L1"],
+ throatchop: ["9L1"],
+ thunderpunch: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ cut: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ dynamicpunch: ["9L1"],
+ fissure: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ headbutt: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ poisonfang: ["9L1"],
+ poisonsting: ["9L1"],
+ poisontail: ["9L1"],
+ rocksmash: ["9L1"],
+ rocktomb: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ blizzard: ["9L1"],
+ dragonpulse: ["9L1"],
+ earthpower: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ hex: ["9L1"],
+ icebeam: ["9L1"],
+ shadowball: ["9L1"],
+ sludgebomb: ["9L1"],
+ sludgewave: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ bubblebeam: ["9L1"],
+ echoedvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ incinerate: ["9L1"],
+ mudshot: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ venoshock: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ disable: ["9L1"],
+ honeclaws: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ slackoff: ["9L1"],
+ sleeptalk: ["9L1"],
+ spikes: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ toxicspikes: ["9L1"],
+ wish: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ quash: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ swagger: ["9L1"],
+ tailwhip: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ nidoqueenerudite: {
+ learnset: {
+ calmmind: ["9L1"],
+ chillyreception: ["9L1"],
+ expandingforce: ["9L1"],
+ futuresight: ["9L1"],
+ psychic: ["9L1"],
+ psychicnoise: ["9L1"],
+ psyshock: ["9L1"],
+ trickroom: ["9L1"],
+ zenheadbutt: ["9L1"],
+ amnesia: ["9L1"],
+ confusion: ["9L1"],
+ healpulse: ["9L1"],
+ imprison: ["9L1"],
+ magicroom: ["9L1"],
+ psybeam: ["9L1"],
+ psychicterrain: ["9L1"],
+ skillswap: ["9L1"],
+ wonderroom: ["9L1"],
+ aquatail: ["9L1"],
+ bodyslam: ["9L1"],
+ counter: ["9L1"],
+ crunch: ["9L1"],
+ dragontail: ["9L1"],
+ drillrun: ["9L1"],
+ earthquake: ["9L1"],
+ facade: ["9L1"],
+ firepunch: ["9L1"],
+ highhorsepower: ["9L1"],
+ icepunch: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ seismictoss: ["9L1"],
+ shadowclaw: ["9L1"],
+ smackdown: ["9L1"],
+ stoneedge: ["9L1"],
+ superfang: ["9L1"],
+ throatchop: ["9L1"],
+ thunderpunch: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ cut: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ fissure: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ headbutt: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ rocksmash: ["9L1"],
+ rocktomb: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ blizzard: ["9L1"],
+ dragonpulse: ["9L1"],
+ earthpower: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ icebeam: ["9L1"],
+ shadowball: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ bubblebeam: ["9L1"],
+ echoedvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ incinerate: ["9L1"],
+ mudshot: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ disable: ["9L1"],
+ honeclaws: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ wish: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ tailwhip: ["9L1"],
+ },
+ },
+ bisharpcenturion: {
+ learnset: {
+ bodypress: ["9L1"],
+ brickbreak: ["9L1"],
+ bulletpunch: ["9L1"],
+ drainpunch: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ hammerarm: ["9L1"],
+ ironhead: ["9L1"],
+ lowkick: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ shadowclaw: ["9L1"],
+ superpower: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ dynamicpunch: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ headbutt: ["9L1"],
+ lowsweep: ["9L1"],
+ metalburst: ["9L1"],
+ metalclaw: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ upperhand: ["9L1"],
+ airslash: ["9L1"],
+ flashcannon: ["9L1"],
+ focusblast: ["9L1"],
+ grassknot: ["9L1"],
+ steelbeam: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ bulkup: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ irondefense: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ swordsdance: ["9L1"],
+ taunt: ["9L1"],
+ thunderwave: ["9L1"],
+ coaching: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ metalsound: ["9L1"],
+ sandstorm: ["9L1"],
+ sunnyday: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ bisharpsavage: {
+ learnset: {
+ knockoff: ["9L1"],
+ powerwhip: ["9L1"],
+ leafblade: ["9L1"],
+ bulletseed: ["9L1"],
+ grassyglide: ["9L1"],
+ seedbomb: ["9L1"],
+ leechseed: ["9L1"],
+ vinewhip: ["9L1"],
+ branchpoke: ["9L1"],
+ leafage: ["9L1"],
+ megadrain: ["9L1"],
+ absorb: ["9L1"],
+ grassyterrain: ["9L1"],
+ razorleaf: ["9L1"],
+ bodypress: ["9L1"],
+ brickbreak: ["9L1"],
+ bulletpunch: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ ironhead: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ superpower: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ dynamicpunch: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ headbutt: ["9L1"],
+ lowsweep: ["9L1"],
+ metalburst: ["9L1"],
+ metalclaw: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ flashcannon: ["9L1"],
+ grassknot: ["9L1"],
+ steelbeam: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ bulkup: ["9L1"],
+ curse: ["9L1"],
+ irondefense: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ thunderwave: ["9L1"],
+ coaching: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ metalsound: ["9L1"],
+ sandstorm: ["9L1"],
+ sunnyday: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ corviknightthunderbird: {
+ learnset: {
+ acrobatics: ["9L1"],
+ bodypress: ["9L1"],
+ bodyslam: ["9L1"],
+ bravebird: ["9L1"],
+ doubleedge: ["9L1"],
+ drillpeck: ["9L1"],
+ facade: ["9L1"],
+ supercellslam: ["9L1"],
+ uturn: ["9L1"],
+ aerialace: ["9L1"],
+ dualwingbeat: ["9L1"],
+ fly: ["9L1"],
+ furyattack: ["9L1"],
+ gigaimpact: ["9L1"],
+ peck: ["9L1"],
+ pluck: ["9L1"],
+ powertrip: ["9L1"],
+ skyattack: ["9L1"],
+ spark: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ wildcharge: ["9L1"],
+ airslash: ["9L1"],
+ discharge: ["9L1"],
+ heatwave: ["9L1"],
+ hurricane: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ voltswitch: ["9L1"],
+ aircutter: ["9L1"],
+ chargebeam: ["9L1"],
+ electroball: ["9L1"],
+ hyperbeam: ["9L1"],
+ swift: ["9L1"],
+ thundershock: ["9L1"],
+ zapcannon: ["9L1"],
+ agility: ["9L1"],
+ curse: ["9L1"],
+ defog: ["9L1"],
+ honeclaws: ["9L1"],
+ irondefense: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roost: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ tailwind: ["9L1"],
+ electricterrain: ["9L1"],
+ endure: ["9L1"],
+ faketears: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ sandattack: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ corviknightgenie: {
+ learnset: {
+ calmmind: ["9L1"],
+ earthpower: ["9L1"],
+ earthquake: ["9L1"],
+ powergem: ["9L1"],
+ sandsearstorm: ["9L1"],
+ scorchingsands: ["9L1"],
+ stealthrock: ["9L1"],
+ dig: ["9L1"],
+ sandstorm: ["9L1"],
+ acrobatics: ["9L1"],
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ facade: ["9L1"],
+ uturn: ["9L1"],
+ aerialace: ["9L1"],
+ dualwingbeat: ["9L1"],
+ fly: ["9L1"],
+ furyattack: ["9L1"],
+ gigaimpact: ["9L1"],
+ peck: ["9L1"],
+ pluck: ["9L1"],
+ powertrip: ["9L1"],
+ skyattack: ["9L1"],
+ spark: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ heatwave: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ voltswitch: ["9L1"],
+ aircutter: ["9L1"],
+ chargebeam: ["9L1"],
+ electroball: ["9L1"],
+ hyperbeam: ["9L1"],
+ swift: ["9L1"],
+ thundershock: ["9L1"],
+ agility: ["9L1"],
+ curse: ["9L1"],
+ defog: ["9L1"],
+ honeclaws: ["9L1"],
+ irondefense: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ tailwind: ["9L1"],
+ electricterrain: ["9L1"],
+ endure: ["9L1"],
+ faketears: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ sandattack: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ krookodileinfernal: {
+ learnset: {
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ counter: ["9L1"],
+ crunch: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonclaw: ["9L1"],
+ dragontail: ["9L1"],
+ endeavor: ["9L1"],
+ facade: ["9L1"],
+ firefang: ["9L1"],
+ firelash: ["9L1"],
+ flamecharge: ["9L1"],
+ flareblitz: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ gunkshot: ["9L1"],
+ knockoff: ["9L1"],
+ lashout: ["9L1"],
+ outrage: ["9L1"],
+ shadowclaw: ["9L1"],
+ throatchop: ["9L1"],
+ aerialace: ["9L1"],
+ bite: ["9L1"],
+ breakingswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ powertrip: ["9L1"],
+ scaleshot: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ darkpulse: ["9L1"],
+ dragonpulse: ["9L1"],
+ eruption: ["9L1"],
+ fierywrath: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ heatwave: ["9L1"],
+ magmastorm: ["9L1"],
+ overheat: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ burningjealousy: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ inferno: ["9L1"],
+ snarl: ["9L1"],
+ curse: ["9L1"],
+ encore: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ willowisp: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ memento: ["9L1"],
+ sunnyday: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ krookodileabyssal: {
+ learnset: {
+ dragondance: ["9L1"],
+ earthquake: ["9L1"],
+ hydropump: ["9L1"],
+ liquidation: ["9L1"],
+ stoneedge: ["9L1"],
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ counter: ["9L1"],
+ crunch: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonclaw: ["9L1"],
+ dragontail: ["9L1"],
+ endeavor: ["9L1"],
+ facade: ["9L1"],
+ flamecharge: ["9L1"],
+ flareblitz: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ gunkshot: ["9L1"],
+ knockoff: ["9L1"],
+ lashout: ["9L1"],
+ outrage: ["9L1"],
+ shadowclaw: ["9L1"],
+ throatchop: ["9L1"],
+ aerialace: ["9L1"],
+ bite: ["9L1"],
+ breakingswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ powertrip: ["9L1"],
+ scaleshot: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ dragonpulse: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ burningjealousy: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ inferno: ["9L1"],
+ snarl: ["9L1"],
+ curse: ["9L1"],
+ encore: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ willowisp: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ memento: ["9L1"],
+ sunnyday: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ ogerponmuerta: {
+ learnset: {
+ facade: ["9L1"],
+ knockoff: ["9L1"],
+ lashout: ["9L1"],
+ poltergeist: ["9L1"],
+ quickattack: ["9L1"],
+ shadowclaw: ["9L1"],
+ shadowsneak: ["9L1"],
+ throatchop: ["9L1"],
+ uturn: ["9L1"],
+ astonish: ["9L1"],
+ falseswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ phantomforce: ["9L1"],
+ retaliate: ["9L1"],
+ rocktomb: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ dazzlinggleam: ["9L1"],
+ drainingkiss: ["9L1"],
+ fleurcannon: ["9L1"],
+ hex: ["9L1"],
+ nightshade: ["9L1"],
+ shadowball: ["9L1"],
+ taunt: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ disarmingvoice: ["9L1"],
+ icywind: ["9L1"],
+ hyperbeam: ["9L1"],
+ batonpass: ["9L1"],
+ curse: ["9L1"],
+ destinybond: ["9L1"],
+ disable: ["9L1"],
+ perishsong: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ thunderwave: ["9L1"],
+ trick: ["9L1"],
+ trickroom: ["9L1"],
+ willowisp: ["9L1"],
+ babydolleyes: ["9L1"],
+ charm: ["9L1"],
+ confuseray: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ magicroom: ["9L1"],
+ metronome: ["9L1"],
+ mistyterrain: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ },
+ },
+ ogerponeaster: {
+ learnset: {
+ bodyslam: ["9L1"],
+ calmmind: ["9L1"],
+ hypervoice: ["9L1"],
+ moonblast: ["9L1"],
+ mysticalfire: ["9L1"],
+ playrough: ["9L1"],
+ softboiled: ["9L1"],
+ springtidestorm: ["9L1"],
+ stealthrock: ["9L1"],
+ aromaticmist: ["9L1"],
+ celebrate: ["9L1"],
+ confide: ["9L1"],
+ covet: ["9L1"],
+ decorate: ["9L1"],
+ feint: ["9L1"],
+ playnice: ["9L1"],
+ safeguard: ["9L1"],
+ snore: ["9L1"],
+ stuffcheeks: ["9L1"],
+ sweetkiss: ["9L1"],
+ uproar: ["9L1"],
+ facade: ["9L1"],
+ knockoff: ["9L1"],
+ quickattack: ["9L1"],
+ throatchop: ["9L1"],
+ uturn: ["9L1"],
+ falseswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ phantomforce: ["9L1"],
+ retaliate: ["9L1"],
+ rocktomb: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ dazzlinggleam: ["9L1"],
+ drainingkiss: ["9L1"],
+ taunt: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ disarmingvoice: ["9L1"],
+ icywind: ["9L1"],
+ hyperbeam: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ thunderwave: ["9L1"],
+ trick: ["9L1"],
+ babydolleyes: ["9L1"],
+ charm: ["9L1"],
+ confuseray: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ metronome: ["9L1"],
+ mistyterrain: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ },
+ },
+ ogerponankh: {
+ learnset: {
+ swordsdance: ["9L1"],
+ earthquake: ["9L1"],
+ earthpower: ["9L1"],
+ darkpulse: ["9L1"],
+ stoneedge: ["9L1"],
+ powergem: ["9L1"],
+ facade: ["9L1"],
+ knockoff: ["9L1"],
+ poltergeist: ["9L1"],
+ shadowclaw: ["9L1"],
+ throatchop: ["9L1"],
+ uturn: ["9L1"],
+ astonish: ["9L1"],
+ falseswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ phantomforce: ["9L1"],
+ retaliate: ["9L1"],
+ rocktomb: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ dazzlinggleam: ["9L1"],
+ hex: ["9L1"],
+ shadowball: ["9L1"],
+ taunt: ["9L1"],
+ terablast: ["9L1"],
+ disarmingvoice: ["9L1"],
+ icywind: ["9L1"],
+ hyperbeam: ["9L1"],
+ batonpass: ["9L1"],
+ destinybond: ["9L1"],
+ perishsong: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ trick: ["9L1"],
+ babydolleyes: ["9L1"],
+ charm: ["9L1"],
+ confuseray: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ magicroom: ["9L1"],
+ metronome: ["9L1"],
+ mistyterrain: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ },
+ },
+ kingdradruid: {
+ learnset: {
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ dragontail: ["9L1"],
+ facade: ["9L1"],
+ ironhead: ["9L1"],
+ outrage: ["9L1"],
+ scaleshot: ["9L1"],
+ smartstrike: ["9L1"],
+ breakingswipe: ["9L1"],
+ dragonrush: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ hardpress: ["9L1"],
+ metalburst: ["9L1"],
+ steelwing: ["9L1"],
+ takedown: ["9L1"],
+ doomdesire: ["9L1"],
+ dracometeor: ["9L1"],
+ dragonpulse: ["9L1"],
+ flamethrower: ["9L1"],
+ flashcannon: ["9L1"],
+ hydropump: ["9L1"],
+ icebeam: ["9L1"],
+ steelbeam: ["9L1"],
+ tachyoncutter: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ aurorabeam: ["9L1"],
+ bubblebeam: ["9L1"],
+ chillingwater: ["9L1"],
+ dragonbreath: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ swift: ["9L1"],
+ twister: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ calmmind: ["9L1"],
+ disable: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ substitute: ["9L1"],
+ dragoncheer: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ metalsound: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ nidoqueenvolcanic: {
+ learnset: {
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ crunch: ["9L1"],
+ dragontail: ["9L1"],
+ drillrun: ["9L1"],
+ dynamicpunch: ["9L1"],
+ earthquake: ["9L1"],
+ facade: ["9L1"],
+ firepunch: ["9L1"],
+ flareblitz: ["9L1"],
+ focuspunch: ["9L1"],
+ headbutt: ["9L1"],
+ heatcrash: ["9L1"],
+ highhorsepower: ["9L1"],
+ outrage: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ rocktomb: ["9L1"],
+ seismictoss: ["9L1"],
+ stoneedge: ["9L1"],
+ suckerpunch: ["9L1"],
+ superfang: ["9L1"],
+ superpower: ["9L1"],
+ temperflare: ["9L1"],
+ throatchop: ["9L1"],
+ thunderpunch: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ counter: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ fissure: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ poisontail: ["9L1"],
+ rocksmash: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ dragonpulse: ["9L1"],
+ earthpower: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ icebeam: ["9L1"],
+ lavaplume: ["9L1"],
+ meteorbeam: ["9L1"],
+ overheat: ["9L1"],
+ powergem: ["9L1"],
+ shadowball: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ echoedvoice: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ mudshot: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ curse: ["9L1"],
+ disable: ["9L1"],
+ honeclaws: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ stealthrock: ["9L1"],
+ spikes: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ willowisp: ["9L1"],
+ wish: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ quash: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sleeptalk: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ swagger: ["9L1"],
+ tailwhip: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ bisharpronin: {
+ learnset: {
+ barbbarrage: ["9L1"],
+ bodypress: ["9L1"],
+ brickbreak: ["9L1"],
+ drainpunch: ["9L1"],
+ dynamicpunch: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ headbutt: ["9L1"],
+ lowkick: ["9L1"],
+ mortalspin: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ sacredsword: ["9L1"],
+ shadowclaw: ["9L1"],
+ uturn: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ crosspoison: ["9L1"],
+ dig: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ lowsweep: ["9L1"],
+ poisonsting: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ upperhand: ["9L1"],
+ airslash: ["9L1"],
+ focusblast: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ acid: ["9L1"],
+ acidspray: ["9L1"],
+ hyperbeam: ["9L1"],
+ venoshock: ["9L1"],
+ detect: ["9L1"],
+ encore: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ toxicspikes: ["9L1"],
+ coaching: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ poisongas: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ corviknightyeti: {
+ learnset: {
+ acrobatics: ["9L1"],
+ bravebird: ["9L1"],
+ doubleedge: ["9L1"],
+ drillpeck: ["9L1"],
+ dualwingbeat: ["9L1"],
+ facade: ["9L1"],
+ iceshard: ["9L1"],
+ icespinner: ["9L1"],
+ iciclespear: ["9L1"],
+ aerialace: ["9L1"],
+ fly: ["9L1"],
+ furyattack: ["9L1"],
+ gigaimpact: ["9L1"],
+ peck: ["9L1"],
+ pluck: ["9L1"],
+ skyattack: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ airslash: ["9L1"],
+ bleakwindstorm: ["9L1"],
+ blizzard: ["9L1"],
+ hurricane: ["9L1"],
+ icebeam: ["9L1"],
+ terablast: ["9L1"],
+ voltswitch: ["9L1"],
+ weatherball: ["9L1"],
+ aircutter: ["9L1"],
+ chillingwater: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ powdersnow: ["9L1"],
+ swift: ["9L1"],
+ waterpulse: ["9L1"],
+ curse: ["9L1"],
+ defog: ["9L1"],
+ encore: ["9L1"],
+ haze: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roost: ["9L1"],
+ substitute: ["9L1"],
+ tailwind: ["9L1"],
+ endure: ["9L1"],
+ faketears: ["9L1"],
+ leer: ["9L1"],
+ mist: ["9L1"],
+ sandattack: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ sleeptalk: ["9L1"],
+ snowscape: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ krookodilewetlander: {
+ learnset: {
+ aquajet: ["9L1"],
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ bulletseed: ["9L1"],
+ crunch: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonclaw: ["9L1"],
+ dragontail: ["9L1"],
+ endeavor: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ gunkshot: ["9L1"],
+ knockoff: ["9L1"],
+ lashout: ["9L1"],
+ leafblade: ["9L1"],
+ liquidation: ["9L1"],
+ rapidspin: ["9L1"],
+ scaleshot: ["9L1"],
+ waterfall: ["9L1"],
+ wavecrash: ["9L1"],
+ woodhammer: ["9L1"],
+ aerialace: ["9L1"],
+ bite: ["9L1"],
+ breakingswipe: ["9L1"],
+ counter: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ dragonpulse: ["9L1"],
+ gigadrain: ["9L1"],
+ inferno: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ megadrain: ["9L1"],
+ snarl: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ encore: ["9L1"],
+ leechseed: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ strengthsap: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ synthesis: ["9L1"],
+ taunt: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ krookodilecavedweller: {
+ learnset: {
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonclaw: ["9L1"],
+ earthquake: ["9L1"],
+ endeavor: ["9L1"],
+ explosion: ["9L1"],
+ facade: ["9L1"],
+ firefang: ["9L1"],
+ firelash: ["9L1"],
+ flamecharge: ["9L1"],
+ flareblitz: ["9L1"],
+ knockoff: ["9L1"],
+ rapidspin: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ scaleshot: ["9L1"],
+ stoneedge: ["9L1"],
+ aerialace: ["9L1"],
+ breakingswipe: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ dragonpulse: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ heatwave: ["9L1"],
+ inferno: ["9L1"],
+ overheat: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ burningjealousy: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ curse: ["9L1"],
+ encore: ["9L1"],
+ lightscreen: ["9L1"],
+ memento: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ willowisp: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ swagger: ["9L1"],
+ tarshot: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ ogerponeid: {
+ learnset: {
+ knockoff: ["9L1"],
+ liquidation: ["9L1"],
+ rapidspin: ["9L1"],
+ shadowclaw: ["9L1"],
+ wavecrash: ["9L1"],
+ astonish: ["9L1"],
+ falseswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ lick: ["9L1"],
+ retaliate: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ hex: ["9L1"],
+ moonblast: ["9L1"],
+ surf: ["9L1"],
+ shadowball: ["9L1"],
+ chillingwater: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ watergun: ["9L1"],
+ waterpledge: ["9L1"],
+ waterpulse: ["9L1"],
+ batonpass: ["9L1"],
+ healbell: ["9L1"],
+ lunarblessing: ["9L1"],
+ lunardance: ["9L1"],
+ protect: ["9L1"],
+ recover: ["9L1"],
+ rest: ["9L1"],
+ spikes: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ thunderwave: ["9L1"],
+ toxic: ["9L1"],
+ aquaring: ["9L1"],
+ babydolleyes: ["9L1"],
+ celebrate: ["9L1"],
+ confuseray: ["9L1"],
+ cosmicpower: ["9L1"],
+ decorate: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ instruct: ["9L1"],
+ lifedew: ["9L1"],
+ magicroom: ["9L1"],
+ metronome: ["9L1"],
+ mistyterrain: ["9L1"],
+ raindance: ["9L1"],
+ sleeptalk: ["9L1"],
+ stuffcheeks: ["9L1"],
+ },
+ },
+ corviknightanalytical: {
+ learnset: {
+ acrobatics: ["9L1"],
+ bodypress: ["9L1"],
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ facade: ["9L1"],
+ supercellslam: ["9L1"],
+ uturn: ["9L1"],
+ zenheadbutt: ["9L1"],
+ aerialace: ["9L1"],
+ dualwingbeat: ["9L1"],
+ fly: ["9L1"],
+ furyattack: ["9L1"],
+ gigaimpact: ["9L1"],
+ peck: ["9L1"],
+ pluck: ["9L1"],
+ skyattack: ["9L1"],
+ spark: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ wildcharge: ["9L1"],
+ discharge: ["9L1"],
+ heatwave: ["9L1"],
+ psychic: ["9L1"],
+ psyshock: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ voltswitch: ["9L1"],
+ chargebeam: ["9L1"],
+ electroball: ["9L1"],
+ hyperbeam: ["9L1"],
+ swift: ["9L1"],
+ thundershock: ["9L1"],
+ psybeam: ["9L1"],
+ zapcannon: ["9L1"],
+ agility: ["9L1"],
+ calmmind: ["9L1"],
+ curse: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roost: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ electricterrain: ["9L1"],
+ endure: ["9L1"],
+ faketears: ["9L1"],
+ leer: ["9L1"],
+ psychicterrain: ["9L1"],
+ raindance: ["9L1"],
+ sandattack: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ bisharpmantis: {
+ learnset: {
+ ceaselessedge: ["9L1"],
+ facade: ["9L1"],
+ bitterblade: ["9L1"],
+ firstimpression: ["9L1"],
+ foulplay: ["9L1"],
+ leechlife: ["9L1"],
+ lowkick: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ shadowclaw: ["9L1"],
+ suckerpunch: ["9L1"],
+ knockoff: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ solarblade: ["9L1"],
+ darkpulse: ["9L1"],
+ bugbuzz: ["9L1"],
+ snarl: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ agility: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ swordsdance: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ stringshot: ["9L1"],
+ sunnyday: ["9L1"],
+ scaryface: ["9L1"],
+ spite: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ nidoqueenrosegold: {
+ learnset: {
+ aquatail: ["9L1"],
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ crunch: ["9L1"],
+ dragontail: ["9L1"],
+ drillrun: ["9L1"],
+ dynamicpunch: ["9L1"],
+ facade: ["9L1"],
+ firepunch: ["9L1"],
+ focuspunch: ["9L1"],
+ headbutt: ["9L1"],
+ icepunch: ["9L1"],
+ poisonjab: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ rocktomb: ["9L1"],
+ seismictoss: ["9L1"],
+ shadowclaw: ["9L1"],
+ stoneedge: ["9L1"],
+ suckerpunch: ["9L1"],
+ superfang: ["9L1"],
+ superpower: ["9L1"],
+ throatchop: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ counter: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ poisonfang: ["9L1"],
+ poisonsting: ["9L1"],
+ poisontail: ["9L1"],
+ rocksmash: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ blizzard: ["9L1"],
+ dragonpulse: ["9L1"],
+ energyball: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ gigadrain: ["9L1"],
+ hex: ["9L1"],
+ leafstorm: ["9L1"],
+ shadowball: ["9L1"],
+ sludgebomb: ["9L1"],
+ sludgewave: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ earthpower: ["9L1"],
+ absorb: ["9L1"],
+ bubblebeam: ["9L1"],
+ echoedvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ incinerate: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ venoshock: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ disable: ["9L1"],
+ honeclaws: ["9L1"],
+ leechseed: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ slackoff: ["9L1"],
+ spikes: ["9L1"],
+ spikyshield: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ toxicspikes: ["9L1"],
+ wish: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ quash: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sleeptalk: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ swagger: ["9L1"],
+ tailwhip: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ kingdrabard: {
+ learnset: {
+ aquajet: ["9L1"],
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ facade: ["9L1"],
+ flipturn: ["9L1"],
+ knockoff: ["9L1"],
+ waterfall: ["9L1"],
+ liquidation: ["9L1"],
+ spiritbreak: ["9L1"],
+ breakingswipe: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ alluringvoice: ["9L1"],
+ blizzard: ["9L1"],
+ clearsmog: ["9L1"],
+ hydropump: ["9L1"],
+ icebeam: ["9L1"],
+ moonblast: ["9L1"],
+ psychicnoise: ["9L1"],
+ scald: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ aurorabeam: ["9L1"],
+ bubblebeam: ["9L1"],
+ chillingwater: ["9L1"],
+ dragonbreath: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ muddywater: ["9L1"],
+ swift: ["9L1"],
+ twister: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ agility: ["9L1"],
+ disable: ["9L1"],
+ moonlight: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ substitute: ["9L1"],
+ dragoncheer: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ kingdragourmet: {
+ learnset: {
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ dragontail: ["9L1"],
+ facade: ["9L1"],
+ fakeout: ["9L1"],
+ flipturn: ["9L1"],
+ knockoff: ["9L1"],
+ orderup: ["9L1"],
+ outrage: ["9L1"],
+ rapidspin: ["9L1"],
+ scaleshot: ["9L1"],
+ breakingswipe: ["9L1"],
+ dragonrush: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ clearsmog: ["9L1"],
+ dracometeor: ["9L1"],
+ terablast: ["9L1"],
+ chillingwater: ["9L1"],
+ dragonbreath: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ swift: ["9L1"],
+ twister: ["9L1"],
+ whirlpool: ["9L1"],
+ banefulbunker: ["9L1"],
+ defog: ["9L1"],
+ disable: ["9L1"],
+ glare: ["9L1"],
+ healbell: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ substitute: ["9L1"],
+ toxic: ["9L1"],
+ whirlwind: ["9L1"],
+ wish: ["9L1"],
+ dragoncheer: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ nidoqueenshaman: {
+ learnset: {
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ drillrun: ["9L1"],
+ dynamicpunch: ["9L1"],
+ earthquake: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ headbutt: ["9L1"],
+ poisonjab: ["9L1"],
+ poltergeist: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ rocktomb: ["9L1"],
+ seismictoss: ["9L1"],
+ shadowclaw: ["9L1"],
+ shadowsneak: ["9L1"],
+ superfang: ["9L1"],
+ superpower: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ fissure: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ lick: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ poisonfang: ["9L1"],
+ poisonsting: ["9L1"],
+ poisontail: ["9L1"],
+ rocksmash: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ earthpower: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ hex: ["9L1"],
+ icebeam: ["9L1"],
+ shadowball: ["9L1"],
+ sludgebomb: ["9L1"],
+ sludgewave: ["9L1"],
+ surf: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ bubblebeam: ["9L1"],
+ echoedvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ incinerate: ["9L1"],
+ mudshot: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ venoshock: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ disable: ["9L1"],
+ honeclaws: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ slackoff: ["9L1"],
+ spikes: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ toxicspikes: ["9L1"],
+ willowisp: ["9L1"],
+ wish: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ quash: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sleeptalk: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ swagger: ["9L1"],
+ tailwhip: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ bisharprevenant: {
+ learnset: {
+ behemothblade: ["9L1"],
+ brickbreak: ["9L1"],
+ drainpunch: ["9L1"],
+ facade: ["9L1"],
+ foulplay: ["9L1"],
+ headbutt: ["9L1"],
+ ironhead: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ poltergeist: ["9L1"],
+ sacredsword: ["9L1"],
+ shadowclaw: ["9L1"],
+ shadowsneak: ["9L1"],
+ superpower: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ lowsweep: ["9L1"],
+ metalburst: ["9L1"],
+ metalclaw: ["9L1"],
+ phantomforce: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ upperhand: ["9L1"],
+ flashcannon: ["9L1"],
+ focusblast: ["9L1"],
+ hex: ["9L1"],
+ nightshade: ["9L1"],
+ shadowball: ["9L1"],
+ steelbeam: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ irondefense: ["9L1"],
+ protect: ["9L1"],
+ recover: ["9L1"],
+ rest: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ swordsdance: ["9L1"],
+ thunderwave: ["9L1"],
+ coaching: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ metalsound: ["9L1"],
+ sandstorm: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ corviknightmartian: {
+ learnset: {
+ bodypress: ["9L1"],
+ bodyslam: ["9L1"],
+ ironhead: ["9L1"],
+ zenheadbutt: ["9L1"],
+ aerialace: ["9L1"],
+ dualwingbeat: ["9L1"],
+ fly: ["9L1"],
+ gigaimpact: ["9L1"],
+ gyroball: ["9L1"],
+ hardpress: ["9L1"],
+ psychocut: ["9L1"],
+ takedown: ["9L1"],
+ thunderbolt: ["9L1"],
+ psychic: ["9L1"],
+ doomdesire: ["9L1"],
+ flashcannon: ["9L1"],
+ psychicnoise: ["9L1"],
+ steelbeam: ["9L1"],
+ storedpower: ["9L1"],
+ chargebeam: ["9L1"],
+ hyperbeam: ["9L1"],
+ swift: ["9L1"],
+ psybeam: ["9L1"],
+ calmmind: ["9L1"],
+ defog: ["9L1"],
+ irondefense: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ sleeptalk: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ teleport: ["9L1"],
+ trickroom: ["9L1"],
+ electricterrain: ["9L1"],
+ endure: ["9L1"],
+ gravity: ["9L1"],
+ leer: ["9L1"],
+ psychicterrain: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ skillswap: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ krookodilecliffside: {
+ learnset: {
+ bodyslam: ["9L1"],
+ crunch: ["9L1"],
+ doubleedge: ["9L1"],
+ dragonclaw: ["9L1"],
+ dragontail: ["9L1"],
+ endeavor: ["9L1"],
+ facade: ["9L1"],
+ firefang: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ gunkshot: ["9L1"],
+ knockoff: ["9L1"],
+ powertrip: ["9L1"],
+ scaleshot: ["9L1"],
+ throatchop: ["9L1"],
+ aerialace: ["9L1"],
+ bite: ["9L1"],
+ breakingswipe: ["9L1"],
+ counter: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ darkpulse: ["9L1"],
+ dracometeor: ["9L1"],
+ dragonpulse: ["9L1"],
+ flamethrower: ["9L1"],
+ flashcannon: ["9L1"],
+ focusblast: ["9L1"],
+ inferno: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ burningjealousy: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ snarl: ["9L1"],
+ curse: ["9L1"],
+ defog: ["9L1"],
+ encore: ["9L1"],
+ memento: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ roost: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ swagger: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ ogerponvessel: {
+ learnset: {
+ axekick: ["9L1"],
+ explosion: ["9L1"],
+ knockoff: ["9L1"],
+ leechlife: ["9L1"],
+ lunge: ["9L1"],
+ rocktomb: ["9L1"],
+ sacredsword: ["9L1"],
+ thunderouskick: ["9L1"],
+ uturn: ["9L1"],
+ gigaimpact: ["9L1"],
+ highjumpkick: ["9L1"],
+ retaliate: ["9L1"],
+ skittersmack: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ terablast: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ defog: ["9L1"],
+ destinybond: ["9L1"],
+ disable: ["9L1"],
+ encore: ["9L1"],
+ lightscreen: ["9L1"],
+ perishsong: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ spikes: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ trick: ["9L1"],
+ endure: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ metronome: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ topsyturvy: ["9L1"],
+ },
+ },
+ kingdraancient: {
+ learnset: {
+ bodyslam: ["9L1"],
+ doubleedge: ["9L1"],
+ facade: ["9L1"],
+ flareblitz: ["9L1"],
+ flipturn: ["9L1"],
+ knockoff: ["9L1"],
+ liquidation: ["9L1"],
+ outrage: ["9L1"],
+ scaleshot: ["9L1"],
+ seedbomb: ["9L1"],
+ breakingswipe: ["9L1"],
+ dragonrush: ["9L1"],
+ flail: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ clearsmog: ["9L1"],
+ energyball: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ gigadrain: ["9L1"],
+ hydropump: ["9L1"],
+ leafstorm: ["9L1"],
+ overheat: ["9L1"],
+ scald: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ aurorabeam: ["9L1"],
+ bubblebeam: ["9L1"],
+ chillingwater: ["9L1"],
+ dragonbreath: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ muddywater: ["9L1"],
+ swift: ["9L1"],
+ twister: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ agility: ["9L1"],
+ disable: ["9L1"],
+ leechseed: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ substitute: ["9L1"],
+ synthesis: ["9L1"],
+ dragoncheer: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ smokescreen: ["9L1"],
+ snowscape: ["9L1"],
+ splash: ["9L1"],
+ yawn: ["9L1"],
+ },
+ },
+ nidoqueenjasper: {
+ learnset: {
+ accelerock: ["9L1"],
+ aquatail: ["9L1"],
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ crunch: ["9L1"],
+ dragontail: ["9L1"],
+ drillrun: ["9L1"],
+ dynamicpunch: ["9L1"],
+ earthquake: ["9L1"],
+ facade: ["9L1"],
+ firepunch: ["9L1"],
+ focuspunch: ["9L1"],
+ gunkshot: ["9L1"],
+ headbutt: ["9L1"],
+ highhorsepower: ["9L1"],
+ icepunch: ["9L1"],
+ outrage: ["9L1"],
+ poisonjab: ["9L1"],
+ rockblast: ["9L1"],
+ rockslide: ["9L1"],
+ rocktomb: ["9L1"],
+ saltcure: ["9L1"],
+ seismictoss: ["9L1"],
+ shadowclaw: ["9L1"],
+ stoneedge: ["9L1"],
+ superfang: ["9L1"],
+ superpower: ["9L1"],
+ throatchop: ["9L1"],
+ thunderpunch: ["9L1"],
+ aerialace: ["9L1"],
+ beatup: ["9L1"],
+ bite: ["9L1"],
+ bulldoze: ["9L1"],
+ counter: ["9L1"],
+ dig: ["9L1"],
+ doublekick: ["9L1"],
+ fissure: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ furyswipes: ["9L1"],
+ gigaimpact: ["9L1"],
+ horndrill: ["9L1"],
+ irontail: ["9L1"],
+ megakick: ["9L1"],
+ payday: ["9L1"],
+ poisonfang: ["9L1"],
+ poisonsting: ["9L1"],
+ poisontail: ["9L1"],
+ rocksmash: ["9L1"],
+ sandtomb: ["9L1"],
+ scratch: ["9L1"],
+ stompingtantrum: ["9L1"],
+ strength: ["9L1"],
+ tackle: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ blizzard: ["9L1"],
+ dragonpulse: ["9L1"],
+ earthpower: ["9L1"],
+ fireblast: ["9L1"],
+ flamethrower: ["9L1"],
+ focusblast: ["9L1"],
+ icebeam: ["9L1"],
+ shadowball: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ thunder: ["9L1"],
+ thunderbolt: ["9L1"],
+ bubblebeam: ["9L1"],
+ echoedvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ incinerate: ["9L1"],
+ mudshot: ["9L1"],
+ mudslap: ["9L1"],
+ round: ["9L1"],
+ shockwave: ["9L1"],
+ snore: ["9L1"],
+ uproar: ["9L1"],
+ venoshock: ["9L1"],
+ watergun: ["9L1"],
+ waterpulse: ["9L1"],
+ whirlpool: ["9L1"],
+ curse: ["9L1"],
+ disable: ["9L1"],
+ glare: ["9L1"],
+ honeclaws: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roar: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ toxic: ["9L1"],
+ attract: ["9L1"],
+ charm: ["9L1"],
+ confide: ["9L1"],
+ defensecurl: ["9L1"],
+ doubleteam: ["9L1"],
+ endure: ["9L1"],
+ flatter: ["9L1"],
+ focusenergy: ["9L1"],
+ growl: ["9L1"],
+ helpinghand: ["9L1"],
+ mimic: ["9L1"],
+ quash: ["9L1"],
+ raindance: ["9L1"],
+ sandstorm: ["9L1"],
+ sleeptalk: ["9L1"],
+ sunnyday: ["9L1"],
+ supersonic: ["9L1"],
+ swagger: ["9L1"],
+ tailwhip: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ bisharpassassin: {
+ learnset: {
+ bodypress: ["9L1"],
+ brickbreak: ["9L1"],
+ drainpunch: ["9L1"],
+ dynamicpunch: ["9L1"],
+ facade: ["9L1"],
+ focuspunch: ["9L1"],
+ foulplay: ["9L1"],
+ hammerarm: ["9L1"],
+ headbutt: ["9L1"],
+ iceshard: ["9L1"],
+ icespinner: ["9L1"],
+ lowkick: ["9L1"],
+ machpunch: ["9L1"],
+ nightslash: ["9L1"],
+ poisonjab: ["9L1"],
+ sacredsword: ["9L1"],
+ shadowclaw: ["9L1"],
+ tripleaxel: ["9L1"],
+ xscissor: ["9L1"],
+ bulldoze: ["9L1"],
+ dig: ["9L1"],
+ falseswipe: ["9L1"],
+ feint: ["9L1"],
+ fling: ["9L1"],
+ furycutter: ["9L1"],
+ gigaimpact: ["9L1"],
+ guillotine: ["9L1"],
+ lowsweep: ["9L1"],
+ metalburst: ["9L1"],
+ metalclaw: ["9L1"],
+ retaliate: ["9L1"],
+ reversal: ["9L1"],
+ scratch: ["9L1"],
+ slash: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ upperhand: ["9L1"],
+ blizzard: ["9L1"],
+ focusblast: ["9L1"],
+ grassknot: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ hyperbeam: ["9L1"],
+ auroraveil: ["9L1"],
+ curse: ["9L1"],
+ detect: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ taunt: ["9L1"],
+ coaching: ["9L1"],
+ endure: ["9L1"],
+ leer: ["9L1"],
+ meanlook: ["9L1"],
+ metalsound: ["9L1"],
+ sandstorm: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ torment: ["9L1"],
+ wideguard: ["9L1"],
+ },
+ },
+ corviknightfalcon: {
+ learnset: {
+ acrobatics: ["9L1"],
+ bodypress: ["9L1"],
+ bodyslam: ["9L1"],
+ bravebird: ["9L1"],
+ closecombat: ["9L1"],
+ doubleedge: ["9L1"],
+ drillpeck: ["9L1"],
+ dualwingbeat: ["9L1"],
+ facade: ["9L1"],
+ knockoff: ["9L1"],
+ lowkick: ["9L1"],
+ powertrip: ["9L1"],
+ uturn: ["9L1"],
+ wildcharge: ["9L1"],
+ aerialace: ["9L1"],
+ fly: ["9L1"],
+ flyingpress: ["9L1"],
+ furyattack: ["9L1"],
+ gigaimpact: ["9L1"],
+ highjumpkick: ["9L1"],
+ peck: ["9L1"],
+ pluck: ["9L1"],
+ skyattack: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ airslash: ["9L1"],
+ focusblast: ["9L1"],
+ heatwave: ["9L1"],
+ hurricane: ["9L1"],
+ terablast: ["9L1"],
+ aircutter: ["9L1"],
+ hyperbeam: ["9L1"],
+ swift: ["9L1"],
+ agility: ["9L1"],
+ curse: ["9L1"],
+ defog: ["9L1"],
+ lightscreen: ["9L1"],
+ protect: ["9L1"],
+ reflect: ["9L1"],
+ rest: ["9L1"],
+ roost: ["9L1"],
+ substitute: ["9L1"],
+ tailwind: ["9L1"],
+ taunt: ["9L1"],
+ endure: ["9L1"],
+ faketears: ["9L1"],
+ leer: ["9L1"],
+ raindance: ["9L1"],
+ sandattack: ["9L1"],
+ scaryface: ["9L1"],
+ screech: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ swagger: ["9L1"],
+ },
+ },
+ krookodilequantum: {
+ learnset: {
+ bodyslam: ["9L1"],
+ brickbreak: ["9L1"],
+ doubleshock: ["9L1"],
+ doubleedge: ["9L1"],
+ dragontail: ["9L1"],
+ earthquake: ["9L1"],
+ endeavor: ["9L1"],
+ facade: ["9L1"],
+ flamecharge: ["9L1"],
+ focuspunch: ["9L1"],
+ headsmash: ["9L1"],
+ knockoff: ["9L1"],
+ powertrip: ["9L1"],
+ rockblast: ["9L1"],
+ scaleshot: ["9L1"],
+ stoneedge: ["9L1"],
+ volttackle: ["9L1"],
+ aerialace: ["9L1"],
+ bite: ["9L1"],
+ breakingswipe: ["9L1"],
+ counter: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ takedown: ["9L1"],
+ thief: ["9L1"],
+ thrash: ["9L1"],
+ discharge: ["9L1"],
+ dragonpulse: ["9L1"],
+ electroshot: ["9L1"],
+ flamethrower: ["9L1"],
+ inferno: ["9L1"],
+ meteorbeam: ["9L1"],
+ powergem: ["9L1"],
+ sludgebomb: ["9L1"],
+ terablast: ["9L1"],
+ thunderbolt: ["9L1"],
+ voltswitch: ["9L1"],
+ weatherball: ["9L1"],
+ burningjealousy: ["9L1"],
+ electroball: ["9L1"],
+ ember: ["9L1"],
+ firespin: ["9L1"],
+ hyperbeam: ["9L1"],
+ incinerate: ["9L1"],
+ snarl: ["9L1"],
+ curse: ["9L1"],
+ encore: ["9L1"],
+ memento: ["9L1"],
+ partingshot: ["9L1"],
+ protect: ["9L1"],
+ recover: ["9L1"],
+ rest: ["9L1"],
+ stealthrock: ["9L1"],
+ substitute: ["9L1"],
+ switcheroo: ["9L1"],
+ taunt: ["9L1"],
+ thunderwave: ["9L1"],
+ charge: ["9L1"],
+ conversion: ["9L1"],
+ conversion2: ["9L1"],
+ eerieimpulse: ["9L1"],
+ electricterrain: ["9L1"],
+ endure: ["9L1"],
+ helpinghand: ["9L1"],
+ leer: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ sunnyday: ["9L1"],
+ swagger: ["9L1"],
+ torment: ["9L1"],
+ },
+ },
+ ogerponkitsune: {
+ learnset: {
+ aquastep: ["9L1"],
+ blazekick: ["9L1"],
+ facade: ["9L1"],
+ knockoff: ["9L1"],
+ powerwhip: ["9L1"],
+ rocktomb: ["9L1"],
+ shadowsneak: ["9L1"],
+ uturn: ["9L1"],
+ zingzap: ["9L1"],
+ astonish: ["9L1"],
+ falseswipe: ["9L1"],
+ fling: ["9L1"],
+ gigaimpact: ["9L1"],
+ phantomforce: ["9L1"],
+ retaliate: ["9L1"],
+ slam: ["9L1"],
+ takedown: ["9L1"],
+ aurasphere: ["9L1"],
+ dazzlinggleam: ["9L1"],
+ earthpower: ["9L1"],
+ flashcannon: ["9L1"],
+ powergem: ["9L1"],
+ shadowball: ["9L1"],
+ terablast: ["9L1"],
+ weatherball: ["9L1"],
+ disarmingvoice: ["9L1"],
+ hyperbeam: ["9L1"],
+ icywind: ["9L1"],
+ protect: ["9L1"],
+ rest: ["9L1"],
+ substitute: ["9L1"],
+ transform: ["9L1"],
+ trickroom: ["9L1"],
+ babydolleyes: ["9L1"],
+ charm: ["9L1"],
+ confuseray: ["9L1"],
+ endure: ["9L1"],
+ focusenergy: ["9L1"],
+ followme: ["9L1"],
+ gravity: ["9L1"],
+ growth: ["9L1"],
+ helpinghand: ["9L1"],
+ imprison: ["9L1"],
+ magicroom: ["9L1"],
+ metronome: ["9L1"],
+ mistyterrain: ["9L1"],
+ scaryface: ["9L1"],
+ sleeptalk: ["9L1"],
+ spite: ["9L1"],
+ },
+ },
+};
diff --git a/data/mods/sixbysix/pokedex.ts b/data/mods/sixbysix/pokedex.ts
new file mode 100644
index 0000000000..a06fef7146
--- /dev/null
+++ b/data/mods/sixbysix/pokedex.ts
@@ -0,0 +1,542 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ kingdra: {
+ inherit: true,
+ otherFormes: ["Kingdra-Classic", "Kingdra-Brinepool", "Kingdra-Druid", "Kingdra-Bard", "Kingdra-Gourmet", "Kingdra-Ancient"],
+ formeOrder: ["Kingdra", "Kingdra-Classic", "Kingdra-Brinepool", "Kingdra-Druid", "Kingdra-Bard", "Kingdra-Gourmet", "Kingdra-Ancient"],
+ },
+ kingdraclassic: {
+ num: 230,
+ name: "Kingdra-Classic",
+ baseSpecies: "Kingdra",
+ forme: "Classic",
+ types: ["Water", "Dragon"],
+ baseStats: { hp: 90, atk: 70, def: 80, spa: 130, spd: 90, spe: 90 },
+ abilities: { 0: "Berserk", 1: "Heatproof", H: "Dry Skin" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ kingdrabrinepool: {
+ num: 230,
+ name: "Kingdra-Brinepool",
+ baseSpecies: "Kingdra",
+ forme: "Brinepool",
+ types: ["Water", "Poison"],
+ baseStats: { hp: 130, atk: 35, def: 105, spa: 130, spd: 85, spe: 65 },
+ abilities: { 0: "Storm Drain", 1: "Purifying Salt", H: "Dry Skin" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ kingdradruid: {
+ num: 230,
+ name: "Kingdra-Druid",
+ baseSpecies: "Kingdra",
+ forme: "Druid",
+ types: ["Steel", "Dragon"],
+ baseStats: { hp: 105, atk: 65, def: 90, spa: 120, spd: 120, spe: 50 },
+ abilities: { 0: "Berserk", 1: "Heatproof", H: "Water Absorb" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ kingdrabard: {
+ num: 230,
+ name: "Kingdra-Bard",
+ baseSpecies: "Kingdra",
+ forme: "Bard",
+ types: ["Water", "Fairy"],
+ baseStats: { hp: 90, atk: 70, def: 80, spa: 130, spd: 100, spe: 80 },
+ abilities: { 0: "Punk Rock", 1: "Cute Charm", H: "Dancer" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ kingdragourmet: {
+ num: 230,
+ name: "Kingdra-Gourmet",
+ baseSpecies: "Kingdra",
+ forme: "Gourmet",
+ types: ["Normal", "Dragon"],
+ baseStats: { hp: 110, atk: 110, def: 80, spa: 90, spd: 100, spe: 60 },
+ abilities: { 0: "Emergency Exit", 1: "Thick Fat", H: "Poison Heal" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ kingdraancient: {
+ num: 230,
+ name: "Kingdra-Ancient",
+ baseSpecies: "Kingdra",
+ forme: "Ancient",
+ types: ["Fire", "Grass"],
+ baseStats: { hp: 89, atk: 89, def: 91, spa: 111, spd: 91, spe: 79 },
+ abilities: { 0: "Competitive", 1: "Heatproof", H: "Protosynthesis" },
+ heightm: 1.8,
+ weightkg: 152,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Water 1", "Dragon"],
+ },
+ nidoqueen: {
+ inherit: true,
+ otherFormes: ["Nidoqueen-Classic", "Nidoqueen-Erudite", "Nidoqueen-Volcanic", "Nidoqueen-Rosegold", "Nidoqueen-Shaman", "Nidoqueen-Jasper"],
+ formeOrder: ["Nidoqueen", "Nidoqueen-Classic", "Nidoqueen-Erudite", "Nidoqueen-Volcanic", "Nidoqueen-Rosegold", "Nidoqueen-Shaman", "Nidoqueen-Jasper"],
+ },
+ nidoqueenclassic: {
+ num: 31,
+ name: "Nidoqueen-Classic",
+ baseSpecies: "Nidoqueen",
+ forme: "Classic",
+ types: ["Poison", "Ground"],
+ gender: "F",
+ baseStats: { hp: 135, atk: 115, def: 60, spa: 90, spd: 85, spe: 55 },
+ abilities: { 0: "Poison Point", 1: "Cheek Pouch", H: "Serene Grace" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ nidoqueenerudite: {
+ num: 31,
+ name: "Nidoqueen-Erudite",
+ baseSpecies: "Nidoqueen",
+ forme: "Erudite",
+ types: ["Psychic", "Ground"],
+ gender: "F",
+ baseStats: { hp: 95, atk: 100, def: 80, spa: 115, spd: 110, spe: 40 },
+ abilities: { 0: "Cute Charm", 1: "Regenerator", H: "Serene Grace" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ nidoqueenvolcanic: {
+ num: 31,
+ name: "Nidoqueen-Volcanic",
+ baseSpecies: "Nidoqueen",
+ forme: "Volcanic",
+ types: ["Fire", "Ground"],
+ gender: "F",
+ baseStats: { hp: 125, atk: 75, def: 100, spa: 110, spd: 75, spe: 55 },
+ abilities: { 0: "Flame Body", 1: "Cheek Pouch", H: "Sheer Force" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ nidoqueenrosegold: {
+ num: 31,
+ name: "Nidoqueen-Rosegold",
+ baseSpecies: "Nidoqueen",
+ forme: "Rosegold",
+ types: ["Poison", "Grass"],
+ gender: "F",
+ baseStats: { hp: 125, atk: 70, def: 100, spa: 100, spd: 85, spe: 60 },
+ abilities: { 0: "Rough Skin", 1: "Cheek Pouch", H: "Shield Dust" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ nidoqueenshaman: {
+ num: 31,
+ name: "Nidoqueen-Shaman",
+ baseSpecies: "Nidoqueen",
+ forme: "Shaman",
+ types: ["Poison", "Ghost"],
+ gender: "F",
+ baseStats: { hp: 95, atk: 120, def: 60, spa: 90, spd: 80, spe: 95 },
+ abilities: { 0: "Toxic Chain", 1: "Regenerator", H: "Sheer Force" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ nidoqueenjasper: {
+ num: 31,
+ name: "Nidoqueen-Jasper",
+ baseSpecies: "Nidoqueen",
+ forme: "Jasper",
+ types: ["Poison", "Rock"],
+ gender: "F",
+ baseStats: { hp: 135, atk: 125, def: 70, spa: 80, spd: 85, spe: 45 },
+ abilities: { 0: "Clear Body", 1: "Earth Eater", H: "Sand Stream" },
+ heightm: 1.3,
+ weightkg: 60,
+ color: "Blue",
+ prevo: '',
+ eggGroups: ["Undiscovered"],
+ },
+ bisharp: {
+ inherit: true,
+ otherFormes: ["Bisharp-Centurion", "Bisharp-Savage", "Bisharp-Ronin", "Bisharp-Mantis", "Bisharp-Revenant", "Bisharp-Assassin"],
+ formeOrder: ["Bisharp", "Bisharp-Centurion", "Bisharp-Savage", "Bisharp-Ronin", "Bisharp-Mantis", "Bisharp-Revenant", "Bisharp-Assassin"],
+ },
+ bisharpcenturion: {
+ num: 625,
+ name: "Bisharp-Centurion",
+ baseSpecies: "Bisharp",
+ forme: "Centurion",
+ types: ["Fighting", "Steel"],
+ baseStats: { hp: 70, atk: 140, def: 115, spa: 55, spd: 70, spe: 70 },
+ abilities: { 0: "Overcoat", 1: "Technician", H: "Solar Power" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ bisharpsavage: {
+ num: 625,
+ name: "Bisharp-Savage",
+ baseSpecies: "Bisharp",
+ forme: "Savage",
+ types: ["Grass", "Steel"],
+ baseStats: { hp: 90, atk: 110, def: 135, spa: 40, spd: 80, spe: 65 },
+ abilities: { 0: "Bulletproof", 1: "Technician", H: "Leaf Guard" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ bisharpronin: {
+ num: 625,
+ name: "Bisharp-Ronin",
+ baseSpecies: "Bisharp",
+ forme: "Ronin",
+ types: ["Fighting", "Poison"],
+ baseStats: { hp: 70, atk: 115, def: 110, spa: 45, spd: 70, spe: 110 },
+ abilities: { 0: "Overcoat", 1: "Technician", H: "Dry Skin" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ bisharpmantis: {
+ num: 625,
+ name: "Bisharp-Mantis",
+ baseSpecies: "Bisharp",
+ forme: "Mantis",
+ types: ["Dark", "Bug"],
+ baseStats: { hp: 80, atk: 120, def: 105, spa: 45, spd: 85, spe: 85 },
+ abilities: { 0: "Overcoat", 1: "Sharpness", H: "Orichalcum Pulse" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ bisharprevenant: {
+ num: 625,
+ name: "Bisharp-Revenant",
+ baseSpecies: "Bisharp",
+ forme: "Revenant",
+ types: ["Ghost", "Steel"],
+ baseStats: { hp: 80, atk: 135, def: 120, spa: 45, spd: 70, spe: 70 },
+ abilities: { 0: "Magic Bounce", 1: "Mirror Armor", H: "Justified" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ bisharpassassin: {
+ num: 625,
+ name: "Bisharp-Assassin",
+ baseSpecies: "Bisharp",
+ forme: "Assassin",
+ types: ["Fighting", "Ice"],
+ baseStats: { hp: 80, atk: 130, def: 110, spa: 55, spd: 70, spe: 75 },
+ abilities: { 0: "Dazzling", 1: "No Guard", H: "Slush Rush" },
+ heightm: 1.6,
+ weightkg: 70,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Human-Like"],
+ },
+ corviknight: {
+ inherit: true,
+ otherFormes: ["Corviknight-Thunderbird", "Corviknight-Genie", "Corviknight-Yeti", "Corviknight-Analytical", "Corviknight-Martian", "Corviknight-Falcon"],
+ formeOrder: ["Corviknight", "Corviknight-Thunderbird", "Corviknight-Genie", "Corviknight-Yeti", "Corviknight-Analytical", "Corviknight-Martian", "Corviknight-Falcon"],
+ },
+ corviknightthunderbird: {
+ num: 823,
+ name: "Corviknight-Thunderbird",
+ baseSpecies: "Corviknight",
+ forme: "Thunderbird",
+ types: ["Flying", "Electric"],
+ baseStats: { hp: 85, atk: 55, def: 105, spa: 115, spd: 85, spe: 85 },
+ abilities: { 0: "Pickpocket", 1: "Quick Feet", H: "Drizzle" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ corviknightgenie: {
+ num: 823,
+ name: "Corviknight-Genie",
+ baseSpecies: "Corviknight",
+ forme: "Genie",
+ types: ["Flying", "Ground"],
+ baseStats: { hp: 89, atk: 45, def: 95, spa: 120, spd: 90, spe: 91 },
+ abilities: { 0: "Intimidate", 1: "Sand Force", H: "Prankster" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ corviknightyeti: {
+ num: 823,
+ name: "Corviknight-Yeti",
+ baseSpecies: "Corviknight",
+ forme: "Yeti",
+ types: ["Flying", "Ice"],
+ baseStats: { hp: 85, atk: 55, def: 80, spa: 95, spd: 110, spe: 110 },
+ abilities: { 0: "Mummy", 1: "Quick Feet", H: "Snow Warning" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ corviknightanalytical: {
+ num: 823,
+ name: "Corviknight-Analytical",
+ baseSpecies: "Corviknight",
+ forme: "Analytical",
+ types: ["Psychic", "Electric"],
+ baseStats: { hp: 85, atk: 55, def: 80, spa: 110, spd: 85, spe: 115 },
+ abilities: { 0: "Pickpocket", 1: "Flare Boost", H: "Psychic Surge" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ corviknightmartian: {
+ num: 823,
+ name: "Corviknight-Martian",
+ baseSpecies: "Corviknight",
+ forme: "Martian",
+ types: ["Psychic", "Steel"],
+ baseStats: { hp: 95, atk: 45, def: 120, spa: 100, spd: 105, spe: 65 },
+ abilities: { 0: "Iron Barbs", 1: "Quick Feet", H: "Hadron Engine" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ corviknightfalcon: {
+ num: 823,
+ name: "Corviknight-Falcon",
+ baseSpecies: "Corviknight",
+ forme: "Falcon",
+ types: ["Flying", "Fighting"],
+ baseStats: { hp: 86, atk: 95, def: 75, spa: 75, spd: 85, spe: 114 },
+ abilities: { 0: "Pickpocket", 1: "Guts", H: "Delta Stream" },
+ heightm: 2.2,
+ weightkg: 75,
+ color: "Purple",
+ prevo: '',
+ eggGroups: ["Flying"],
+ },
+ krookodile: {
+ inherit: true,
+ otherFormes: ["Krookodile-Infernal", "Krookodile-Abyssal", "Krookodile-Wetlander", "Krookodile-Cave Dweller", "Krookodile-Cliffside", "Krookodile-Quantum"],
+ formeOrder: ["Krookodile", "Krookodile-Infernal", "Krookodile-Abyssal", "Krookodile-Wetlander", "Krookodile-Cave Dweller", "Krookodile-Cliffside", "Krookodile-Quantum"],
+ },
+ krookodileinfernal: {
+ num: 553,
+ name: "Krookodile-Infernal",
+ baseSpecies: "Krookodile",
+ forme: "Infernal",
+ types: ["Fire", "Dark"],
+ baseStats: { hp: 90, atk: 80, def: 85, spa: 105, spd: 90, spe: 100 },
+ abilities: { 0: "Magic Guard", 1: "Wonder Skin", H: "Sturdy" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ krookodileabyssal: {
+ num: 553,
+ name: "Krookodile-Abyssal",
+ baseSpecies: "Krookodile",
+ forme: "Abyssal",
+ types: ["Ground", "Dark"],
+ baseStats: { hp: 90, atk: 120, def: 85, spa: 75, spd: 90, spe: 90 },
+ abilities: { 0: "Rock Head", 1: "Wonder Skin", H: "Multiscale" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ krookodilewetlander: {
+ num: 553,
+ name: "Krookodile-Wetlander",
+ baseSpecies: "Krookodile",
+ forme: "Wetlander",
+ types: ["Grass", "Water"],
+ baseStats: { hp: 100, atk: 100, def: 75, spa: 85, spd: 110, spe: 80 },
+ abilities: { 0: "Rock Head", 1: "Wonder Skin", H: "Wind Rider" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ krookodilecavedweller: {
+ num: 553,
+ name: "Krookodile-Cave Dweller",
+ baseSpecies: "Krookodile",
+ forme: "Cave Dweller",
+ types: ["Fire", "Rock"],
+ baseStats: { hp: 80, atk: 110, def: 75, spa: 85, spd: 80, spe: 120 },
+ abilities: { 0: "Magic Guard", 1: "Wonder Skin", H: "Sturdy" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ krookodilecliffside: {
+ num: 553,
+ name: "Krookodile-Cliffside",
+ baseSpecies: "Krookodile",
+ forme: "Cliffside",
+ types: ["Dragon", "Dark"],
+ baseStats: { hp: 90, atk: 70, def: 85, spa: 115, spd: 80, spe: 110 },
+ abilities: { 0: "Intimidate", 1: "Merciless", H: "Mold Breaker" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ krookodilequantum: {
+ num: 553,
+ name: "Krookodile-Quantum",
+ baseSpecies: "Krookodile",
+ forme: "Quantum",
+ types: ["Electric", "Rock"],
+ baseStats: { hp: 95, atk: 100, def: 85, spa: 85, spd: 85, spe: 100 },
+ abilities: { 0: "Rock Head", 1: "Prankster", H: "Sturdy" },
+ heightm: 1.5,
+ weightkg: 96.3,
+ color: "Red",
+ prevo: '',
+ eggGroups: ["Field"],
+ },
+ ogerpon: {
+ inherit: true,
+ otherFormes: ["Ogerpon-Muerta", "Ogerpon-Easter", "Ogerpon-Ankh", "Ogerpon-Eid", "Ogerpon-Vessel", "Ogerpon-Kitsune"],
+ formeOrder: ["Ogerpon", "Ogerpon-Muerta", "Ogerpon-Easter", "Ogerpon-Ankh", "Ogerpon-Eid", "Ogerpon-Vessel", "Ogerpon-Kitsune"],
+ },
+ ogerponmuerta: {
+ num: 1017,
+ name: "Ogerpon-Muerta",
+ baseSpecies: "Ogerpon",
+ forme: "Muerta",
+ types: ["Fairy", "Ghost"],
+ gender: "F",
+ baseStats: { hp: 90, atk: 120, def: 70, spa: 100, spd: 90, spe: 130 },
+ abilities: { 0: "Wandering Spirit" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+ ogerponeaster: {
+ num: 1017,
+ name: "Ogerpon-Easter",
+ baseSpecies: "Ogerpon",
+ forme: "Easter",
+ types: ["Fairy", "Normal"],
+ gender: "F",
+ baseStats: { hp: 105, atk: 95, def: 95, spa: 110, spd: 80, spe: 115 },
+ abilities: { 0: "Pickpocket" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+ ogerponankh: {
+ num: 1017,
+ name: "Ogerpon-Ankh",
+ baseSpecies: "Ogerpon",
+ forme: "Ankh",
+ types: ["Ghost"],
+ gender: "F",
+ baseStats: { hp: 85, atk: 130, def: 70, spa: 130, spd: 90, spe: 95 },
+ abilities: { 0: "Mummy", H: "Good as Gold" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+ ogerponeid: {
+ num: 1017,
+ name: "Ogerpon-Eid",
+ baseSpecies: "Ogerpon",
+ forme: "Eid",
+ types: ["Water", "Ghost"],
+ gender: "F",
+ baseStats: { hp: 95, atk: 98, def: 100, spa: 105, spd: 110, spe: 92 },
+ abilities: { 0: "Tangling Hair" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+ ogerponvessel: {
+ num: 1017,
+ name: "Ogerpon-Vessel",
+ baseSpecies: "Ogerpon",
+ forme: "Vessel",
+ types: ["Bug", "Fighting"],
+ gender: "F",
+ baseStats: { hp: 95, atk: 115, def: 80, spa: 80, spd: 80, spe: 150 },
+ abilities: { 0: "Trace" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+ ogerponkitsune: {
+ num: 1017,
+ name: "Ogerpon-Kitsune",
+ baseSpecies: "Ogerpon",
+ forme: "Kitsune",
+ types: ["Fairy"],
+ gender: "F",
+ baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 },
+ abilities: { 0: "Protean" },
+ heightm: 1.2,
+ weightkg: 39.8,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ },
+};
diff --git a/data/mods/sixbysix/rulesets.ts b/data/mods/sixbysix/rulesets.ts
new file mode 100644
index 0000000000..6b2be5e210
--- /dev/null
+++ b/data/mods/sixbysix/rulesets.ts
@@ -0,0 +1,17 @@
+export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ spriteviewer: {
+ effectType: 'ValidatorRule',
+ name: 'Sprite Viewer',
+ desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
+ onBegin() {
+ this.add('rule', 'Sprite Viewer: Displays sprites in chat');
+ },
+ onSwitchIn(pokemon) {
+ if (!this.effectState[pokemon.species.id]) {
+ this.add('-message', `${pokemon.species.name}'s Sprite:`);
+ this.add(`raw|
`);
+ this.effectState[pokemon.species.id] = true;
+ }
+ },
+ },
+};
diff --git a/data/mods/scootopiav2/scripts.ts b/data/mods/sixbysix/scripts.ts
similarity index 95%
rename from data/mods/scootopiav2/scripts.ts
rename to data/mods/sixbysix/scripts.ts
index 49611260ed..4346dd0db2 100644
--- a/data/mods/scootopiav2/scripts.ts
+++ b/data/mods/sixbysix/scripts.ts
@@ -1,3 +1,3 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 9,
-};
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+};
diff --git a/data/random-battles/scootopiav2/random-sets.json b/data/random-battles/scootopiav2/random-sets.json
deleted file mode 100644
index 1812a60a0b..0000000000
--- a/data/random-battles/scootopiav2/random-sets.json
+++ /dev/null
@@ -1,856 +0,0 @@
-{
- "albatrygon": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Sticky Web", "Taunt", "Encore", "Brave Bird", "Memento", "Parting Shot"],
- "abilities": ["Prankster"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Tidy Up", "Brave Bird", "Drill Peck", "Feral Rush", "Feral Bite", "Sacred Sword"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "aurorowl": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Frost Breath", "Air Cutter", "Focus Blast", "Nasty Plot"],
- "abilities": ["Technician"]
- }
- ]
- },
- "arbrella": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Earthquake", "Wood Hammer", "Swords Dance", "Synthesis", "Stone Edge", "Superpower"],
- "abilities": ["Tough Claws"]
- },
- {
- "role": "Choice Scarf",
- "movepool": ["Earthquake", "Wood Hammer", "Stone Edge", "Superpower"],
- "abilities": ["Tough Claws"]
- }
- ]
- },
- "avastar": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Thunder Wave", "Heavy Slam", "Psychic", "Recover", "Teleport"],
- "abilities": ["Shell Bunker"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Psychic", "Flash Cannon", "Recover", "Thunderbolt"],
- "abilities": ["Shell Bunker"]
- }
- ]
- },
- "axolacred": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Stealth Rock", "Dragon Tail", "Roost", "Core Enforcer", "Scald", "Defog", "Shed Tail"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Feral Rush", "Core Enforcer", "Flip Turn", "Recover"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "barracoth": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Sheer Cold", "Flip Turn", "Triple Axel", "Slack Off"],
- "abilities": ["Multiscale", "Filter"]
- }
- ]
- },
- "blunderbusk": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Hydro Pump", "Aura Sphere", "Ice Beam", "Dark Pulse", "Dragon Pulse"],
- "abilities": ["Mega Launcher"]
- }
- ]
- },
- "brawnkey": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Stealth Rock", "Drain Punch", "Iron Head", "Chilly Reception", "Spikes"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Iron Defense", "Body Press", "Iron Head", "Stealth Rock"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Bulk Up", "Drain Punch", "Iron Head", "Stealth Rock"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "carapex": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Tailwind", "Acrobatics", "Earthquake", "Stone Edge"],
- "abilities": ["Wind Rider"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Stealth Rock", "Roost", "Body Press", "Knock Off", "Crystal Bash", "U-Turn"],
- "abilities": ["Wind Rider"]
- }
- ]
- },
- "celespirit": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Sheer Cold", "Moonlight", "Hex", "Ice Beam", "Moonblast"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Crystal Burst", "Shadow Ball", "Moonlight"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "cellsius": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Hydro Pump", "Moonblast", "Ice Beam", "Psychic"],
- "abilities": ["Beast Boost"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Hydro Pump", "Moonblast", "Ice Beam", "Flip Turn", "Psychic"],
- "abilities": ["Beast Boost"]
- }
- ]
- },
- "cindoe": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Overheat", "Fiery Wrath", "Parting Shot", "Morning Sun"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Nasty Plot", "Fiery Wrath", "Fire Blast", "Morning Sun"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Setup Sweeper",
-
- "movepool": ["Nasty Plot", "Fiery Wrath", "Crystal Burst", "Morning Sun"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "cinnastar": {
- "level": 100,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["Sludge Bomb", "Earth Power", "Focus Blast", "Mortal Spin"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Earth Power", "Mortal Spin", "Recover", "Stealth Rock", "Power Gem"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "cobracotta": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Poison Fang", "Leech Seed", "Knock Off", "Synthesis", "Stealth Rock", "Power Whip"],
- "abilities": ["Heatproof"]
- }
- ]
- },
- "corundell": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Meteor Beam", "Power Gem", "Overheat", "Earth Power", "Volt Switch", "Energy Ball"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "crossont": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Spikes", "Recover", "Knock Off", "Circle Throw"],
- "abilities": ["Mold Breaker", "Sniper"]
- },
- {
- "role": "Bulky Attacker",
-
- "movepool": ["Crystal Cutter", "Close Combat", "Bulk Up", "Substitute"],
- "abilities": ["Sniper"]
- }
- ]
- },
- "cyllindrake": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Body Press", "Rapid Spin", "Morning Sun", "Stealth Rock", "Boomburst"],
- "abilities": ["Scrappy"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Stealth Rock", "Rapid Spin", "Steel Beam", "Fire Blast"],
- "abilities": ["Scrappy"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Feral Shriek", "Flash Cannon", "Earth Power", "Feral Spray", "Rapid Spin"],
- "abilities": ["Punk Rock"]
- }
- ]
- },
- "dojodo": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Bulk Up", "Drain Punch", "Jet Punch", "Knock Off", "Substitute"],
- "abilities": ["Supreme Overlord"]
- },
- {
- "role": "Setup Sweeper",
-
- "movepool": ["Bulk Up", "Drain Punch", "Crystal Bash", "Jet Punch", "Crystal Healing"],
- "abilities": ["Supreme Overlord"]
- }
- ]
- },
- "dolphena": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Coil", "Scale Shot", "Iron Tail", "Liquidation"],
- "abilities": ["Mythical Presence"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Scale Shot", "Liquidation", "Iron Head", "Substitute"],
- "abilities": ["Mythical Presence"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Coil", "Scale Shot", "Iron Tail", "Liquidation"],
-
- "abilities": ["Mythical Presence"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Defog", "Flip Turn", "Moonlight", "Dragon Tail"],
- "abilities": ["Mythical Presence"]
- }
- ]
- },
- "dracoil": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Defog", "Roost", "U-Turn", "Hurricane", "Fire Blast", "Glare", "Draco Meteor", "Earthquake"],
- "abilities": ["Mythical Presence"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Acrobatics", "Substitute", "Earthquake"],
- "abilities": ["Gluttony"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Dragon Rush", "Coil", "Earthquake", "Dual Wingbeat"],
- "abilities": ["Mythical Presence"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Feral Bite", "Dragon Tail", "Roost", "Glare", "Defog"],
- "abilities": ["Mythical Presence"]
- }
- ]
- },
- "efflor": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Giga Drain", "Leech Seed", "Rapid Spin", "Stealth Rock", "Chilly Reception"],
- "abilities": ["Seed Sower"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Curse", "Stone Edge", "Body Press", "Synthesis"],
- "abilities": ["Unaware"]
- }
- ]
- },
- "electangle": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Gyro Ball", "Stealth Rock", "Body Press", "Volt Switch", "Discharge"],
- "abilities": ["Filter"]
- }
- ]
- },
- "elemadillo": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Flash Cannon", "Thunderbolt", "Volt Switch", "Energy Ball"],
- "abilities": ["Motor Drive", "Weak Armor"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Feral Power", "Flash Cannon", "Earth Power", "Feral Resilience"],
- "abilities": ["Motor Drive", "Weak Armor"]
- }
- ]
- },
- "embuck": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Blaze Kick", "Will-o-Wisp", "Morning Sun", "U-Turn", "Close Combat"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Blaze Kick", "Crystal Bash", "Will-o-Wisp", "Morning Sun", "U-Turn"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Flare Blitz", "Wild Charge", "U-Turn", "Close Combat"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "faerenheit": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Lava Plume", "Moonblast", "Morning Sun"],
- "abilities": ["Beast Boost"]
- },
- {
- "role": "Bulky Setup",
-
- "movepool": ["Calm Mind", "Lava Plume", "Crystal Cage", "Morning Sun"],
- "abilities": ["Beast Boost"]
- }
- ]
- },
- "fenreil": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Double Edge", "Knock Off", "Superpower", "U-Turn"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Feral Bite", "Knock Off", "Iron Head", "Feral Shred"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "flocura": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Stealth Rock", "Thunder Wave", "U-Turn", "Leaf Storm"],
- "abilities": ["Power Construct"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Nasty Plot", "Giga Drain", "Psychic", "Earth Power"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
-
- "movepool": ["Nasty Plot", "Giga Drain", "Feral Power", "Earth Power"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Leaf Storm", "U-Turn", "Psychic", "Earth Power"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Leech Seed", "U-Turn", "Thunder Wave", "Psychic", "Giga Drain", "Stealth Rock"],
- "abilities": ["Power Construct"]
- }
- ]
- },
- "harzodia": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Light Screen", "Reflect", "Teleport", "Thunder Wave", "Psychic"],
- "abilities": ["Prankster"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Meteor Beam", "Psychic", "Shadow Ball", "Calm Mind", "Focus Blast"],
- "abilities": ["Unburden"]
- }
- ]
- },
- "jaegorm": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["First Impression", "U-Turn", "Photon Ray", "Knock Off", "Superpower", "Earthquake"],
- "abilities": ["Schooling"]
- }
- ]
- },
- "jamborai": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Mortal Spin", "Recover", "Pyschic", "Scald", "Teleport"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Recover", "Pyschic", "Scald", "Sludge Bomb", "Stored Power"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Mortal Spin", "Recover", "Crystal Cage", "Crystal Healing", "Teleport"],
- "abilities": ["Gooey"]
- },
- {
- "role": "Bulky Setup",
-
- "movepool": ["Crystal Fortification", "Recover", "Stored Power", "Crystal Beam"],
- "abilities": ["Gooey"]
- }
- ]
- },
- "kodokai": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
-
- "movepool": ["Crystal Cage", "Hex", "Will-o-Wisp", "Moonlight"],
- "abilities": ["Aroma Veil"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Wish", "Hex", "Will-o-Wisp", "Moonlight"],
- "abilities": ["Aroma Veil"]
- }
- ]
- },
- "krachiten": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["First Impression", "U-Turn", "Liquidation", "Rapid Spin"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Crystal Cutter", "U-Turn", "Aqua Cutter", "Superpower", "Rapid Spin"],
- "abilities": ["Sniper"]
- }
- ]
- },
- "lumoth": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Quiver Dance", "Hex", "Sleep Powder", "Bug Buzz"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "minillow": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Nasty Plot", "Agility", "Hydro Pump", "Moonblast", "Substitute"],
- "abilities": ["Adaptability"]
- }
- ]
- },
- "muabboa": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Earthquake", "U-Turn", "Close Combat", "Knock Off"],
- "abilities": ["Inner Focus"]
- },
- {
- "role": "Setup Sweeper",
-
- "movepool": ["Swords Dance", "Earthquake", "Feral Rush", "Close Combat"],
- "abilities": ["Inner Focus"]
- }
- ]
- },
- "noxtrice": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["Poison Jab", "Flare Blitz", "Roost", "U-Turn"],
- "abilities": ["Poison Touch"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Gunk Shot", "Flare Blitz", "Earthquake", "Dragon Dance"],
- "abilities": ["Poison Touch"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Gunk Shot", "Feral Rush", "Earthquake", "Dragon Dance"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "nunopod": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Earthquake", "Body Press", "Triple Axel", "Flip Turn", "Stealth Rock", "Rapid Spin", "Recover"],
- "abilities": ["Opportunist"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Crystal Bash", "Body Press", "Earthquake", "Flip Turn", "Stealth Rock", "Rapid Spin", "Recover"],
- "abilities": ["Opportunist"]
- }
- ]
- },
- "orchile": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Moonblast", "Earth Power", "Will-o-Wisp", "Strength Sap", "Spikes"],
- "abilities": ["Flower Veil"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Moonblast", "Earth Power", "Calm Mind", "Strength Sap"],
- "abilities": ["Flower Veil"]
- }
- ]
- },
- "platypad": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Revival Blessing", "Wave Crash", "Flip Turn", "Synthesis"],
- "abilities": ["Flower Veil"]
- },
- {
- "role": "Bulky Setup",
-
- "movepool": ["Feral Resilience", "Feral Breath", "Giga Drain", "Synthesis"],
- "abilities": ["Triage"]
- }
- ]
- },
- "pythos": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Coil", "Knock Off", "Iron Tail", "Sucker Punch", "Superpower", "Facade"],
- "abilities": ["Guts"]
- }
- ]
- },
- "quadringo": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Defog", "Roost", "Dragon Tail", "Earthquake", "Moonblast"],
- "abilities": ["Pastel Veil"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Moonblast", "Mystical Fire", "Roost"],
- "abilities": ["Pastel Veil"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Moonblast", "Draco Meteor", "Mystical Fire", "Earthquake"],
- "abilities": ["Pastel Veil"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Feral Rush", "Earthquake", "Feral Shred", "Roost"],
- "abilities": ["Pastel Veil"]
- }
- ]
- },
- "rantler": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Double Edge", "Ice Spinner", "Superpower", "Earthquake"],
- "abilities": ["Slush Rush"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Swords Dance", "Double Edge", "Ice Spinner", "Superpower", "Earthquake", "Quick Attack"],
- "abilities": ["Slush Rush"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Double Edge", "Ice Spinner", "Superpower", "Quick Attack", "Fake Out"],
- "abilities": ["Tough Claws"]
- }
- ]
- },
- "roscenti": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["First Impression", "U-Turn", "Superpower", "Rock Blast", "Bullet Seed"],
- "abilities": ["Skill Link"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["First Impression", "U-Turn", "Feral Rush", "Drill Run", "Iron Tail"],
- "abilities": ["Sheer Force"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["First Impression", "U-Turn", "Crystal Tail", "Superpower", "Rock Slide"],
- "abilities": ["Sheer Force"]
- }
- ]
- },
- "salamalix": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Stealth Rock", "Spikes", "Stone Edge", "Close Combat", "Iron Head"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Swords Dance", "Iron Head", "Close Combat", "Accelerock"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "salaos": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Toxic", "Recover", "Fiery Wrath", "Scald", "Flamethrower", "Toxic Spikes"],
- "abilities": ["Good as Gold"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Toxic", "Recover", "Crystal Cage", "Flamethrower", "Toxic Spikes"],
- "abilities": ["Good as Gold"]
- }
- ]
- },
- "saphor": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Stealth Rock", "Earthquake", "Body Slam", "Slack Off", "Roar", "Heal Bell"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Stealth Rock", "Crystal Tail", "Crystal Shard", "Slack Off", "Roar", "Crystal Healing"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Bulky Setup",
-
- "movepool": ["Bulk Up", "Crystal Cutter", "Slack Off", "Body Press"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Bulky Setup",
-
- "movepool": ["Calm Mind", "Crystal Cage", "Slack Off", "Focus Blast"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Headlong Rush", "Double Edge", "Heavy Slam", "Superpower", "Stone Edge"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "scalaron": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Flamethrower", "Hurricane", "Roost", "U-Turn", "Defog", "Toxic", "Will-o-Wisp"],
- "abilities": ["Filter"]
- },
- {
- "role": "Bulky Support",
-
- "movepool": ["Flamethrower", "Crystal Cage", "Roost", "U-Turn", "Defog", "Will-o-Wisp", "Crystal Shard"],
- "abilities": ["Filter"]
- }
- ]
- },
- "soleron": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Thunderbolt", "Hurricane", "Heat Wave", "U-Turn", "Air Slash", "Volt Switch", "Roost"],
- "abilities": ["Battle Bond"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Thunderbolt", "Feral Power", "Feral Spray", "Volt Switch", "Roost"],
-
- "abilities": ["Battle Bond"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Thunderbolt", "Crystal Burst", "Heat Wave", "Volt Switch", "Hurricane"],
-
- "abilities": ["Battle Bond"]
- }
- ]
- },
- "torgeist": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Toxic Thread", "Hex", "Hurricane", "Heat Wave", "Pain Split", "Taunt"],
- "abilities": ["Merciless"]
- },
- {
- "role": "Fast Attacker",
-
- "movepool": ["Toxic Thread", "Hex", "Feral Power", "Pain Split", "Taunt", "Nasty Plot"],
- "abilities": ["Merciless"]
- },
- {
- "role": "Setup Sweeper",
-
- "movepool": ["Will-o-Wisp", "Hex", "Feral Power", "Nasty Plot"],
- "abilities": ["Cursed Body"]
- }
- ]
- },
- "woolora": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Cotton Guard", "Stored Power", "Draining Kiss"],
- "abilities": ["Fluffy", "Pastel Veil"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Moonlight", "Stored Power", "Moonblast"],
- "abilities": ["Fluffy"]
- }
- ]
- },
- "zeploom": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Energy Siphon", "Synthesis", "Stealth Rock", "U-Turn", "Defog", "Toxic", "Earth Power"],
- "abilities": ["Wind Rider"]
- }
- ]
- }
-}
diff --git a/data/random-battles/sixbysix/random-sets.json b/data/random-battles/sixbysix/random-sets.json
new file mode 100644
index 0000000000..fe3959a1d6
--- /dev/null
+++ b/data/random-battles/sixbysix/random-sets.json
@@ -0,0 +1,557 @@
+{
+ "kingdraancient": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Fire Blast", "Agility", "Energy Ball", "Hydro Pump"],
+ "abilities": ["Protosynthesis"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Giga Drain", "Fire Blast", "Flip Turn", "Synthesis"],
+ "abilities": ["Competitive"]
+ }
+ ]
+ },
+ "kingdrabard": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hydro Pump", "Agility", "Psychic Noise", "Alluring Voice"],
+ "abilities": ["Punk Rock"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Hydro Pump", "Flip Turn", "Psychic Noise", "Alluring Voice"],
+ "abilities": ["Punk Rock"]
+ }
+ ]
+ },
+ "kingdrabrinepool": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Scald", "Protect", "Knock Off", "Mortal Spin"],
+ "abilities": ["Purifying Salt"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Hydro Pump", "Water Shuriken", "Sludge Wave", "Flip Turn"],
+ "abilities": ["Purifying Salt", "Storm Drain"]
+ }
+ ]
+ },
+ "kingdraclassic": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Hydro Pump", "Draco Meteor", "Agility", "Ice Beam"],
+ "abilities": ["Berserk"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Hydro Pump", "Draco Meteor", "Flip Turn", "Ice Beam"],
+ "abilities": ["Berserk"]
+ }
+ ]
+ },
+ "kingdradruid": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Tachyon Cutter", "Draco Meteor", "Flamethrower", "Ice Beam"],
+ "abilities": ["Berserk"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Tachyon Cutter", "Protect", "Flamethrower", "Calm Mind"],
+ "abilities": ["Berserk"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Doom Desire", "Parting Shot", "Draco Meteor", "Protect"],
+ "abilities": ["Berserk", "Heatproof"]
+ }
+ ]
+ },
+ "kingdragourmet": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Facade", "Baneful Bunker", "Knock Off", "Toxic"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Facade", "Fake Out", "Knock Off", "Flip Turn"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "nidoqueenclassic": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Barb Barrage", "Earthquake", "Spikes", "Slack Off"],
+ "abilities": ["Poison Point"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Poison Jab", "Earthquake", "Ice Punch", "Slack Off"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "nidoqueenerudite": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Earth Power", "Psychic", "Slack Off"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Trick Room", "Earth Power", "Psychic", "Ice Beam"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Future Sight", "Earth Power", "Roar", "Chilly Reception"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "nidoqueenjasper": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Salt Cure", "Earthquake", "Protect", "Glare"],
+ "abilities": ["Earth Eater"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Accelerock", "Earthquake", "Gunk Rock", "Stone Edge"],
+ "abilities": ["Earth Eater"]
+ }
+ ]
+ },
+ "nidoqueenrosegold": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Slack Off", "Giga Drain", "Earth Power", "Toxic Spikes"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Spiky Shield", "Earth Power", "Sludge Bomb", "Leech Seed"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "nidoqueenshaman": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Poltergeist", "Poison Jab", "Superpower", "Shadow Sneak"],
+ "abilities": ["Toxic Chain"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Poltergeist", "Poison Jab", "Earthquake", "Shadow Sneak"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "nidoqueenvolcanic": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Protect", "Lava Plume", "Earth Power", "Wish"],
+ "abilities": ["Flame Body"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Thunderbolt", "Fire Blast", "Earth Power", "Ice Beam"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Protect", "Fire Blast", "Earth Power", "Wish"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "bisharpassassin": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Triple Axel", "Dynamic Punch", "Parting Shot", "Ice Shard"],
+ "abilities": ["No Guard"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Triple Axel", "Dynamic Punch", "Curse", "Ice Shard"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "bisharpcenturion": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Punch", "Superpower", "Switcheroo", "Iron Head"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Bullet Punch", "Drain Punch", "Bulk Up", "Iron Head"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bullet Punch", "Drain Punch", "Swords Dance", "Iron Head"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "bisharpmantis": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Ceaseless Edge", "Leech Life", "First Impression", "Bitter Blade"],
+ "abilities": ["Orichalcum Pulse"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Sucker Punch", "Leech Life", "Swords Dance", "Bitter Blade"],
+ "abilities": ["Orichalcum Pulse"]
+ }
+ ]
+ },
+ "bisharprevenant": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Recover", "Shadow Sneak", "Sacred Sword", "Poltergeist"],
+ "abilities": ["Magic Bounce"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Recover", "Shadow Sneak", "Swords Dance", "Behemoth Blade"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "bisharpronin": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Barb Barrage", "U-turn", "Sacred Sword", "Stealth Rock"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Barb Barrage", "U-turn", "Sacred Sword", "Bulldoze"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "bisharpsavage": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Leech Seed", "Bullet Punch", "Power Whip", "Thunder Wave"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Bullet Punch", "Power Whip", "Body Press"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "corviknightanalytical": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Psychic", "Thunderbolt", "U-turn", "Heat Wave"],
+ "abilities": ["Psychic Surge"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Reflect", "Light Screen", "U-turn", "Psychic"],
+ "abilities": ["Psychic Surge"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Psychic", "Thunderbolt", "Calm Mind", "Heat Wave"],
+ "abilities": ["Psychic Surge"]
+ }
+ ]
+ },
+ "corviknightfalcon": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Close Combat", "U-turn", "Knock Off"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Reflect", "Light Screen", "U-turn", "Taunt"],
+ "abilities": ["Delta Stream"]
+ }
+ ]
+ },
+ "corviknightgenie": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Earth Power", "Calm Mind", "Heat Wave", "Rest"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Scorching Sands", "U-turn", "Heat Wave", "Thunderbolt"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Reflect", "Light Screen", "U-turn", "Earth Power"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "corviknightmartian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Trick Room", "Teleport", "Thunderbolt", "Psychic"],
+ "abilities": ["Hadron Engine"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Doom Desire", "Teleport", "Thunderbolt", "Psychic"],
+ "abilities": ["Hadron Engine"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Flash Cannon", "Thunderbolt", "Psychic Noise"],
+ "abilities": ["Hadron Engine"]
+ }
+ ]
+ },
+ "corviknightthunderbird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Thunder", "Hurricane", "U-turn", "Roost"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Reflect", "Light Screen", "U-turn", "Hurricane"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "corviknightyeti": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Blizzard", "Bleakwind Storm", "Volt Switch", "Roost"],
+ "abilities": ["Snow Warning"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Reflect", "Light Screen", "U-turn", "Blizzard"],
+ "abilities": ["Snow Warning"]
+ }
+ ]
+ },
+ "krookodileabyssal": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Knock Off", "Flare Blitz"],
+ "abilities": ["Multiscale"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Parting Shot", "Earthquake", "Knock Off", "Flare Blitz"],
+ "abilities": ["Multiscale"]
+ }
+ ]
+ },
+ "krookodilecavedweller": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Parting Shot", "Earthquake", "Stone Edge", "Flare Blitz"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Explosion", "Earthquake", "Stone Edge", "Flare Blitz"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "krookodilecliffside": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Parting Shot", "Dark Pulse", "Draco Meteor", "Flamethrower"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Switcheroo", "Dark Pulse", "Draco Meteor", "Flamethrower"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "krookodileinfernal": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Parting Shot", "Magma Storm", "Fiery Wrath", "Eruption"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Parting Shot", "Fire Lash", "Knock Off", "Will-O-Wisp"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "krookodilequantum": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Parting Shot", "Volt Tackle", "Head Smash", "Earthquake"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Parting Shot", "Encore", "Head Smash", "Volt Tackle"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "krookodilewetlander": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Synthesis", "Wave Crash", "Wood Hammer", "Knock Off"],
+ "abilities": ["Wind Rider", "Wonder Skin"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Parting Shot", "Wave Crash", "Wood Hammer", "Knock Off"],
+ "abilities": ["Wind Rider", "Wonder Skin"]
+ }
+ ]
+ },
+ "ogerponankh": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Swords Dance", "Poltergeist", "Earthquake", "Stone Edge"],
+ "abilities": ["Good as Gold"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["U-turn", "Shadow Ball", "Earth Power", "Dazzling Gleam"],
+ "abilities": ["Good as Gold"]
+ }
+ ]
+ },
+ "ogerponeaster": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["U-turn", "Moonblast", "Hyper Voice", "Mystical Fire"],
+ "abilities": ["Pickpocket"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Calm Mind", "Moonblast", "Soft-Boiled", "Mystical Fire"],
+ "abilities": ["Pickpocket"]
+ }
+ ]
+ },
+ "ogerponeid": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Knock Off", "Recover", "Surf", "Shadow Ball"],
+ "abilities": ["Tangling Hair"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Hex", "Recover", "Surf", "Toxic"],
+ "abilities": ["Tangling Hair"]
+ }
+ ]
+ },
+ "ogerponkitsune": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Knock Off", "U-turn", "Earth Power", "Power Whip"],
+ "abilities": ["Protean"]
+ }
+ ]
+ },
+ "ogerponmuerta": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Poltergeist", "Moonblast", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Wandering Spirit"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Poltergeist", "Moonblast", "U-turn", "Shadow Sneak"],
+ "abilities": ["Wandering Spirit"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/scootopiav2/teams.ts b/data/random-battles/sixbysix/teams.ts
similarity index 94%
rename from data/random-battles/scootopiav2/teams.ts
rename to data/random-battles/sixbysix/teams.ts
index c03dcede03..e321ed1a71 100644
--- a/data/random-battles/scootopiav2/teams.ts
+++ b/data/random-battles/sixbysix/teams.ts
@@ -1,1001 +1,960 @@
-import { RandomTeams, type MoveCounter } from "../gen9/teams";
-
-// Moves that restore HP:
-const RECOVERY_MOVES = [
- 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
-];
-// Moves that boost Attack:
-const PHYSICAL_SETUP = [
- 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
- 'filletaway',
-];
-// Moves which boost Special Attack:
-const SPECIAL_SETUP = [
- 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway',
-];
-// Some moves that only boost Speed:
-const SPEED_SETUP = [
- 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze',
-];
-// Conglomerate for ease of access
-const SETUP = [
- 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
- 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
- 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance',
- 'feralresilience', 'feralspray', 'crystalfortification',
-];
-const SPEED_CONTROL = [
- 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
-];
-// Hazard-setting moves
-const HAZARDS = [
- 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', 'crystalshard',
-];
-// 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'],
- ['spikyshield', 'wish'],
- ['leechseed', 'protect'],
- ['leechseed', 'substitute'],
- ['moongeistbeam', 'moonlight'],
- ['hex', 'willowisp'],
- ['hex', 'toxic'],
- ['hex', 'thunderwave'],
- ['nightmare', 'willowisp'],
- ['nightmare', 'toxic'],
- ['nightmare', 'thunderwave'],
-];
-
-/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
-const PRIORITY_POKEMON = [
- 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor',
-];
-
-/** Pokemon who should never be in the lead slot */
-const NO_LEAD_POKEMON = [
- 'Zacian', 'Zamazenta',
-];
-const DOUBLES_NO_LEAD_POKEMON = [
- 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
-];
-export class RandomSCTeams extends RandomTeams {
- override cullMovePool(
- types: string[],
- moves: Set,
- abilities: string[],
- counter: MoveCounter,
- movePool: string[],
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: RandomTeamsTypes.Role,
- ): void {
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
- if (moves.size === this.maxMoveCount - 2) {
- const unpairedMoves = [...movePool];
- for (const pair of MOVE_PAIRS) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
- }
- }
- if (unpairedMoves.length === 1) {
- this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
- }
- }
-
- // These moves are paired, and shouldn't appear if there is not room for them both.
- if (moves.size === this.maxMoveCount - 1) {
- for (const pair of MOVE_PAIRS) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(movePool, movePool.indexOf(pair[0]));
- this.fastPop(movePool, movePool.indexOf(pair[1]));
- }
- }
- }
-
- // Develop additional move lists
- const statusMoves = this.cachedStatusMoves;
-
- // Team-based move culls
- if (teamDetails.screens) {
- 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', 'lifedew'],
- ['haze', 'icywind'],
- [['hydropump', 'muddywater'], ['muddywater', 'scald']],
- ['disable', 'encore'],
- ['freezedry', 'icebeam'],
- ['energyball', 'leafstorm'],
- ['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'],
- ['trick', 'uturn'],
-
- // These attacks are redundant with each other
- [['psychic', 'psychicnoise'], ['psyshock', 'psychicnoise']],
- ['surf', ['hydropump', 'scald']],
- ['liquidation', 'wavecrash'],
- ['aquajet', 'flipturn'],
- ['gigadrain', 'leafstorm'],
- ['powerwhip', 'hornleech'],
- ['airslash', 'hurricane'],
- ['knockoff', 'foulplay'],
- ['throatchop', ['crunch', 'lashout']],
- ['doubleedge', ['bodyslam', 'headbutt']],
- [['fireblast', 'magmastorm'], ['fierydance', 'flamethrower', 'lavaplume']],
- ['thunderpunch', 'wildcharge'],
- ['thunderbolt', 'discharge'],
- ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']],
- ['aurasphere', 'focusblast'],
- ['closecombat', 'drainpunch'],
- [['dragonpulse', 'spacialrend'], 'dracometeor'],
- ['heavyslam', 'flashcannon'],
- ['alluringvoice', 'dazzlinggleam'],
- ['defog', 'rapidspin'],
-
- // 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'],
- // Araquanid and Magnezone
- ['mirrorcoat', ['hydropump', 'bodypress']],
- ];
-
- 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:
- // To force Close Combat on Barraskewda without locking it to Tera Fighting
- if (species.id === 'barraskewda') {
- this.incompatibleMoves(moves, movePool, ['psychicfangs', 'throatchop'], ['poisonjab', 'throatchop']);
- }
- // To force Toxic on Quagsire
- if (species.id === 'quagsire') this.incompatibleMoves(moves, movePool, 'spikes', 'icebeam');
- // Taunt/Knock should be Cyclizar's flex moveslot
- if (species.id === 'cyclizar') this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff');
- // To force Stealth Rock on Camerupt
- if (species.id === 'camerupt') this.incompatibleMoves(moves, movePool, 'roar', 'willowisp');
- // nothing else rolls these lol
- if (species.id === 'coalossal') this.incompatibleMoves(moves, movePool, 'flamethrower', 'overheat');
- }
-
- override randomMoveset(
- types: string[],
- abilities: string[],
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- movePool: string[],
- teraType: string,
- role: RandomTeamsTypes.Role,
- ): Set {
- const moves = new Set();
- if (this.getSuperType(moves)) types[1] = this.getSuperType(moves);
- 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 Knock Off on pure Normal- and Fighting-types in singles
- if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
- if (movePool.includes('knockoff')) {
- counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Flip Turn on pure Water-type Wallbreakers
- if (types.length === 1 && types.includes('Water') &&
- role === 'Wallbreaker' && movePool.includes('flipturn')) {
- counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Spore on Smeargle
- if (species.id === 'smeargle') {
- if (movePool.includes('spore')) {
- counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce moves in doubles
- if (isDoubles) {
- const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore'];
- for (const moveid of doublesEnforcedMoves) {
- if (movePool.includes(moveid)) {
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- // Enforce Fake Out on slow Pokemon
- if (movePool.includes('fakeout') && species.baseStats.spe <= 50) {
- counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Enforce Tailwind on Prankster and Gale Wings users
- if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) {
- counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Enforce Thunder Wave on Prankster users as well
- if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
- counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce STAB priority
- if (
- ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) ||
- PRIORITY_POKEMON.includes(species.id)
- ) {
- const priorityMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (
- types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
- (move.basePower || move.basePowerCallback)
- ) {
- priorityMoves.push(moveid);
- }
- }
- if (priorityMoves.length) {
- const moveid = this.sample(priorityMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce a single STAB for Moltres
- if (species.id === 'moltres') {
- const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying';
-
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) {
- stabMoves.push(moveid);
- }
- }
- while (runEnforcementChecker(typeToEnforce)) {
- if (!stabMoves.length) break;
- const moveid = this.sampleNoReplace(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce STAB
- for (const type of types) {
- // Moltres already has STAB, so ignore this block
- if (species.id === 'moltres') break;
- // prevents Meowscarada from being enforced stab moves
- if (species.id === 'meowscarada') break;
- // Check if a STAB move of that type should be required
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
- stabMoves.push(moveid);
- }
- }
- while (runEnforcementChecker(type)) {
- if (!stabMoves.length) break;
- const moveid = this.sampleNoReplace(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Tera STAB
- // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
- if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) &&
- !abilities.includes('Protean')) {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
- stabMoves.push(moveid);
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // If no STAB move was added, add a STAB move
- // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
- if (!counter.get('stab') && !abilities.includes('Protean')) {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
- stabMoves.push(moveid);
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce recovery
- if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
- const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
- if (recoveryMoves.length) {
- const moveid = this.sample(recoveryMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce setup
- if (role.includes('Setup') || role === 'Tera Blast user') {
- // First, try to add a non-Speed setup move
- const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
- if (nonSpeedSetupMoves.length) {
- const moveid = this.sample(nonSpeedSetupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- } else {
- // No non-Speed setup moves, so add any (Speed) setup move
- const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
- if (setupMoves.length) {
- const moveid = this.sample(setupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Enforce redirecting moves and Fake Out on Doubles Support
- if (role === 'Doubles Support') {
- for (const moveid of ['fakeout', 'followme', 'ragepowder']) {
- if (movePool.includes(moveid)) {
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Enforce Protect
- if (role.includes('Protect')) {
- const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid));
- if (protectMoves.length) {
- const moveid = this.sample(protectMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce a move not on the noSTAB list
- if (!counter.damagingMoves.size) {
- // Choose an attacking move
- const attackingMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
- }
- if (attackingMoves.length) {
- const moveid = this.sample(attackingMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce coverage move
- if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) {
- if (counter.damagingMoves.size === 1) {
- // Find the type of the current attacking move
- const currentAttackType = counter.damagingMoves.values().next().value!.type;
- // Choose an attacking move that is of different type to the current single attack
- const coverageMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
- if (currentAttackType !== moveType) coverageMoves.push(moveid);
- }
- }
- if (coverageMoves.length) {
- const moveid = this.sample(coverageMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
- // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
-
- // Choose remaining moves randomly from movepool and add them to moves list:
- while (moves.size < this.maxMoveCount && movePool.length) {
- if (moves.size + movePool.length <= this.maxMoveCount) {
- for (const moveid of movePool) {
- moves.add(moveid);
- }
- break;
- }
- const moveid = this.sample(movePool);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- for (const pair of MOVE_PAIRS) {
- if (moveid === pair[0] && movePool.includes(pair[1])) {
- counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- if (moveid === pair[1] && movePool.includes(pair[0])) {
- counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
- return moves;
- }
-
- override getPriorityItem(
- ability: string,
- types: string[],
- moves: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: RandomTeamsTypes.Role,
- ) {
- if (this.getSuperType(moves)) return this.getSuperType(moves) + " Orb";
- 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';
- // Super Type hardcodes
- if (species.id === 'cyllindrake' && moves.has('shiftgear')) return 'Throat Spray';
- if (species.id === 'albatrygon' && moves.has('acrobatics')) return 'Sitrus Berry';
- if (species.id === 'yiankutku' && moves.has('facade') || species.id === 'bluekutku' && moves.has('facade')) {
- return 'Frost Orb';
- }
- if (species.id === 'xenojiiva' && ability === 'Quark Drive') return 'Booster Energy';
- if (species.id === 'odogaron' && moves.has('closecombat')) return 'White Herb';
- if (species.id === 'odogaron' && !moves.has('closecombat')) return 'Sitrus Berry';
- if (
- ability === 'Magic Guard' || ability === 'Fervent Scales' ||
- (ability === 'Sheer Force' && counter.get('sheerforce'))
- ) {
- return 'Life Orb';
- }
- if (moves.has('devour') && ability === 'Unburden') return 'Liechi Berry';
- if (moves.has('virulentvolley')) return 'Loaded Dice';
- if (moves.has('magnalance') && ability === 'Reactive Core') return 'Flame Orb';
- if (moves.has('dragondance') && ability === 'Reactive Core') return 'Frost Orb';
- // other
- if (moves.has('substitute')) return 'Leftovers';
- if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
- if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
- if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
- if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
- return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
- }
- 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 (
- role === 'Wallbreaker' && (counter.get('Physical') > counter.get('Special')) && !counter.get('Status')
- ) {
- return 'Choice Band';
- }
- if (
- role === 'Wallbreaker' && (counter.get('Physical') < counter.get('Special')) && !counter.get('Status')
- ) {
- return 'Choice Specs';
- }
- if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
- if (moves.has('acrobatics') && ability !== 'Quark Drive' && 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 (
- ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) ||
- moves.has('bellydrum') || moves.has('filletaway')
- ) {
- return 'Sitrus Berry';
- }
- if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
- if (species.nfe) return 'Eviolite';
- if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
- if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
- return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Leftovers';
- }
- }
-
- getSuperType(moves: Set | string[]): string {
- for (const move of moves) {
- if (move.includes('crystal')) return "Crystal";
- if (move.includes('feral')) return "Feral";
- }
- return "";
- }
-
- override randomSet(
- s: string | Species,
- teamDetails: RandomTeamsTypes.TeamDetails = {},
- isLead = false,
- isDoubles = false
- ): RandomTeamsTypes.RandomSet {
- const species = this.dex.species.get(s);
- const forme = this.getForme(species);
- const sets = this.randomSets[species.id]["sets"];
- const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
-
- // const ruleTable = this.dex.formats.getRuleTable(this.format);
-
- for (const set of sets) {
- // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
- const abilities = set.abilities!;
- if (
- isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
- set.role === 'Fast Bulky Setup'
- ) continue;
- // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
- // used here to limit team to 1 Super Types user
- 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!;
- 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 = [];
- types[0] = species.types[0];
- if (species.types[1]) types[1] = species.types[1];
- 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);
-
- if (this.getSuperType(moves)) types[1] = this.getSuperType(moves);
-
- // Get ability
- ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
-
- // Get items
- // First, the priority items
- item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
- if (item === undefined) {
- if (isDoubles) {
- item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
- } else {
- item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
- }
- }
-
- // Get level
- const level = this.getLevel(species, isDoubles);
-
- // Prepare optimal HP
- const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
- let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
- // Crash damage move users want an odd HP to survive two misses
- if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;
- while (evs.hp > 1) {
- const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
- if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
- // Two Substitutes should activate Sitrus Berry
- if (hp % 4 === 0) break;
- } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
- // Belly Drum should activate Sitrus Berry
- if (hp % 2 === 0) break;
- } else if (moves.has('substitute') && moves.has('endeavor')) {
- // Luvdisc should be able to Substitute down to very low HP
- if (hp % 4 > 0) break;
- } else {
- // Maximize number of Stealth Rock switch-ins
- if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb', 'Eviolite'].includes(item)) break;
- if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
- // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
- if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
- }
- evs.hp -= 4;
- }
-
- // Minimize confusion damage
- const noAttackStatMoves = [...moves].every(m => {
- const move = this.dex.moves.get(m);
- if (move.damageCallback || move.damage) return true;
- if (move.id === 'shellsidearm') return false;
- // Magearna and doubles Dragonite, though these can work well as a general rule
- if (move.id === 'terablast' && (
- species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
- ) return false;
- return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
- });
- // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs
- if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
- species.id !== 'illumise') {
- evs.atk = 0;
- ivs.atk = 0;
- }
-
- // Enforce Tera Type after all set generation is done to prevent infinite generation
- if (this.forceTeraType) teraType = this.forceTeraType;
-
- // shuffle moves to add more randomness to camomons
- const shuffledMoves = Array.from(moves);
- this.prng.shuffle(shuffledMoves);
- return {
- name: species.baseSpecies,
- species: forme,
- gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
- shiny: this.randomChance(1, 1024),
- level,
- moves: shuffledMoves,
- ability,
- evs,
- ivs,
- item,
- teraType,
- role,
- };
- }
-
- override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
-
- randomSCTeam() {
- this.enforceNoDirectCustomBanlistChanges();
-
- const seed = this.prng.getSeed();
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const pokemon: RandomTeamsTypes.RandomSet[] = [];
-
- // For Monotype
- const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
- const isDoubles = this.format.gameType !== 'singles';
- const typePool = this.dex.types.names().filter(name => name !== "Stellar");
- const type = this.forceMonotype || this.sample(typePool);
-
- // PotD stuff
- // const usePotD = global.Config && Config.potd && ruleTable.has('potd');
- // const potd = usePotD ? this.dex.species.get(Config.potd) : null;
-
- const baseFormes: { [k: string]: number } = {};
-
- // const superTypeCount = 0;
- const typeCount: { [k: string]: number } = {};
- const typeComboCount: { [k: string]: number } = {};
- const typeWeaknesses: { [k: string]: number } = {};
- const typeDoubleWeaknesses: { [k: string]: number } = {};
- const teamDetails: RandomTeamsTypes.TeamDetails = {};
- // let numMaxLevelPokemon = 0;
-
- const pokemonList = Object.keys(this.randomSets);
- const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
-
- let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
- while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
- const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
- 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;
-
- // 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 === 'Sorrowcean' && 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;
-
- // Limit three of any type combination in Monotype
- if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
-
- // The Pokemon of the Day
- // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
-
- // testing code
- // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Terapagos');
-
- 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);
- if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
- pokemon.push(set);
- } else {
- set = this.randomSet(species, teamDetails, true, isDoubles);
- if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
- pokemon.unshift(set);
- leadsRemaining--;
- }
- } else {
- set = this.randomSet(species, teamDetails, false, isDoubles);
- if (teamDetails.teraBlast && this.getSuperType(set.moves)) continue;
- 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 item counter
- if (set.item === "Crystal Orb" || set.item === "Feral Orb") {
- teamDetails.teraBlast = 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 RandomSCTeams;
+import { RandomTeams, type MoveCounter } from "../gen9/teams";
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
+ 'filletaway',
+];
+// Moves which boost Special Attack:
+const SPECIAL_SETUP = [
+ 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
+ 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
+ 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance',
+ 'feralresilience', 'feralspray', 'crystalfortification',
+];
+const SPEED_CONTROL = [
+ 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', 'crystalshard',
+];
+// 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'],
+ ['spikyshield', 'wish'],
+ ['leechseed', 'protect'],
+ ['leechseed', 'substitute'],
+ ['moongeistbeam', 'moonlight'],
+ ['hex', 'willowisp'],
+ ['hex', 'toxic'],
+ ['hex', 'thunderwave'],
+ ['nightmare', 'willowisp'],
+ ['nightmare', 'toxic'],
+ ['nightmare', 'thunderwave'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor',
+];
+
+/** Pokemon who should never be in the lead slot */
+const NO_LEAD_POKEMON = [
+ 'Zacian', 'Zamazenta',
+];
+const DOUBLES_NO_LEAD_POKEMON = [
+ 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
+];
+export class Random6x6Teams extends RandomTeams {
+ override cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Develop additional move lists
+ const statusMoves = this.cachedStatusMoves;
+
+ // Team-based move culls
+ if (teamDetails.screens) {
+ 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', 'lifedew'],
+ ['haze', 'icywind'],
+ [['hydropump', 'muddywater'], ['muddywater', 'scald']],
+ ['disable', 'encore'],
+ ['freezedry', 'icebeam'],
+ ['energyball', 'leafstorm'],
+ ['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'],
+ ['trick', 'uturn'],
+
+ // These attacks are redundant with each other
+ [['psychic', 'psychicnoise'], ['psyshock', 'psychicnoise']],
+ ['surf', ['hydropump', 'scald']],
+ ['liquidation', 'wavecrash'],
+ ['aquajet', 'flipturn'],
+ ['gigadrain', 'leafstorm'],
+ ['powerwhip', 'hornleech'],
+ ['airslash', 'hurricane'],
+ ['knockoff', 'foulplay'],
+ ['throatchop', ['crunch', 'lashout']],
+ ['doubleedge', ['bodyslam', 'headbutt']],
+ [['fireblast', 'magmastorm'], ['fierydance', 'flamethrower', 'lavaplume']],
+ ['thunderpunch', 'wildcharge'],
+ ['thunderbolt', 'discharge'],
+ ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']],
+ ['aurasphere', 'focusblast'],
+ ['closecombat', 'drainpunch'],
+ [['dragonpulse', 'spacialrend'], 'dracometeor'],
+ ['heavyslam', 'flashcannon'],
+ ['alluringvoice', 'dazzlinggleam'],
+ ['defog', 'rapidspin'],
+
+ // 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'],
+ // Araquanid and Magnezone
+ ['mirrorcoat', ['hydropump', 'bodypress']],
+ ];
+
+ 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:
+ // To force Close Combat on Barraskewda without locking it to Tera Fighting
+ if (species.id === 'barraskewda') {
+ this.incompatibleMoves(moves, movePool, ['psychicfangs', 'throatchop'], ['poisonjab', 'throatchop']);
+ }
+ // To force Toxic on Quagsire
+ if (species.id === 'quagsire') this.incompatibleMoves(moves, movePool, 'spikes', 'icebeam');
+ // Taunt/Knock should be Cyclizar's flex moveslot
+ if (species.id === 'cyclizar') this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff');
+ // To force Stealth Rock on Camerupt
+ if (species.id === 'camerupt') this.incompatibleMoves(moves, movePool, 'roar', 'willowisp');
+ // nothing else rolls these lol
+ if (species.id === 'coalossal') this.incompatibleMoves(moves, movePool, 'flamethrower', 'overheat');
+ }
+
+ override randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ movePool: string[],
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.queryMoves(moves, species, teraType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
+ );
+ };
+
+ if (role === 'Tera Blast user') {
+ counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web
+ for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Trick Room on Doubles Wallbreaker
+ if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') {
+ counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Knock Off on pure Normal- and Fighting-types in singles
+ if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
+ if (movePool.includes('knockoff')) {
+ counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Flip Turn on pure Water-type Wallbreakers
+ if (types.length === 1 && types.includes('Water') &&
+ role === 'Wallbreaker' && movePool.includes('flipturn')) {
+ counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Spore on Smeargle
+ if (species.id === 'smeargle') {
+ if (movePool.includes('spore')) {
+ counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce moves in doubles
+ if (isDoubles) {
+ const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore'];
+ for (const moveid of doublesEnforcedMoves) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ // Enforce Fake Out on slow Pokemon
+ if (movePool.includes('fakeout') && species.baseStats.spe <= 50) {
+ counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Tailwind on Prankster and Gale Wings users
+ if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) {
+ counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Thunder Wave on Prankster users as well
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (
+ ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) ||
+ PRIORITY_POKEMON.includes(species.id)
+ ) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (
+ types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
+ (move.basePower || move.basePowerCallback)
+ ) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce a single STAB for Moltres
+ if (species.id === 'moltres') {
+ const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying';
+
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(typeToEnforce)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Moltres already has STAB, so ignore this block
+ if (species.id === 'moltres') break;
+ // prevents Meowscarada from being enforced stab moves
+ if (species.id === 'meowscarada') break;
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Tera STAB
+ // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
+ if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) &&
+ !abilities.includes('Protean')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
+ if (!counter.get('stab') && !abilities.includes('Protean')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Tera Blast user') {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ } else {
+ // No non-Speed setup moves, so add any (Speed) setup move
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce redirecting moves and Fake Out on Doubles Support
+ if (role === 'Doubles Support') {
+ for (const moveid of ['fakeout', 'followme', 'ragepowder']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce Protect
+ if (role.includes('Protect')) {
+ const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid));
+ if (protectMoves.length) {
+ const moveid = this.sample(protectMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value!.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
+ // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ if (moves.size + movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ break;
+ }
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ override getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (!isDoubles) {
+ if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
+ return 'Booster Energy';
+ }
+ if (species.id === 'lokix') {
+ return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
+ }
+ }
+ if (species.requiredItems) {
+ // Z-Crystals aren't available in Gen 9, so require Plates
+ if (species.baseSpecies === 'Arceus') {
+ return species.requiredItems[0];
+ }
+ return this.sample(species.requiredItems);
+ }
+ if (role === 'AV Pivot') return 'Assault Vest';
+ // other
+ if (moves.has('substitute')) return 'Leftovers';
+ if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
+ if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
+ if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
+ return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
+ }
+ 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 (
+ role === 'Wallbreaker' && (counter.get('Physical') > counter.get('Special')) && !counter.get('Status')
+ ) {
+ return 'Choice Band';
+ }
+ if (
+ role === 'Wallbreaker' && (counter.get('Physical') < counter.get('Special')) && !counter.get('Status')
+ ) {
+ return 'Choice Specs';
+ }
+ if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
+ if (moves.has('acrobatics') && ability !== 'Quark Drive' && 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 (
+ ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) ||
+ moves.has('bellydrum') || moves.has('filletaway')
+ ) {
+ return 'Sitrus Berry';
+ }
+ if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
+ if (species.nfe) return 'Eviolite';
+ if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
+ if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
+ return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Leftovers';
+ }
+ }
+
+ override randomSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
+
+ // const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
+ const abilities = set.abilities!;
+ if (
+ isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
+ set.role === 'Fast Bulky Setup'
+ ) continue;
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if (teamDetails.teraBlast && 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 = [];
+ types[0] = species.types[0];
+ if (species.types[1]) types[1] = species.types[1];
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
+ const counter = this.queryMoves(moves, species, teraType, abilities);
+
+ // Get ability
+ ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+ if (item === undefined) {
+ if (isDoubles) {
+ item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ } else {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ }
+ }
+
+ // Get level
+ const level = this.getLevel(species, isDoubles);
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
+ let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ // Crash damage move users want an odd HP to survive two misses
+ if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (moves.has('substitute') && moves.has('endeavor')) {
+ // Luvdisc should be able to Substitute down to very low HP
+ if (hp % 4 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb', 'Eviolite'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ // Magearna and doubles Dragonite, though these can work well as a general rule
+ if (move.id === 'terablast' && (
+ species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+ // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs
+ if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
+ species.id !== 'illumise') {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
+
+ random6x6Team() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.getSeed();
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = this.format.gameType !== 'singles';
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ // PotD stuff
+ // const usePotD = global.Config && Config.potd && ruleTable.has('potd');
+ // const potd = usePotD ? this.dex.species.get(Config.potd) : null;
+
+ const baseFormes: { [k: string]: number } = {};
+
+ const typeCount: { [k: string]: number } = {};
+ const typeComboCount: { [k: string]: number } = {};
+ const typeWeaknesses: { [k: string]: number } = {};
+ const typeDoubleWeaknesses: { [k: string]: number } = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+
+ let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ // const z = 0;
+ 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;
+
+ // 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;
+
+ 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 three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+
+ // The Pokemon of the Day
+ // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
+
+ // testing code
+ // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Terapagos');
+
+ 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);
+ if (teamDetails.teraBlast) continue;
+ pokemon.push(set);
+ } else {
+ set = this.randomSet(species, teamDetails, true, isDoubles);
+ // if (teamDetails.teraBlast) continue;
+ pokemon.unshift(set);
+ leadsRemaining--;
+ }
+ } else {
+ set = this.randomSet(species, teamDetails, false, isDoubles);
+ // if (teamDetails.teraBlast) continue;
+ 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 Random6x6Teams;
From 95416b29dc0bb8043deeba0e77f9a26e7cc41a10 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Feb 2026 12:50:14 -0700
Subject: [PATCH 055/233] Move Pet Mod spotlight ladders
---
config/formats.ts | 84 +++++++++++++++++++++++------------------------
1 file changed, 42 insertions(+), 42 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index ef305c1447..98ef07caa5 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -674,6 +674,48 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects',
],
},
+ {
+ name: "[Gen 9] Six by Six Random Battle",
+ desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
+ mod: 'sixbysix',
+ team: 'random6x6',
+ ruleset: [
+ 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod',
+ 'Terastal Clause', 'Data Preview', 'Sprite Viewer',
+ ],
+ onBegin() {
+ this.add('-message', `Welcome to Six by Six!`);
+ this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
+ this.add('-message', `You can find our thread and metagame resources here:`);
+ this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
+ },
+ onSwitchInPriority: 100,
+ onSwitchIn(pokemon) {
+ if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !==
+ this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') &&
+ !pokemon.terastallized) {
+ this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
+ }
+ },
+ },
+ {
+ name: "[Gen 9] ChatBats",
+ desc: `A Random Battles Solomod made by the Pet Mods chatroom on Showdown.`,
+ mod: 'chatbats',
+ team: 'randomChatBats',
+ ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Sleep Clause Mod', 'Data Preview', 'Cancel Mod'],
+ onSwitchIn(pokemon) {
+ this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
+ },
+ // Dachsbun causes Koraidon to generate on enemy team. Implemented here.
+ onBegin() {
+ this.add(`raw|Need help with all of the new moves, abilities, and wacky sets?
Then make sure to check out the ChatBats Compendium or use /dt! `);
+ this.add(`raw|Welcome to ChatBats!`);
+ this.add(`raw|ChatBats is a Random Battles format created by the Pet Mods room here on Showdown!`);
+ this.add(`raw|If you want to help create new sets, we will host events periodically in the Pet Mods room!`);
+ this.add(`raw|Anyone who is there can help create a new set for a random mon, changing moves, abilities, stats, and even custom formes.`);
+ },
+ },
{
name: "[Gen 3] Ubers",
mod: 'gen3',
@@ -3383,30 +3425,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
section: "Pet Mods",
},
- {
- name: "[Gen 9] Six by Six Random Battle",
- desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
- mod: 'sixbysix',
- team: 'random6x6',
- ruleset: [
- 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod',
- 'Terastal Clause', 'Data Preview', 'Sprite Viewer',
- ],
- onBegin() {
- this.add('-message', `Welcome to Six by Six!`);
- this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
- this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
- },
- onSwitchInPriority: 100,
- onSwitchIn(pokemon) {
- if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !==
- this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') &&
- !pokemon.terastallized) {
- this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
- }
- },
- },
{
name: "[Gen 9] Six by Six", // Roomtours
desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
@@ -3443,24 +3461,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
}
},
},
- {
- name: "[Gen 9] ChatBats",
- desc: `A Random Battles Solomod made by the Pet Mods chatroom on Showdown.`,
- mod: 'chatbats',
- team: 'randomChatBats',
- ruleset: ['Obtainable', 'Species Clause', 'HP Percentage Mod', 'Sleep Clause Mod', 'Data Preview', 'Cancel Mod'],
- onSwitchIn(pokemon) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- },
- // Dachsbun causes Koraidon to generate on enemy team. Implemented here.
- onBegin() {
- this.add(`raw|Need help with all of the new moves, abilities, and wacky sets?
Then make sure to check out the ChatBats Compendium or use /dt! `);
- this.add(`raw|Welcome to ChatBats!`);
- this.add(`raw|ChatBats is a Random Battles format created by the Pet Mods room here on Showdown!`);
- this.add(`raw|If you want to help create new sets, we will host events periodically in the Pet Mods room!`);
- this.add(`raw|Anyone who is there can help create a new set for a random mon, changing moves, abilities, stats, and even custom formes.`);
- },
- },
{
name: "[Gen 9] Legends Z-A OU",
desc: `Speculative turn-based metagame using Pokémon obtainable in Legends: Z-A, but with National Dex learnsets.`,
From ccdc32dd7cde25fd9e4bed64820e885f66e78a4e Mon Sep 17 00:00:00 2001
From: ACakeWearingAHat <45981036+ACakeWearingAHat@users.noreply.github.com>
Date: Sun, 1 Feb 2026 14:00:57 -0600
Subject: [PATCH 056/233] Randomized format set updates (#11728)
* Randomized format set updates
* revert some changes from last month
* lint
* further updates
* Gen 1 changes
* Re-split whimsicott in gen 9 doubles
* Merge arceus-ghost sets (cosmetic change)
* Don't duplicate subseed on whimsicott
* Replace Fake Tears with twave on screens meowstic and merge roles
* doubles screens grimmsnarl: +twave
* Update SD silvally ice and psychic in gen 8
---------
Co-authored-by: Kelvin Liu <115855253+livid-washed@users.noreply.github.com>
---
data/random-battles/gen1/data.json | 13 +-
data/random-battles/gen3/sets.json | 43 +++--
data/random-battles/gen3/teams.ts | 6 -
data/random-battles/gen4/sets.json | 16 +-
data/random-battles/gen5/sets.json | 13 +-
data/random-battles/gen6/sets.json | 45 ++---
data/random-battles/gen6/teams.ts | 10 +-
data/random-battles/gen7/sets.json | 59 ++++---
data/random-battles/gen7/teams.ts | 10 +-
data/random-battles/gen8/data.json | 10 +-
data/random-battles/gen9/doubles-sets.json | 184 ++++++++++++++-------
data/random-battles/gen9/sets.json | 68 +++++---
data/random-battles/gen9/teams.ts | 17 +-
data/random-battles/gen9baby/sets.json | 6 +-
14 files changed, 300 insertions(+), 200 deletions(-)
diff --git a/data/random-battles/gen1/data.json b/data/random-battles/gen1/data.json
index 7c3ff071dd..f6ebda9799 100644
--- a/data/random-battles/gen1/data.json
+++ b/data/random-battles/gen1/data.json
@@ -574,7 +574,8 @@
},
"mrmime": {
"level": 75,
- "moves": ["psychic", "seismictoss", "thunderbolt", "thunderwave"]
+ "moves": ["psychic", "thunderbolt", "thunderwave"],
+ "exclusiveMoves": ["counter", "seismictoss", "seismictoss"]
},
"scyther": {
"level": 75,
@@ -608,7 +609,8 @@
},
"gyarados": {
"level": 74,
- "moves": ["blizzard", "bodyslam", "bodyslam", "hyperbeam", "thunderbolt"],
+ "moves": ["blizzard", "hyperbeam", "thunderbolt"],
+ "essentialMoves": ["bodyslam"],
"exclusiveMoves": ["hydropump", "surf", "surf"]
},
"lapras": {
@@ -658,8 +660,7 @@
},
"kabuto": {
"level": 88,
- "moves": ["blizzard", "bodyslam", "slash"],
- "exclusiveMoves": ["hydropump", "surf", "surf"]
+ "moves": ["blizzard", "bodyslam", "slash", "surf"]
},
"kabutops": {
"level": 75,
@@ -704,8 +705,8 @@
},
"dragonite": {
"level": 74,
- "moves": ["bodyslam", "hyperbeam", "thunderbolt", "thunderwave", "thunderwave"],
- "essentialMoves": ["blizzard"]
+ "moves": ["bodyslam", "hyperbeam", "thunderbolt"],
+ "essentialMoves": ["blizzard", "thunderwave"]
},
"mewtwo": {
"level": 60,
diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json
index 7dd8706e39..4549e95064 100644
--- a/data/random-battles/gen3/sets.json
+++ b/data/random-battles/gen3/sets.json
@@ -387,7 +387,7 @@
"sets": [
{
"role": "Setup Sweeper",
- "movepool": ["calmmind", "encore", "firepunch", "icepunch", "psychic", "recover", "substitute", "thunderpunch"],
+ "movepool": ["calmmind", "encore", "firepunch", "hiddenpowerdark", "psychic", "recover", "substitute", "thunderpunch"],
"abilities": ["Synchronize"],
"preferredTypes": ["Fire"]
}
@@ -474,7 +474,7 @@
},
{
"role": "Setup Sweeper",
- "movepool": ["calmmind", "psychic", "rest", "surf"],
+ "movepool": ["calmmind", "psychic", "surf", "thunderwave"],
"abilities": ["Own Tempo"]
},
{
@@ -544,13 +544,13 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["explosion", "fireblast", "hiddenpowerground", "rest", "sludgebomb", "toxic"],
+ "movepool": ["explosion", "fireblast", "hiddenpowerground", "sludgebomb", "toxic"],
"abilities": ["Sticky Hold"],
"preferredTypes": ["Ground"]
},
{
"role": "Setup Sweeper",
- "movepool": ["curse", "hiddenpowerground", "rest", "sludgebomb"],
+ "movepool": ["curse", "explosion", "hiddenpowerground", "sludgebomb"],
"abilities": ["Sticky Hold"]
}
]
@@ -1063,7 +1063,7 @@
"sets": [
{
"role": "Setup Sweeper",
- "movepool": ["doubleedge", "dragondance", "earthquake", "healbell", "hiddenpowerflying", "rest", "substitute"],
+ "movepool": ["doubleedge", "dragondance", "earthquake", "healbell", "hiddenpowerflying", "substitute"],
"abilities": ["Inner Focus"],
"preferredTypes": ["Ground"]
},
@@ -1479,7 +1479,7 @@
},
{
"role": "Setup Sweeper",
- "movepool": ["calmmind", "psychic", "rest", "surf"],
+ "movepool": ["calmmind", "psychic", "surf", "thunderwave"],
"abilities": ["Own Tempo"]
},
{
@@ -1564,7 +1564,7 @@
"sets": [
{
"role": "Bulky Setup",
- "movepool": ["bodyslam", "curse", "earthquake", "rest", "shadowball"],
+ "movepool": ["bodyslam", "curse", "earthquake", "rest", "shadowball", "sleeptalk"],
"abilities": ["Serene Grace"]
},
{
@@ -2482,11 +2482,6 @@
"role": "Bulky Support",
"movepool": ["encore", "moonlight", "seismictoss", "thunderwave", "toxic"],
"abilities": ["Oblivious"]
- },
- {
- "role": "Generalist",
- "movepool": ["batonpass", "encore", "seismictoss", "substitute", "thunderwave", "toxic"],
- "abilities": ["Oblivious"]
}
]
},
@@ -2561,7 +2556,7 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["explosion", "fireblast", "flamethrower", "hiddenpowergrass", "rest", "toxic"],
+ "movepool": ["explosion", "fireblast", "flamethrower", "hiddenpowergrass", "toxic"],
"abilities": ["White Smoke"]
}
]
@@ -2571,7 +2566,7 @@
"sets": [
{
"role": "Setup Sweeper",
- "movepool": ["calmmind", "firepunch", "psychic", "substitute", "thunderpunch"],
+ "movepool": ["calmmind", "firepunch", "hiddenpowerdark", "psychic", "substitute"],
"abilities": ["Thick Fat"],
"preferredTypes": ["Fire"]
}
@@ -2602,11 +2597,11 @@
},
{
"role": "Staller",
- "movepool": ["dragonclaw", "earthquake", "fireblast", "protect", "toxic"],
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "protect", "rockslide", "toxic"],
"abilities": ["Levitate"]
},
{
- "role": "Bulky Attacker",
+ "role": "Staller",
"movepool": ["dragonclaw", "earthquake", "fireblast", "rockslide", "substitute", "toxic"],
"abilities": ["Levitate"]
}
@@ -3053,7 +3048,12 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["earthquake", "hiddenpowerbug", "overheat", "rockslide", "substitute", "swordsdance", "thunderwave"],
+ "movepool": ["earthquake", "overheat", "rockslide", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hiddenpowerbug", "rockslide", "substitute", "swordsdance", "thunderwave"],
"abilities": ["Drought"],
"preferredTypes": ["Rock"]
}
@@ -3086,9 +3086,8 @@
},
{
"role": "Setup Sweeper",
- "movepool": ["calmmind", "firepunch", "icepunch", "psychic", "substitute", "thunderbolt"],
- "abilities": ["Serene Grace"],
- "preferredTypes": ["Fire"]
+ "movepool": ["calmmind", "firepunch", "icepunch", "psychic", "thunderbolt"],
+ "abilities": ["Serene Grace"]
}
]
},
@@ -3097,7 +3096,7 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"],
+ "movepool": ["extremespeed", "icebeam", "psychoboost", "shadowball", "superpower"],
"abilities": ["Pressure"],
"preferredTypes": ["Fighting", "Ghost"]
}
@@ -3108,7 +3107,7 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["extremespeed", "firepunch", "icebeam", "psychoboost", "shadowball", "superpower"],
+ "movepool": ["extremespeed", "icebeam", "psychoboost", "shadowball", "superpower"],
"abilities": ["Pressure"],
"preferredTypes": ["Fighting", "Ghost"]
}
diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts
index ff59db9377..6c229c924b 100644
--- a/data/random-battles/gen3/teams.ts
+++ b/data/random-battles/gen3/teams.ts
@@ -467,16 +467,10 @@ export class RandomGen3Teams extends RandomGen4Teams {
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 (species.id === 'deoxys' || species.id === 'deoxysattack') return 'White Herb';
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';
diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json
index 672865b259..c9a7112bb5 100644
--- a/data/random-battles/gen4/sets.json
+++ b/data/random-battles/gen4/sets.json
@@ -1325,7 +1325,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["destinybond", "explosion", "spikes", "thunderwave", "toxicspikes", "waterfall"],
+ "movepool": ["destinybond", "explosion", "poisonjab", "spikes", "thunderwave", "toxicspikes", "waterfall"],
"abilities": ["Poison Point", "Swift Swim"]
}
]
@@ -2123,9 +2123,14 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "selfdestruct", "waterspout"],
+ "movepool": ["hydropump", "icebeam", "selfdestruct", "waterspout"],
"abilities": ["Water Veil"],
"preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "selfdestruct", "surf", "toxic"],
+ "abilities": ["Water Veil"]
}
]
},
@@ -3022,9 +3027,14 @@
"movepool": ["destinybond", "hiddenpowerfighting", "painsplit", "shadowball", "substitute", "taunt", "willowisp"],
"abilities": ["Levitate"]
},
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "substitute", "thunderbolt"],
+ "abilities": ["Levitate"]
+ },
{
"role": "Wallbreaker",
- "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "movepool": ["hiddenpowerfighting", "shadowball", "thunderbolt", "trick"],
"abilities": ["Levitate"]
}
]
diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json
index 23a754ef97..acee027540 100644
--- a/data/random-battles/gen5/sets.json
+++ b/data/random-battles/gen5/sets.json
@@ -3065,9 +3065,14 @@
"abilities": ["Levitate"]
},
{
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "substitute", "thunderbolt"],
"abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
}
]
},
@@ -3274,7 +3279,7 @@
{
"role": "Fast Attacker",
"movepool": ["flashcannon", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerice", "thunderbolt", "voltswitch"],
- "abilities": ["Magnet Pull"]
+ "abilities": ["Analytic", "Magnet Pull"]
},
{
"role": "Staller",
@@ -4574,7 +4579,7 @@
},
{
"role": "Wallbreaker",
- "movepool": ["bugbuzz", "energyball", "thunder", "voltswitch"],
+ "movepool": ["bugbuzz", "gigadrain", "thunder", "voltswitch"],
"abilities": ["Compound Eyes"]
}
]
diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json
index 479d44bed4..d50f9c1849 100644
--- a/data/random-battles/gen6/sets.json
+++ b/data/random-battles/gen6/sets.json
@@ -31,6 +31,11 @@
"role": "Bulky Attacker",
"movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
"abilities": ["Blaze", "Solar Power"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "earthquake", "flareblitz", "swordsdance"],
+ "abilities": ["Blaze"]
}
]
},
@@ -791,9 +796,14 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"],
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"],
"abilities": ["Filter"],
- "preferredTypes": ["Psychic"]
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"],
+ "abilities": ["Filter"]
}
]
},
@@ -1500,7 +1510,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
"abilities": ["Intimidate"]
}
]
@@ -1617,12 +1627,14 @@
{
"role": "Wallbreaker",
"movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"],
- "abilities": ["Sniper"]
+ "abilities": ["Sniper"],
+ "preferredTypes": ["Poison"]
},
{
"role": "Bulky Attacker",
"movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"],
- "abilities": ["Sniper"]
+ "abilities": ["Sniper"],
+ "preferredTypes": ["Poison"]
}
]
},
@@ -2263,8 +2275,13 @@
"level": 86,
"sets": [
{
- "role": "Wallbreaker",
- "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"],
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "headsmash", "heavyslam", "rockpolish"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "stealthrock"],
"abilities": ["Rock Head"],
"preferredTypes": ["Ground"]
}
@@ -3273,12 +3290,7 @@
"sets": [
{
"role": "Bulky Support",
- "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Staller",
- "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"],
+ "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"],
"abilities": ["Sturdy"]
}
]
@@ -3689,7 +3701,7 @@
{
"role": "Fast Attacker",
"movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
- "abilities": ["Magnet Pull"]
+ "abilities": ["Analytic", "Magnet Pull"]
},
{
"role": "Staller",
@@ -5893,11 +5905,6 @@
"sylveon": {
"level": 84,
"sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"],
- "abilities": ["Pixilate"]
- },
{
"role": "Bulky Setup",
"movepool": ["calmmind", "hypervoice", "protect", "wish"],
diff --git a/data/random-battles/gen6/teams.ts b/data/random-battles/gen6/teams.ts
index 4e7c261f93..40bbbc656a 100644
--- a/data/random-battles/gen6/teams.ts
+++ b/data/random-battles/gen6/teams.ts
@@ -97,7 +97,7 @@ export class RandomGen6Teams extends RandomGen7Teams {
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'))
+ !counter.get('Psychic') && (types.has('Fighting') || types.has('Fairy') || 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),
@@ -250,6 +250,8 @@ export class RandomGen6Teams extends RandomGen7Teams {
['switcheroo', 'suckerpunch'],
// Jirachi
['bodyslam', 'healingwish'],
+ // Bastiodon
+ [['roar', 'protect'], ['metalburst', 'protect']],
];
for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
@@ -732,12 +734,6 @@ export class RandomGen6Teams extends RandomGen7Teams {
)
) 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')) &&
diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json
index df1a2c853e..5654350ef9 100644
--- a/data/random-battles/gen7/sets.json
+++ b/data/random-battles/gen7/sets.json
@@ -33,6 +33,11 @@
"abilities": ["Blaze", "Solar Power"],
"preferredTypes": ["Normal"]
},
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "earthquake", "flareblitz", "swordsdance"],
+ "abilities": ["Blaze"]
+ },
{
"role": "Bulky Attacker",
"movepool": ["airslash", "earthquake", "fireblast", "roost", "willowisp"],
@@ -975,9 +980,14 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "nastyplot", "psychic", "psyshock", "shadowball"],
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"],
"abilities": ["Filter"],
- "preferredTypes": ["Psychic"]
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"],
+ "abilities": ["Filter"]
}
]
},
@@ -1716,7 +1726,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
"abilities": ["Intimidate"]
}
]
@@ -1770,10 +1780,15 @@
"level": 82,
"sets": [
{
- "role": "Wallbreaker",
+ "role": "Setup Sweeper",
"movepool": ["closecombat", "facade", "knockoff", "swordsdance"],
"abilities": ["Guts"]
},
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "knockoff", "megahorn"],
+ "abilities": ["Guts"]
+ },
{
"role": "Fast Attacker",
"movepool": ["closecombat", "knockoff", "megahorn", "stoneedge"],
@@ -2493,8 +2508,13 @@
"level": 87,
"sets": [
{
- "role": "Wallbreaker",
- "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "rockpolish", "stealthrock"],
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "headsmash", "heavyslam", "rockpolish"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "stealthrock"],
"abilities": ["Rock Head"],
"preferredTypes": ["Ground"]
}
@@ -3557,12 +3577,7 @@
"sets": [
{
"role": "Bulky Support",
- "movepool": ["metalburst", "roar", "rockblast", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Staller",
- "movepool": ["metalburst", "protect", "roar", "rockblast", "stealthrock", "toxic"],
+ "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"],
"abilities": ["Sturdy"]
}
]
@@ -4003,7 +4018,7 @@
{
"role": "Fast Attacker",
"movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
- "abilities": ["Magnet Pull"]
+ "abilities": ["Analytic", "Magnet Pull"]
},
{
"role": "Staller",
@@ -6363,11 +6378,6 @@
"sylveon": {
"level": 85,
"sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "hiddenpowerground", "hypervoice", "protect", "psyshock", "wish"],
- "abilities": ["Pixilate"]
- },
{
"role": "Bulky Setup",
"movepool": ["calmmind", "hypervoice", "protect", "wish"],
@@ -6833,7 +6843,7 @@
"sets": [
{
"role": "AV Pivot",
- "movepool": ["earthquake", "hiddenpowergrass", "hydropump", "icebeam", "scald", "uturn"],
+ "movepool": ["earthquake", "hydropump", "icebeam", "scald", "uturn"],
"abilities": ["Schooling"],
"preferredTypes": ["Ice"]
},
@@ -7420,7 +7430,12 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["bulkup", "hornleech", "megahorn", "stoneedge", "superpower", "woodhammer"],
+ "movepool": ["hornleech", "megahorn", "stoneedge", "superpower", "woodhammer"],
+ "abilities": ["Grassy Surge"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hornleech", "stoneedge", "superpower", "swordsdance", "woodhammer"],
"abilities": ["Grassy Surge"]
}
]
@@ -7468,7 +7483,7 @@
},
{
"role": "Z-Move user",
- "movepool": ["calmmind", "moonblast", "moongeistbeam", "psyshock", "roost"],
+ "movepool": ["calmmind", "moongeistbeam", "psyshock", "roost"],
"abilities": ["Shadow Shield"]
}
]
@@ -7477,7 +7492,7 @@
"level": 79,
"sets": [
{
- "role": "Fast Support",
+ "role": "Bulky Attacker",
"movepool": ["grassknot", "hiddenpowerfire", "hiddenpowerground", "powergem", "sludgewave", "stealthrock", "thunderbolt", "toxicspikes"],
"abilities": ["Beast Boost"],
"preferredTypes": ["Rock"]
diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts
index 3f6278ca55..553e7e4469 100644
--- a/data/random-battles/gen7/teams.ts
+++ b/data/random-battles/gen7/teams.ts
@@ -135,7 +135,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
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')
+ types.has('Fighting') || types.has('Fairy') || movePool.includes('psychicfangs') || movePool.includes('calmmind')
)
),
Rock: (movePool, moves, abilities, types, counter, species) => (!counter.get('Rock') && species.baseStats.atk >= 80),
@@ -367,6 +367,8 @@ export class RandomGen7Teams extends RandomGen8Teams {
['switcheroo', 'suckerpunch'],
// Jirachi
['bodyslam', 'healingwish'],
+ // Bastiodon
+ [['roar', 'protect'], ['metalburst', 'protect']],
];
for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
@@ -955,12 +957,6 @@ export class RandomGen7Teams extends RandomGen8Teams {
)
) 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')) &&
diff --git a/data/random-battles/gen8/data.json b/data/random-battles/gen8/data.json
index d0f0d2514e..61aefbcef3 100644
--- a/data/random-battles/gen8/data.json
+++ b/data/random-battles/gen8/data.json
@@ -418,7 +418,7 @@
},
"articunogalar": {
"level": 81,
- "moves": ["airslash", "calmmind", "freezingglare", "recover"],
+ "moves": ["calmmind", "freezingglare", "hurricane", "recover"],
"doublesLevel": 81,
"doublesMoves": ["calmmind", "freezingglare", "hurricane", "recover", "tailwind"],
"noDynamaxMoves": ["calmmind", "freezingglare", "hurricane", "recover"]
@@ -458,7 +458,7 @@
},
"mewtwo": {
"level": 71,
- "moves": ["fireblast", "nastyplot", "psystrike", "recover", "shadowball"],
+ "moves": ["aurasphere", "fireblast", "nastyplot", "psystrike", "recover"],
"doublesLevel": 74,
"doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"]
},
@@ -1820,7 +1820,7 @@
},
"sylveon": {
"level": 83,
- "moves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock", "shadowball", "wish"],
+ "moves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock", "wish"],
"doublesLevel": 80,
"doublesMoves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock"]
},
@@ -2149,7 +2149,7 @@
},
"silvallyice": {
"level": 83,
- "moves": ["flamecharge", "multiattack", "psychicfangs", "swordsdance"],
+ "moves": ["flamecharge", "multiattack", "rockslide", "swordsdance"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind", "thunderbolt"]
},
@@ -2161,7 +2161,7 @@
},
"silvallypsychic": {
"level": 83,
- "moves": ["crunch", "multiattack", "swordsdance", "uturn"],
+ "moves": ["flamecharge", "multiattack", "swordsdance", "xscissor"],
"doublesLevel": 88,
"doublesMoves": ["flamethrower", "multiattack", "partingshot", "tailwind", "xscissor"]
},
diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json
index 4e41b7b691..2045bd1ba4 100644
--- a/data/random-battles/gen9/doubles-sets.json
+++ b/data/random-battles/gen9/doubles-sets.json
@@ -49,7 +49,7 @@
},
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Dragon Tail", "Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"],
+ "movepool": ["Glare", "Gunk Shot", "Knock Off", "Toxic Spikes"],
"abilities": ["Intimidate"],
"teraTypes": ["Dark"]
}
@@ -186,7 +186,7 @@
"role": "Doubles Support",
"movepool": ["Aurora Veil", "Blizzard", "Moonblast", "Protect"],
"abilities": ["Snow Warning"],
- "teraTypes": ["Ice", "Steel", "Water"]
+ "teraTypes": ["Steel", "Water"]
}
]
},
@@ -349,7 +349,7 @@
"level": 85,
"sets": [
{
- "role": "Doubles Bulky Attacker",
+ "role": "Doubles Support",
"movepool": ["Acid Spray", "Hydro Pump", "Icy Wind", "Knock Off", "Muddy Water", "Sludge Bomb", "Toxic Spikes"],
"abilities": ["Clear Body"],
"teraTypes": ["Grass"]
@@ -451,8 +451,8 @@
"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"],
+ "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Gas", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch", "Sticky Hold"],
"teraTypes": ["Dark"]
}
]
@@ -589,9 +589,9 @@
"level": 91,
"sets": [
{
- "role": "Doubles Support",
+ "role": "Doubles Bulky Attacker",
"movepool": ["Clear Smog", "Fire Blast", "Gunk Shot", "Poison Gas", "Protect", "Taunt", "Will-O-Wisp"],
- "abilities": ["Levitate", "Neutralizing Gas"],
+ "abilities": ["Levitate"],
"teraTypes": ["Dark"]
}
]
@@ -602,13 +602,13 @@
{
"role": "Doubles Bulky Attacker",
"movepool": ["Gunk Shot", "Poison Gas", "Protect", "Strange Steam", "Taunt", "Will-O-Wisp"],
- "abilities": ["Levitate", "Neutralizing Gas"],
+ "abilities": ["Levitate"],
"teraTypes": ["Dark", "Steel"]
},
{
"role": "Offensive Protect",
"movepool": ["Dazzling Gleam", "Fire Blast", "Gunk Shot", "Protect"],
- "abilities": ["Levitate", "Neutralizing Gas"],
+ "abilities": ["Levitate"],
"teraTypes": ["Fire"]
}
]
@@ -848,7 +848,7 @@
"sets": [
{
"role": "Doubles Fast Attacker",
- "movepool": ["Freezing Glare", "Hurricane", "Protect", "Recover", "Tailwind"],
+ "movepool": ["Freezing Glare", "Hurricane", "Protect", "Tailwind"],
"abilities": ["Competitive"],
"teraTypes": ["Flying", "Ground", "Steel"]
}
@@ -886,10 +886,16 @@
"level": 79,
"sets": [
{
- "role": "Doubles Bulky Attacker",
- "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Protect", "Scorching Sands", "Tailwind"],
+ "role": "Doubles Support",
+ "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Protect", "Tailwind"],
"abilities": ["Flame Body"],
"teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Scorching Sands", "Tailwind"],
+ "abilities": ["Flame Body"],
+ "teraTypes": ["Ground"]
}
]
},
@@ -1289,7 +1295,13 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Crunch", "Gunk Shot", "Icy Wind", "Throat Chop", "Toxic Spikes"],
+ "movepool": ["Crunch", "Gunk Shot", "Icy Wind", "Toxic Spikes"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Flying"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Gunk Shot", "Icy Wind", "Throat Chop", "Toxic Spikes"],
"abilities": ["Intimidate"],
"teraTypes": ["Flying"]
}
@@ -1538,7 +1550,7 @@
"role": "Doubles Bulky Setup",
"movepool": ["Dragon Dance", "High Horsepower", "Knock Off", "Protect", "Rock Slide", "Stone Edge"],
"abilities": ["Sand Stream"],
- "teraTypes": ["Ghost", "Rock"]
+ "teraTypes": ["Ghost"]
},
{
"role": "Doubles Bulky Attacker",
@@ -1721,7 +1733,13 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["After You", "Double-Edge", "Encore", "Icy Wind", "Knock Off", "Slack Off", "Thunder Wave"],
+ "movepool": ["Double-Edge", "Icy Wind", "Knock Off", "Slack Off", "Thunder Wave"],
+ "abilities": ["Vital Spirit"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Body Slam", "Encore", "Icy Wind", "Knock Off"],
"abilities": ["Vital Spirit"],
"teraTypes": ["Ghost"]
}
@@ -1963,7 +1981,7 @@
{
"role": "Offensive Protect",
"movepool": ["Flamethrower", "Glare", "Gunk Shot", "Knock Off", "Protect"],
- "abilities": ["Infiltrator"],
+ "abilities": ["Shed Skin"],
"teraTypes": ["Dark", "Fire", "Poison"]
}
]
@@ -2289,6 +2307,18 @@
"movepool": ["Headlong Rush", "Protect", "Shell Smash", "Wood Hammer"],
"abilities": ["Overgrow"],
"teraTypes": ["Fire", "Ground"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Headlong Rush", "Rock Slide", "Shell Smash", "Wood Hammer"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Rock"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Headlong Rush", "Protect", "Rock Slide", "Shell Smash"],
+ "abilities": ["Overgrow"],
+ "teraTypes": ["Rock"]
}
]
},
@@ -2555,7 +2585,7 @@
"role": "Doubles Support",
"movepool": ["High Horsepower", "Slack Off", "Stealth Rock", "Stone Edge", "Whirlwind"],
"abilities": ["Sand Stream"],
- "teraTypes": ["Dragon", "Rock", "Steel", "Water"]
+ "teraTypes": ["Dragon", "Steel", "Water"]
}
]
},
@@ -2624,8 +2654,8 @@
"level": 84,
"sets": [
{
- "role": "Doubles Bulky Attacker",
- "movepool": ["Body Press", "Electroweb", "Flash Cannon", "Protect", "Thunderbolt", "Volt Switch"],
+ "role": "Doubles Support",
+ "movepool": ["Electroweb", "Flash Cannon", "Protect", "Thunderbolt", "Volt Switch"],
"abilities": ["Sturdy"],
"teraTypes": ["Flying"]
}
@@ -2670,7 +2700,7 @@
"sets": [
{
"role": "Choice Item user",
- "movepool": ["Fire Blast", "Focus Blast", "Heat Wave", "Scorching Sands", "Thunderbolt"],
+ "movepool": ["Fire Blast", "Focus Blast", "Heat Wave", "Thunderbolt"],
"abilities": ["Flame Body"],
"teraTypes": ["Fighting", "Fire", "Grass"]
},
@@ -3167,9 +3197,15 @@
"sets": [
{
"role": "Doubles Setup Sweeper",
- "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover", "Sludge Bomb"],
+ "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"],
"abilities": ["Multitype"],
- "teraTypes": ["Fire", "Poison"]
+ "teraTypes": ["Fire"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Judgment", "Recover", "Sludge Bomb"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Poison"]
}
]
},
@@ -3189,9 +3225,9 @@
"sets": [
{
"role": "Doubles Bulky Setup",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Earth Power", "Fire Blast", "Recover"],
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Earth Power", "Recover"],
"abilities": ["Multitype"],
- "teraTypes": ["Fairy", "Fire", "Ground"]
+ "teraTypes": ["Fairy", "Ground"]
},
{
"role": "Doubles Support",
@@ -3228,9 +3264,15 @@
"sets": [
{
"role": "Doubles Setup Sweeper",
- "movepool": ["Calm Mind", "Earth Power", "Fire Blast", "Judgment", "Recover"],
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
"abilities": ["Multitype"],
"teraTypes": ["Flying", "Ground"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Judgment", "Recover", "Snarl", "Tailwind", "Taunt", "Will-O-Wisp"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Steel"]
}
]
},
@@ -3241,13 +3283,13 @@
"role": "Doubles Setup Sweeper",
"movepool": ["Brick Break", "Extreme Speed", "Phantom Force", "Swords Dance"],
"abilities": ["Multitype"],
- "teraTypes": ["Ghost", "Normal"]
+ "teraTypes": ["Normal"]
},
{
"role": "Doubles Bulky Setup",
- "movepool": ["Calm Mind", "Dazzling Gleam", "Focus Blast", "Judgment", "Recover"],
+ "movepool": ["Calm Mind", "Focus Blast", "Judgment", "Recover"],
"abilities": ["Multitype"],
- "teraTypes": ["Fairy", "Fighting"]
+ "teraTypes": ["Fighting"]
}
]
},
@@ -3267,9 +3309,15 @@
"sets": [
{
"role": "Doubles Bulky Setup",
- "movepool": ["Calm Mind", "Fire Blast", "Ice Beam", "Judgment", "Recover"],
+ "movepool": ["Calm Mind", "Ice Beam", "Judgment", "Recover"],
"abilities": ["Multitype"],
- "teraTypes": ["Ground", "Ice"]
+ "teraTypes": ["Dragon", "Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Calm Mind", "Fire Blast", "Judgment", "Recover"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Fire"]
},
{
"role": "Doubles Setup Sweeper",
@@ -3283,10 +3331,16 @@
"level": 73,
"sets": [
{
- "role": "Doubles Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover", "Thunderbolt"],
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Calm Mind", "Earth Power", "Judgment", "Recover"],
"abilities": ["Multitype"],
- "teraTypes": ["Electric", "Ground"]
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Doubles Bulky Setup",
+ "movepool": ["Calm Mind", "Judgment", "Recover", "Thunderbolt"],
+ "abilities": ["Multitype"],
+ "teraTypes": ["Electric"]
}
]
},
@@ -3486,7 +3540,13 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind", "Taunt"],
+ "movepool": ["Encore", "Moonblast", "Tailwind", "Taunt"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Fire", "Ghost", "Steel"]
+ },
+ {
+ "role": "Doubles Support",
+ "movepool": ["Encore", "Helping Hand", "Moonblast", "Tailwind"],
"abilities": ["Prankster"],
"teraTypes": ["Fire", "Ghost", "Steel"]
}
@@ -3884,7 +3944,7 @@
{
"role": "Doubles Setup Sweeper",
"movepool": ["Bug Buzz", "Heat Wave", "Protect", "Quiver Dance"],
- "abilities": ["Flame Body", "Swarm"],
+ "abilities": ["Flame Body"],
"teraTypes": ["Fire", "Ground", "Water"]
},
{
@@ -3972,14 +4032,14 @@
"level": 79,
"sets": [
{
- "role": "Bulky Protect",
+ "role": "Doubles Support",
"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"],
+ "movepool": ["Acrobatics", "Grass Knot", "Knock Off", "Protect", "Wildbolt Storm"],
"abilities": ["Defiant"],
"teraTypes": ["Electric", "Flying", "Steel"]
},
@@ -4242,13 +4302,7 @@
"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"],
+ "movepool": ["Fake Out", "Helping Hand", "Light Screen", "Psychic", "Reflect", "Thunder Wave"],
"abilities": ["Prankster"],
"teraTypes": ["Dark", "Steel"]
}
@@ -4317,7 +4371,7 @@
"role": "Tera Blast user",
"movepool": ["Hyper Voice", "Protect", "Quick Attack", "Tera Blast"],
"abilities": ["Pixilate"],
- "teraTypes": ["Fire", "Ground"]
+ "teraTypes": ["Ground"]
}
]
},
@@ -4593,7 +4647,7 @@
"sets": [
{
"role": "Doubles Wallbreaker",
- "movepool": ["Drain Punch", "Gunk Shot", "Ice Hammer", "Protect", "Wide Guard"],
+ "movepool": ["Drain Punch", "Gunk Shot", "Ice Hammer", "Protect"],
"abilities": ["Iron Fist"],
"teraTypes": ["Fire", "Poison"]
}
@@ -4609,7 +4663,7 @@
"teraTypes": ["Ground"]
},
{
- "role": "Doubles Bulky Setup",
+ "role": "Bulky Protect",
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
"abilities": ["Dancer"],
"teraTypes": ["Ground"]
@@ -4626,7 +4680,7 @@
"teraTypes": ["Ground"]
},
{
- "role": "Doubles Bulky Setup",
+ "role": "Bulky Protect",
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
"abilities": ["Dancer"],
"teraTypes": ["Ground"]
@@ -4643,7 +4697,7 @@
"teraTypes": ["Fighting", "Ground"]
},
{
- "role": "Doubles Bulky Setup",
+ "role": "Bulky Protect",
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
"abilities": ["Dancer"],
"teraTypes": ["Fighting", "Ground"]
@@ -4660,7 +4714,7 @@
"teraTypes": ["Fighting", "Ground"]
},
{
- "role": "Doubles Bulky Setup",
+ "role": "Bulky Protect",
"movepool": ["Air Slash", "Protect", "Quiver Dance", "Revelation Dance"],
"abilities": ["Dancer"],
"teraTypes": ["Fighting", "Ground"]
@@ -5010,13 +5064,13 @@
{
"role": "Doubles Setup Sweeper",
"movepool": ["Clanging Scales", "Clangorous Soul", "Drain Punch", "Iron Head"],
- "abilities": ["Soundproof"],
+ "abilities": ["Bulletproof", "Soundproof"],
"teraTypes": ["Steel"]
},
{
"role": "Doubles Bulky Setup",
"movepool": ["Clanging Scales", "Clangorous Soul", "Iron Head", "Protect"],
- "abilities": ["Soundproof"],
+ "abilities": ["Bulletproof", "Soundproof"],
"teraTypes": ["Steel"]
},
{
@@ -5273,7 +5327,7 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Fake Out", "Light Screen", "Parting Shot", "Reflect", "Spirit Break"],
+ "movepool": ["Fake Out", "Light Screen", "Parting Shot", "Reflect", "Spirit Break", "Thunder Wave"],
"abilities": ["Prankster"],
"teraTypes": ["Steel"]
},
@@ -5476,7 +5530,13 @@
"sets": [
{
"role": "Offensive Protect",
- "movepool": ["Draco Meteor", "Dragon Darts", "Fire Blast", "Protect", "Shadow Ball"],
+ "movepool": ["Draco Meteor", "Dragon Darts", "Protect", "Shadow Ball"],
+ "abilities": ["Clear Body"],
+ "teraTypes": ["Dragon"]
+ },
+ {
+ "role": "Offensive Protect",
+ "movepool": ["Dragon Darts", "Fire Blast", "Protect", "Shadow Ball"],
"abilities": ["Clear Body"],
"teraTypes": ["Dragon"]
},
@@ -5868,9 +5928,15 @@
},
{
"role": "Doubles Fast Attacker",
- "movepool": ["First Impression", "Leech Life", "Protect", "Sucker Punch"],
+ "movepool": ["First Impression", "Knock Off", "Protect", "Sucker Punch"],
"abilities": ["Tinted Lens"],
- "teraTypes": ["Bug"]
+ "teraTypes": ["Bug", "Dark"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["First Impression", "Knock Off", "Leech Life", "Protect"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Bug"]
}
]
},
@@ -6018,7 +6084,7 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Electroweb", "Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt", "Volt Switch"],
+ "movepool": ["Electroweb", "Muddy Water", "Slack Off", "Thunder Wave", "Thunderbolt"],
"abilities": ["Electromorphosis"],
"teraTypes": ["Water"]
}
@@ -6159,7 +6225,7 @@
{
"role": "Doubles Support",
"movepool": ["Encore", "Fake Out", "Gigaton Hammer", "Knock Off", "Play Rough", "Stealth Rock"],
- "abilities": ["Mold Breaker"],
+ "abilities": ["Mold Breaker", "Own Tempo"],
"teraTypes": ["Steel", "Water"]
}
]
@@ -6490,7 +6556,7 @@
"sets": [
{
"role": "Doubles Wallbreaker",
- "movepool": ["Close Combat", "First Impression", "Flare Blitz", "U-turn", "Wild Charge"],
+ "movepool": ["Close Combat", "First Impression", "Flare Blitz", "Protect", "U-turn", "Wild Charge"],
"abilities": ["Protosynthesis"],
"teraTypes": ["Bug", "Electric", "Fighting", "Fire"]
}
diff --git a/data/random-battles/gen9/sets.json b/data/random-battles/gen9/sets.json
index bf8b2e3984..6740222d10 100644
--- a/data/random-battles/gen9/sets.json
+++ b/data/random-battles/gen9/sets.json
@@ -643,7 +643,7 @@
},
{
"role": "Bulky Setup",
- "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Substitute"],
+ "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Sleep Powder", "Substitute"],
"abilities": ["Harvest"],
"teraTypes": ["Steel"]
}
@@ -695,7 +695,7 @@
{
"role": "Setup Sweeper",
"movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"],
- "abilities": ["Inner Focus", "Iron Fist"],
+ "abilities": ["Iron Fist"],
"teraTypes": ["Dark", "Fighting"]
},
{
@@ -703,6 +703,12 @@
"movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Poison Jab", "Rapid Spin"],
"abilities": ["Iron Fist"],
"teraTypes": ["Dark", "Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Drain Punch", "Encore", "Knock Off", "Poison Jab", "Rapid Spin", "Taunt"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Steel"]
}
]
},
@@ -2382,6 +2388,12 @@
"luvdisc": {
"level": 100,
"sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Endeavor", "Flip Turn", "Substitute", "Surf"],
+ "abilities": ["Swift Swim"],
+ "teraTypes": ["Ghost", "Ground"]
+ },
{
"role": "Fast Support",
"movepool": ["Endeavor", "Substitute", "Surf", "Whirlpool"],
@@ -3185,7 +3197,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock", "Trailblaze"],
+ "movepool": ["Earthquake", "Ice Shard", "Icicle Crash", "Knock Off", "Stealth Rock"],
"abilities": ["Thick Fat"],
"teraTypes": ["Ground", "Ice"]
}
@@ -3247,7 +3259,7 @@
},
{
"role": "Bulky Support",
- "movepool": ["Earthquake", "Pain Split", "Poltergeist", "Will-O-Wisp"],
+ "movepool": ["Earthquake", "Pain Split", "Poltergeist", "Shadow Sneak", "Will-O-Wisp"],
"abilities": ["Frisk"],
"teraTypes": ["Dark", "Fairy"]
},
@@ -3288,7 +3300,13 @@
"role": "Bulky Attacker",
"movepool": ["Hydro Pump", "Nasty Plot", "Pain Split", "Thunderbolt", "Trick", "Volt Switch", "Will-O-Wisp"],
"abilities": ["Levitate"],
- "teraTypes": ["Electric", "Water"]
+ "teraTypes": ["Electric", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Discharge", "Hydro Pump", "Pain Split", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
}
]
},
@@ -3299,7 +3317,13 @@
"role": "Bulky Attacker",
"movepool": ["Nasty Plot", "Overheat", "Pain Split", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
"abilities": ["Levitate"],
- "teraTypes": ["Electric", "Fire"]
+ "teraTypes": ["Electric", "Fire", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Discharge", "Overheat", "Pain Split", "Volt Switch", "Will-O-Wisp"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Electric", "Steel"]
}
]
},
@@ -3319,7 +3343,7 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["Air Slash", "Nasty Plot", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
+ "movepool": ["Air Slash", "Nasty Plot", "Thunder Wave", "Thunderbolt", "Volt Switch", "Will-O-Wisp"],
"abilities": ["Levitate"],
"teraTypes": ["Electric", "Steel"]
}
@@ -3740,16 +3764,10 @@
"level": 69,
"sets": [
{
- "role": "Bulky Support",
- "movepool": ["Focus Blast", "Judgment", "Recover", "Will-O-Wisp"],
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "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"]
+ "teraTypes": ["Dark", "Fighting"]
}
]
},
@@ -4017,7 +4035,13 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["Encore", "Giga Drain", "Leech Seed", "Moonblast", "Stun Spore", "Substitute", "U-turn"],
+ "movepool": ["Encore", "Giga Drain", "Moonblast", "Stun Spore", "U-turn"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Poison", "Steel"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Leech Seed", "Moonblast", "Substitute"],
"abilities": ["Prankster"],
"teraTypes": ["Poison", "Steel"]
}
@@ -5011,7 +5035,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["Drain Punch", "Horn Leech", "Poltergeist", "Rest", "Trick Room", "Will-O-Wisp", "Wood Hammer"],
+ "movepool": ["Drain Punch", "Horn Leech", "Poltergeist", "Rest", "Will-O-Wisp", "Wood Hammer"],
"abilities": ["Natural Cure"],
"teraTypes": ["Fighting"]
},
@@ -5515,9 +5539,9 @@
"sets": [
{
"role": "Setup Sweeper",
- "movepool": ["Drain Punch", "Play Rough", "Shadow Sneak", "Swords Dance", "Wood Hammer"],
+ "movepool": ["Drain Punch", "Play Rough", "Shadow Sneak", "Swords Dance"],
"abilities": ["Disguise"],
- "teraTypes": ["Fairy", "Fighting", "Grass"]
+ "teraTypes": ["Fairy", "Fighting"]
},
{
"role": "Fast Bulky Setup",
@@ -6563,7 +6587,7 @@
"sets": [
{
"role": "Bulky Support",
- "movepool": ["Body Press", "Play Rough", "Protect", "Stomping Tantrum", "Wish"],
+ "movepool": ["Body Press", "Play Rough", "Protect", "Wish", "Yawn"],
"abilities": ["Well-Baked Body"],
"teraTypes": ["Steel"]
}
@@ -7126,7 +7150,7 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["Close Combat", "Seed Bomb", "Spore", "Sucker Punch"],
+ "movepool": ["Close Combat", "Crunch", "Spore", "Sucker Punch"],
"abilities": ["Protosynthesis"],
"teraTypes": ["Fighting", "Poison"]
},
diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts
index 8d21a57e89..99fea6cb97 100644
--- a/data/random-battles/gen9/teams.ts
+++ b/data/random-battles/gen9/teams.ts
@@ -104,7 +104,7 @@ const SPEED_CONTROL = [
];
// Moves that shouldn't be the only STAB moves:
const NO_STAB = [
- 'accelerock', 'aquajet', 'bounce', 'breakingswipe', 'bulletpunch', 'chatter', 'chloroblast', 'clearsmog', 'covet',
+ 'acidspray', 'accelerock', 'aquajet', 'bounce', 'breakingswipe', 'bulletpunch', 'chatter', 'chloroblast', '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', 'trailblaze',
@@ -501,7 +501,7 @@ export class RandomTeams {
// Team-based move culls
if (teamDetails.screens) {
- if (movePool.includes('auroraveil')) this.fastPop(movePool, movePool.indexOf('auroraveil'));
+ if (movePool.includes('auroraveil') && !isDoubles) 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'));
@@ -568,7 +568,6 @@ export class RandomTeams {
[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']],
@@ -816,12 +815,6 @@ export class RandomTeams {
}
}
- // Enforce Encore on Whimsicott
- if (movePool.includes('encore') && species.id === 'whimsicott') {
- counter = this.addMove('encore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
// Enforce moves in doubles
if (isDoubles) {
const doublesEnforcedMoves = ['mortalspin', 'spore'];
@@ -841,11 +834,6 @@ export class RandomTeams {
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
@@ -1111,7 +1099,6 @@ export class RandomTeams {
// 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';
diff --git a/data/random-battles/gen9baby/sets.json b/data/random-battles/gen9baby/sets.json
index 8f41c6ea17..0507dbd0ac 100644
--- a/data/random-battles/gen9baby/sets.json
+++ b/data/random-battles/gen9baby/sets.json
@@ -1101,7 +1101,7 @@
"level": 5,
"sets": [
{
- "role": "Setup Sweeper",
+ "role": "Bulky Setup",
"movepool": ["Dual Wingbeat", "Earthquake", "Knock Off", "Swords Dance"],
"abilities": ["Immunity"],
"teraTypes": ["Steel", "Water"]
@@ -1970,7 +1970,7 @@
"level": 6,
"sets": [
{
- "role": "Setup Sweeper",
+ "role": "Bulky Setup",
"movepool": ["Iron Head", "Night Slash", "Sucker Punch", "Swords Dance"],
"abilities": ["Defiant"],
"teraTypes": ["Dark", "Fairy", "Steel"]
@@ -2599,7 +2599,7 @@
]
},
"skiddo": {
- "level": 7,
+ "level": 6,
"sets": [
{
"role": "Bulky Setup",
From d7697566392007ff2c57c3db77a3c6bcfed42000 Mon Sep 17 00:00:00 2001
From: InkyDarkBird <102001461+InkyDarkBird@users.noreply.github.com>
Date: Sun, 1 Feb 2026 16:12:56 -0500
Subject: [PATCH 057/233] SV Flipped: Fix bans (#11739)
---
config/formats.ts | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 98ef07caa5..6f80143459 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -487,10 +487,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
banlist: [
'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
- 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Lugia', 'Lunala',
- 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram',
- 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned',
- 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Kyurem-Black',
+ 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin',
+ 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian', 'Zacian-Crowned',
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects',
+ 'Shed Tail',
],
},
{
From 1cbbf9bf652f9e28f501f1d5182dabc97418350a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 1 Feb 2026 23:31:28 +0000
Subject: [PATCH 058/233] Gen 3 Pursuit only activates on the selected target
(#11611)
* Gen 3 Pursuit only activates on the chosen target
* Change
* Fix following Pursuits
* Resolve further conflicts
* Update gen 4
* Don't need to check for allies
---
data/mods/gen2/moves.ts | 16 ++++----
data/mods/gen3/moves.ts | 14 +++++++
data/mods/gen4/moves.ts | 11 +++--
data/moves.ts | 10 ++---
test/sim/moves/pursuit.js | 86 +++++++++++++++++++++++++++++++++++++++
5 files changed, 115 insertions(+), 22 deletions(-)
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index c6ad3efc10..a93ee5c525 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -573,16 +573,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
pursuit: {
inherit: true,
- beforeTurnCallback(pokemon) {
- for (const side of this.sides) {
- if (side.hasAlly(pokemon)) continue;
- side.addSideCondition('pursuit', pokemon);
- const data = side.getSideConditionData('pursuit');
- if (!data.sources) {
- data.sources = [];
- }
- data.sources.push(pokemon);
+ beforeTurnCallback(pokemon, target) {
+ if (pokemon.isAlly(target)) return;
+ target.addVolatile('pursuit');
+ const data = target.volatiles['pursuit'];
+ if (!data.sources) {
+ data.sources = [];
}
+ data.sources.push(pokemon);
},
onModifyMove() {},
condition: {
diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts
index 9764e11df8..191b050808 100644
--- a/data/mods/gen3/moves.ts
+++ b/data/mods/gen3/moves.ts
@@ -578,6 +578,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
basePower: 70,
},
+ pursuit: {
+ inherit: true,
+ beforeTurnCallback(pokemon, target) {
+ if (['frz', 'slp'].includes(pokemon.status) ||
+ (pokemon.hasAbility('truant') && pokemon.truantTurn)) return;
+ if (pokemon.isAlly(target)) return;
+ target.addVolatile('pursuit');
+ const data = target.volatiles['pursuit'];
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
+ },
+ },
recover: {
inherit: true,
pp: 20,
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 38282c5cbe..3caeea4ac3 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1333,12 +1333,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pursuit: {
inherit: true,
beforeTurnCallback(pokemon) {
- if (['frz', 'slp'].includes(pokemon.status) || (pokemon.hasAbility('truant') &&
- (pokemon.volatiles['truant'] || pokemon.truantTurn))) return;
- for (const side of this.sides) {
- if (side.hasAlly(pokemon)) continue;
- side.addSideCondition('pursuit', pokemon);
- const data = side.getSideConditionData('pursuit');
+ if (['frz', 'slp'].includes(pokemon.status) ||
+ (pokemon.hasAbility('truant') && pokemon.volatiles['truant'])) return;
+ for (const target of pokemon.foes()) {
+ target.addVolatile('pursuit');
+ const data = target.volatiles['pursuit'];
if (!data.sources) {
data.sources = [];
}
diff --git a/data/moves.ts b/data/moves.ts
index 50bfecdc3b..e19821ac7f 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -14914,10 +14914,9 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
beforeTurnCallback(pokemon) {
- for (const side of this.sides) {
- if (side.hasAlly(pokemon)) continue;
- side.addSideCondition('pursuit', pokemon);
- const data = side.getSideConditionData('pursuit');
+ for (const target of pokemon.foes()) {
+ target.addVolatile('pursuit');
+ const data = target.volatiles['pursuit'];
if (!data.sources) {
data.sources = [];
}
@@ -14927,9 +14926,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onModifyMove(move, source, target) {
if (target?.beingCalledBack || target?.switchFlag) move.accuracy = true;
},
- onTryHit(target, pokemon) {
- target.side.removeSideCondition('pursuit');
- },
condition: {
duration: 1,
onBeforeSwitchOut(pokemon) {
diff --git a/test/sim/moves/pursuit.js b/test/sim/moves/pursuit.js
index f66de5b62d..f3d634df71 100644
--- a/test/sim/moves/pursuit.js
+++ b/test/sim/moves/pursuit.js
@@ -64,6 +64,57 @@ describe(`Pursuit`, () => {
assert.bounded(furret.maxhp - furret.hp, [60, 70]);
});
+ it(`should activate on the first target switching out`, () => {
+ battle = common.createBattle({ gameType: 'doubles' }, [[
+ { species: "Beedrill", moves: ['pursuit'] },
+ { species: "Furret", moves: ['pursuit'] },
+ ], [
+ { species: "Clefable", ability: 'shellarmor', moves: ['calmmind'] },
+ { species: "Toxapex", moves: ['calmmind'] },
+ { species: "Wynaut", moves: ['calmmind'] },
+ { species: "Alakazam", moves: ['calmmind'] },
+ ]]);
+ const [clefable, toxapex, wynaut, alakazam] = battle.p2.pokemon;
+ battle.makeChoices('move pursuit 1, move pursuit 2', 'switch 3, switch 4'); // Does not matter who Pursuit targets
+ assert.bounded(clefable.maxhp - clefable.hp, [34 + 30, 40 + 35]);
+ assert.fullHP(toxapex);
+ assert.fullHP(wynaut);
+ assert.fullHP(alakazam);
+ });
+
+ it(`should activate on the second target switching out, if the first fainted`, () => {
+ battle = common.createBattle({ gameType: 'doubles' }, [[
+ { species: "Beedrill", moves: ['pursuit'] },
+ { species: "Furret", moves: ['pursuit'] },
+ ], [
+ { species: "Clefable", ability: 'shellarmor', moves: ['calmmind'] },
+ { species: "Shedinja", moves: ['calmmind'], evs: { spe: 252 } },
+ { species: "Wynaut", moves: ['calmmind'] },
+ { species: "Alakazam", moves: ['calmmind'] },
+ ]]);
+ const [clefable, shedinja, wynaut, alakazam] = battle.p2.pokemon;
+ battle.makeChoices('move pursuit 1, move pursuit 2', 'switch 3, switch 4');
+ assert.bounded(clefable.maxhp - clefable.hp, [34, 40]);
+ assert.fainted(shedinja);
+ assert.fullHP(wynaut);
+ assert.fullHP(alakazam);
+ });
+
+ it(`should activate on a switching opponent even if targeting an ally`, () => {
+ battle = common.createBattle({ gameType: 'doubles' }, [[
+ { species: "Beedrill", item: 'beedrillite', moves: ['pursuit'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ { species: "Furret", moves: ['calmmind'] },
+ ], [
+ { species: "Clefable", moves: ['calmmind'] },
+ { species: "Alakazam", moves: ['calmmind'] },
+ { species: "Roserade", moves: ['calmmind'] },
+ ]]);
+ const clefable = battle.p2.pokemon[0];
+ battle.makeChoices('move pursuit mega -2, switch 3', 'switch 3, move calmmind');
+ assert.bounded(clefable.maxhp - clefable.hp, [53, 63]);
+ });
+
it(`should not double in power or activate before a switch triggered by Red Card`, () => {
battle = common.createBattle([[
{ species: 'Steelix', item: 'redcard', moves: ['pursuit'] },
@@ -195,6 +246,41 @@ describe(`Pursuit`, () => {
battle.makeChoices('move Pursuit', 'switch 2');
assert(battle.p2.active[0].hp);
});
+
+ it(`should only activate on the targeted opponent`, () => {
+ battle = common.gen(3).createBattle({ gameType: 'doubles' }, [[
+ { species: "Beedrill", moves: ['pursuit'] },
+ { species: "Furret", moves: ['pursuit'] },
+ ], [
+ { species: "Clefable", ability: 'shellarmor', moves: ['calmmind'] },
+ { species: "Clefable", ability: 'shellarmor', moves: ['calmmind'] },
+ { species: "Wynaut", moves: ['calmmind'] },
+ { species: "Alakazam", moves: ['calmmind'] },
+ ]]);
+ const [clefable, clefable2, wynaut, alakazam] = battle.p2.pokemon;
+ battle.makeChoices('move pursuit 1, move pursuit 2', 'switch 3, switch 4');
+ assert.bounded(clefable.maxhp - clefable.hp, [35, 42]);
+ assert.bounded(clefable2.maxhp - clefable2.hp, [35, 42]);
+ assert.fullHP(wynaut);
+ assert.fullHP(alakazam);
+ });
+
+ it(`should not activate on a switching opponent if targeting an ally`, () => {
+ battle = common.gen(3).createBattle({ gameType: 'doubles' }, [[
+ { species: "Beedrill", moves: ['pursuit'] },
+ { species: "Clefable", moves: ['calmmind'] },
+ { species: "Furret", moves: ['calmmind'] },
+ ], [
+ { species: "Clefable", moves: ['calmmind'] },
+ { species: "Alakazam", moves: ['calmmind'] },
+ { species: "Roserade", moves: ['calmmind'] },
+ ]]);
+ const clefable = battle.p2.pokemon[0];
+ battle.makeChoices('move pursuit -2, switch 3', 'switch 3, move calmmind');
+ assert.fullHP(clefable);
+ const furret = battle.p1.pokemon[1];
+ assert.bounded(furret.maxhp - furret.hp, [25, 30]);
+ });
});
describe(`[Gen 2]`, () => {
From e847960a1b826594246d7e0958f5ae2cb0af0172 Mon Sep 17 00:00:00 2001
From: Lucas <33839844+Lucas-Meijer@users.noreply.github.com>
Date: Mon, 2 Feb 2026 00:32:18 +0100
Subject: [PATCH 059/233] Add different dexes to /reevo (#11731)
Co-authored-by: Meijer,L. (Lucas)
---
server/chat-plugins/othermetas.ts | 28 +++++++++++++++++++---------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git a/server/chat-plugins/othermetas.ts b/server/chat-plugins/othermetas.ts
index 37a54c70d4..284fd2bde1 100644
--- a/server/chat-plugins/othermetas.ts
+++ b/server/chat-plugins/othermetas.ts
@@ -849,20 +849,30 @@ export const commands: Chat.ChatCommands = {
reevo: 'showevo',
showevo(target, room, user, connection, cmd) {
- if (!this.runBroadcast()) return;
- const targetid = toID(target);
+ const args = target.split(',');
+ if (!toID(args[0])) return this.parse('/help reevohelp');
+ this.runBroadcast();
+ let dex = Dex;
+ if (args[1] && toID(args[1]) in Dex.dexes) {
+ dex = Dex.dexes[toID(args[1])];
+ } else if (room?.battle) {
+ const format = Dex.formats.get(room.battle.format);
+ dex = Dex.mod(format.mod);
+ }
+
+ const targetid = toID(args[0]);
const isReEvo = cmd === 'reevo';
if (!targetid) return this.parse(`/help ${isReEvo ? 're' : 'show'}evo`);
- const evo = Dex.species.get(target);
+ const evo = dex.species.get(targetid);
if (!evo.exists) {
- throw new Chat.ErrorMessage(`Error: Pok\u00e9mon ${target} not found.`);
+ throw new Chat.ErrorMessage(`Error: Pok\u00e9mon ${targetid} not found.`);
}
if (!evo.prevo) {
- const evoBaseSpecies = Dex.species.get(
+ const evoBaseSpecies = dex.species.get(
(Array.isArray(evo.battleOnly) ? evo.battleOnly[0] : evo.battleOnly) || evo.changesFrom || evo.name
);
if (!evoBaseSpecies.prevo) throw new Chat.ErrorMessage(`Error: ${evoBaseSpecies.name} is not an evolution.`);
- const prevoSpecies = Dex.species.get(evoBaseSpecies.prevo);
+ const prevoSpecies = dex.species.get(evoBaseSpecies.prevo);
const deltas = Utils.deepClone(evo);
if (!isReEvo) {
deltas.tier = 'CE';
@@ -901,14 +911,14 @@ export const commands: Chat.ChatCommands = {
const details = {
Gen: evo.gen,
Weight: `${deltas.weighthg < 0 ? "" : "+"}${deltas.weighthg / 10} kg`,
- Stage: (Dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
+ Stage: (dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
};
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);
if (!isReEvo) {
this.sendReply(`|raw|Gen: ${details["Gen"]} |  Weight: ${details["Weight"]} |  Stage: ${details["Stage"]}`);
}
} else {
- const prevoSpecies = Dex.species.get(evo.prevo);
+ const prevoSpecies = dex.species.get(evo.prevo);
const deltas = Utils.deepClone(evo);
if (!isReEvo) {
deltas.tier = 'CE';
@@ -941,7 +951,7 @@ export const commands: Chat.ChatCommands = {
const details = {
Gen: evo.gen,
Weight: `${deltas.weighthg < 0 ? "" : "+"}${deltas.weighthg / 10} kg`,
- Stage: (Dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
+ Stage: (dex.species.get(prevoSpecies.prevo).exists ? 3 : 2),
};
this.sendReply(`|raw|${Chat.getDataPokemonHTML(deltas)}`);
if (!isReEvo) {
From a6c45ecb45d859df35e72fee30d61204f49bdd45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 3 Feb 2026 00:47:14 +0000
Subject: [PATCH 060/233] Remove Slow Start volatile tag on suppression
(#11571)
---
data/abilities.ts | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/data/abilities.ts b/data/abilities.ts
index cbc7bf08b4..5eaa06b0ab 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -4255,6 +4255,10 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
return this.chainModify(0.5);
}
},
+ onEnd(pokemon) {
+ if (pokemon.beingCalledBack) return;
+ this.add('-end', pokemon, 'Slow Start', '[silent]');
+ },
flags: {},
name: "Slow Start",
rating: -1,
From 08562488b063a7a055197376736ed0c292f2ac2a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 3 Feb 2026 23:09:04 +0000
Subject: [PATCH 061/233] Refactor Illusion switch out check (#11742)
---
data/abilities.ts | 2 +-
sim/battle-actions.ts | 1 -
test/sim/abilities/illusion.js | 13 +++++++++++++
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 5eaa06b0ab..51be75b7eb 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -2017,7 +2017,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
}
},
onEnd(pokemon) {
- if (pokemon.illusion) {
+ if (pokemon.illusion && !pokemon.beingCalledBack) {
this.debug('illusion cleared');
pokemon.illusion = null;
const details = pokemon.getUpdatedDetails();
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 7879fdd6c0..b87cf131b0 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -100,7 +100,6 @@ export class BattleActions {
// will definitely switch out at this point
- oldActive.illusion = null;
this.battle.singleEvent('End', oldActive.getAbility(), oldActive.abilityState, oldActive);
this.battle.singleEvent('End', oldActive.getItem(), oldActive.itemState, oldActive);
diff --git a/test/sim/abilities/illusion.js b/test/sim/abilities/illusion.js
index a49e097d54..49917c37d4 100644
--- a/test/sim/abilities/illusion.js
+++ b/test/sim/abilities/illusion.js
@@ -10,6 +10,19 @@ describe('Illusion', () => {
battle.destroy();
});
+ it('should not wear off when switching out', () => {
+ battle = common.createBattle([[
+ { species: "Zoroark", ability: 'illusion', moves: ['sleeptalk'] },
+ { species: "Diglett", moves: ['sleeptalk'] },
+ ], [
+ { species: "Wynaut", moves: ['sleeptalk'] },
+ ]]);
+
+ battle.makeChoices('move sleeptalk', 'auto');
+ battle.makeChoices('switch 2', 'auto');
+ assert(battle.log.every(line => !line.includes('|-end|p1a: Zoroark|Illusion')));
+ });
+
it(`should not instantly wear off before Dynamaxing`, () => {
battle = common.gen(8).createBattle([[
{ species: "Zoroark", ability: 'illusion', moves: ['sleeptalk'] },
From 0fd2b67850b5d637f65b3cff9ecd298fdd61e90a Mon Sep 17 00:00:00 2001
From: Aurastic <33085835+ISenseAura@users.noreply.github.com>
Date: Wed, 4 Feb 2026 11:56:23 +0530
Subject: [PATCH 062/233] Automodchat: Prevent idle or busy staff from being
treated as online (#11727)
---
server/rooms.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/rooms.ts b/server/rooms.ts
index 8433eed21a..b98bb0331a 100644
--- a/server/rooms.ts
+++ b/server/rooms.ts
@@ -1078,7 +1078,7 @@ export abstract class BasicRoom {
runAutoModchat() {
if (!this.settings.autoModchat || this.settings.autoModchat.active) return;
// they are staff and online
- const staff = Object.values(this.users).filter(u => this.auth.atLeast(u, '%'));
+ const staff = Object.values(this.users).filter(u => this.auth.atLeast(u, '%') && u.statusType === 'online');
if (!staff.length) {
const { time } = this.settings.autoModchat;
if (!time || time < 5) {
From 2ca5d0f3caf176a370ce450002a0f591c615c04b Mon Sep 17 00:00:00 2001
From: HiZo <96159984+HisuianZoroark@users.noreply.github.com>
Date: Fri, 6 Feb 2026 03:16:16 -0500
Subject: [PATCH 063/233] Mix and Mega formats: Fix banlists (#11743)
* LC Mix and Mega: Bans Sticky Web
* @clastia smells
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 6f80143459..0817632f56 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -592,7 +592,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', 'Sneasler', 'Solgaleo', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Walking Wake',
'Zacian', 'Zekrom', 'Zoroark-Hisui', 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Blood Moon', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw',
'Dragon Energy', 'Electro Shot', 'Extreme Speed', 'Fillet Away', 'Gigaton Hammer', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Power Trip',
- 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Torch Song', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow',
+ 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Torch Song', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow',
],
onValidateTeam(team) {
const itemTable = new Set();
@@ -2898,7 +2898,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
banlist: [
'Basculin-White-Striped', 'Dunsparce', 'Duraludon', 'Meditite', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Moody',
'Absolite Z', 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Lucarionite Z', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Zygardite',
- 'Baton Pass',
+ 'Baton Pass', 'Sticky Web',
],
restricted: [
'Aipom', 'Buizel', 'Cutiefly', 'Dratini', 'Elekid', 'Gastly', 'Girafarig', 'Gligar', 'Mienfoo',
From af4f85a33c6b7c0afe840723d7b1ddf1d84d00ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Fri, 6 Feb 2026 08:16:33 +0000
Subject: [PATCH 064/233] ADV UU: Drop Fearow, Hypno and Manectric (#11740)
https://www.smogon.com/forums/threads/adv-rarelyused.3731043/post-10860568
---
data/mods/gen3/formats-data.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/data/mods/gen3/formats-data.ts b/data/mods/gen3/formats-data.ts
index d56a3693da..e87cfe3add 100644
--- a/data/mods/gen3/formats-data.ts
+++ b/data/mods/gen3/formats-data.ts
@@ -63,7 +63,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "LC",
},
fearow: {
- tier: "UU",
+ tier: "RUBL",
},
ekans: {
tier: "LC",
@@ -312,7 +312,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "ZU",
},
hypno: {
- tier: "UU",
+ tier: "RU",
},
krabby: {
tier: "LC",
@@ -930,7 +930,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "LC",
},
manectric: {
- tier: "UU",
+ tier: "RU",
},
plusle: {
tier: "NU",
From df367633bce4d5d20516da8a98e648c508b3767f Mon Sep 17 00:00:00 2001
From: Karthik Bandagonda <32044378+Karthik99999@users.noreply.github.com>
Date: Fri, 6 Feb 2026 06:47:29 -0700
Subject: [PATCH 065/233] Refactor Skill Swap to its own function (#11563)
---
data/abilities.ts | 25 +++----------------------
data/mods/gen4/moves.ts | 13 -------------
data/mods/gen5/moves.ts | 13 -------------
data/moves.ts | 29 +----------------------------
sim/battle.ts | 33 +++++++++++++++++++++++++++++++++
sim/pokemon.ts | 16 ++++++++++++----
6 files changed, 49 insertions(+), 80 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 51be75b7eb..c54de73b98 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -2333,10 +2333,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
return;
}
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
- const oldAbility = source.setAbility('lingeringaroma', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
+ source.setAbility('lingeringaroma', target);
}
},
flags: {},
@@ -2714,10 +2711,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
return;
}
if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
- const oldAbility = source.setAbility('mummy', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
+ source.setAbility('mummy', target);
}
},
flags: {},
@@ -5270,20 +5264,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
wanderingspirit: {
onDamagingHit(damage, target, source, move) {
- if (source.getAbility().flags['failskillswap'] || target.volatiles['dynamax']) return;
-
- if (this.checkMoveMakesContact(move, source, target)) {
- const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability);
- if (!targetCanBeSet) return targetCanBeSet;
- const sourceAbility = source.setAbility('wanderingspirit', target);
- if (!sourceAbility) return;
- if (target.isAlly(source)) {
- this.add('-activate', target, 'Skill Swap', '', '', `[of] ${source}`);
- } else {
- this.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', `[of] ${source}`);
- }
- target.setAbility(sourceAbility);
- }
+ if (this.checkMoveMakesContact(move, source, target)) this.skillSwap(source, target);
},
flags: {},
name: "Wandering Spirit",
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 3caeea4ac3..1e5db1ae5e 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1554,19 +1554,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-activate', source, 'move: Mimic', move.name);
},
},
- skillswap: {
- inherit: true,
- onHit(target, source) {
- const targetAbility = target.ability;
- const sourceAbility = source.ability;
- if (targetAbility === sourceAbility || source.hasItem('griseousorb') || target.hasItem('griseousorb')) {
- return false;
- }
- this.add('-activate', source, 'move: Skill Swap');
- source.setAbility(targetAbility);
- target.setAbility(sourceAbility);
- },
- },
sleeptalk: {
inherit: true,
onTryHit(pokemon) {
diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts
index ab4cc6060f..4328d70e1e 100644
--- a/data/mods/gen5/moves.ts
+++ b/data/mods/gen5/moves.ts
@@ -794,19 +794,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, metronome: 1 },
},
- skillswap: {
- inherit: true,
- onHit(target, source) {
- const targetAbility = target.ability;
- const sourceAbility = source.ability;
- if (targetAbility === sourceAbility) {
- return false;
- }
- this.add('-activate', source, 'move: Skill Swap', this.dex.abilities.get(targetAbility), this.dex.abilities.get(sourceAbility), `[of] ${target}`);
- source.setAbility(targetAbility);
- target.setAbility(sourceAbility);
- },
- },
skullbash: {
inherit: true,
basePower: 100,
diff --git a/data/moves.ts b/data/moves.ts
index e19821ac7f..8004f48dfb 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -17209,35 +17209,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1 },
- onTryHit(target, source) {
- const targetAbility = target.getAbility();
- const sourceAbility = source.getAbility();
- if (sourceAbility.flags['failskillswap'] || targetAbility.flags['failskillswap'] || target.volatiles['dynamax']) {
- return false;
- }
- const sourceCanBeSet = this.runEvent('SetAbility', source, source, this.effect, targetAbility);
- if (!sourceCanBeSet) return sourceCanBeSet;
- const targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, sourceAbility);
- if (!targetCanBeSet) return targetCanBeSet;
- },
onHit(target, source, move) {
- const targetAbility = target.getAbility();
- const sourceAbility = source.getAbility();
- if (target.isAlly(source)) {
- this.add('-activate', source, 'move: Skill Swap', '', '', `[of] ${target}`);
- } else {
- this.add('-activate', source, 'move: Skill Swap', targetAbility, sourceAbility, `[of] ${target}`);
- }
- this.singleEvent('End', sourceAbility, source.abilityState, source);
- this.singleEvent('End', targetAbility, target.abilityState, target);
- source.ability = targetAbility.id;
- target.ability = sourceAbility.id;
- source.abilityState = this.initEffectState({ id: this.toID(source.ability), target: source });
- target.abilityState = this.initEffectState({ id: this.toID(target.ability), 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);
+ return this.skillSwap(source, target);
},
secondary: null,
target: "normal",
diff --git a/sim/battle.ts b/sim/battle.ts
index e4c6e2ee87..cbfbda0de2 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -1298,6 +1298,39 @@ export class Battle {
return !!move.flags['contact'];
}
+ skillSwap(source: Pokemon, target: Pokemon) {
+ if (source.fainted || target.fainted) return false;
+ if (source.volatiles['dynamax'] || target.volatiles['dynamax']) return false;
+ const sourceAbility = source.getAbility();
+ const targetAbility = target.getAbility();
+ if (sourceAbility.flags['failskillswap'] || targetAbility.flags['failskillswap']) return false;
+ if (this.gen <= 5 && sourceAbility.id === targetAbility.id) return false;
+
+ const sourceEffect = this.dex.conditions.get('skillswap');
+ const targetCanBeSet = this.runEvent('SetAbility', target, source, sourceEffect, sourceAbility);
+ if (!targetCanBeSet) return targetCanBeSet;
+ const sourceCanBeSet = this.runEvent('SetAbility', source, source, sourceEffect, targetAbility);
+ if (!sourceCanBeSet) return sourceCanBeSet;
+
+ if (this.gen <= 4 || source.isAlly(target)) {
+ this.add('-activate', source, 'Skill Swap');
+ } else {
+ this.add('-activate', source, 'Skill Swap', target, `[ability] ${targetAbility.name}`, `[ability2] ${sourceAbility.name}`);
+ }
+ this.singleEvent('End', sourceAbility, source.abilityState, source);
+ this.singleEvent('End', targetAbility, target.abilityState, target);
+ source.ability = targetAbility.id;
+ target.ability = sourceAbility.id;
+ source.abilityState = this.initEffectState({ id: toID(source.ability), target: source });
+ target.abilityState = this.initEffectState({ id: toID(target.ability), target });
+ source.volatileStaleness = undefined;
+ if (!source.isAlly(target)) target.volatileStaleness = 'external';
+ if (this.gen > 3) {
+ this.singleEvent('Start', sourceAbility, target.abilityState, target);
+ this.singleEvent('Start', targetAbility, source.abilityState, source);
+ }
+ }
+
getPokemon(fullname: string | Pokemon) {
if (typeof fullname !== 'string') fullname = fullname.fullname;
for (const side of this.sides) {
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index ba51b073a0..418bdc3bd2 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -1900,10 +1900,18 @@ export class Pokemon {
this.ability = ability.id;
this.abilityState = this.battle.initEffectState({ id: ability.id, target: this });
if (sourceEffect && !isFromFormeChange && !isTransform) {
- if (source) {
- this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`, `[of] ${source}`);
- } else {
- this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`);
+ switch (sourceEffect.id) {
+ case 'mummy':
+ case 'lingeringaroma':
+ this.battle.add('-activate', source, sourceEffect.fullname, this, '[ability] ' + oldAbility.name);
+ break;
+ default:
+ if (source) {
+ this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`, `[of] ${source}`);
+ } else {
+ this.battle.add('-ability', this, ability.name, oldAbility.name, `[from] ${sourceEffect.fullname}`);
+ }
+ break;
}
}
if (ability.id && this.battle.gen > 3 &&
From f75c7e4ef8e4c0ecd16482d33dcc126ca1a8858c Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 8 Feb 2026 10:22:33 -0700
Subject: [PATCH 066/233] GSC ZU: Fix bans
---
config/formats.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index 0817632f56..173d8ee4ad 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5326,7 +5326,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen2',
searchShow: false,
ruleset: ['[Gen 2] PU'],
- banlist: ['PU', 'ZUBL'],
+ banlist: ['PU', 'ZUBL', 'Baton Pass + Mean Look', 'Baton Pass + Spider Web'],
+ unbanlist: ['Baton Pass'],
},
{
name: "[Gen 2] NC 2000",
From 8f8c96915d985ae75a18783f099dbecf028fd406 Mon Sep 17 00:00:00 2001
From: InkyDarkBird <102001461+InkyDarkBird@users.noreply.github.com>
Date: Sun, 8 Feb 2026 12:23:17 -0500
Subject: [PATCH 067/233] SV Flipped: Update bans (#11751)
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 173d8ee4ad..b1123c5ee3 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -487,11 +487,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
banlist: [
'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
- 'Dialga', 'Dialga-Origin', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Kyurem-Black',
+ 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Kyurem-Black',
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin',
'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian', 'Zacian-Crowned',
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects',
- 'Shed Tail',
+ 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
+ 'Last Respects', 'Shed Tail',
],
},
{
From b9caaaa9278ae0b347fed4d7b1c0170c13ee8985 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 8 Feb 2026 17:23:34 +0000
Subject: [PATCH 068/233] LC UU: Ban Light Clay (#11745)
https://www.smogon.com/forums/threads/sv-lc-uu-metagame-resource-and-discussion-thread.3711750/post-10863288
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index b1123c5ee3..da4b926419 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -343,7 +343,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Pawniard', 'Salandit', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull',
'Zorua-Hisui',
// LC UUBL
- 'Deerling', 'Minccino',
+ 'Deerling', 'Minccino', 'Light Clay',
],
},
{
From 737a8095ac27ad1d377b9fa4788d4762a94869c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 8 Feb 2026 17:24:39 +0000
Subject: [PATCH 069/233] Add Full Arceus Clause (#11725)
* Enable Arceus EV Limit Mod
* English
* Add comment with implementation location
* Add Full Arceus Clause
* Add event for clause
* Move comment
* Lint
* Simplify assignments
* Revert Melmetal changes
* Revert "Revert Melmetal changes"
This reverts commit 8c4a04e67c048037262ad0c847ebaff88cd1d110.
* Reapply "Revert Melmetal changes"
This reverts commit 75539720111b37abaf657512441a04c3e6e7cbe3.
* Add explanation comment
* Remove test
* Comment
---
data/rulesets.ts | 6 ++++++
sim/team-validator.ts | 8 +++++++-
test/sim/team-validator/events.js | 14 ++++++++++++++
3 files changed, 27 insertions(+), 1 deletion(-)
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 8472973ebd..d3a7cfb690 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1606,6 +1606,12 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
this.add('rule', 'Terastal Clause: You cannot Terastallize');
},
},
+ fullarceusclause: {
+ effectType: 'ValidatorRule',
+ name: 'Full Arceus Clause',
+ desc: "Allows Level 80 Arceus from Hall of Origin",
+ // Implemented in sim/team-validator.ts
+ },
inversemod: {
effectType: 'Rule',
name: 'Inverse Mod',
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index 91eea6d65c..58d68c1c95 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -650,6 +650,7 @@ export class TeamValidator {
}
}
if (species.id === 'melmetal' && set.gigantamax && this.dex.species.getLearnsetData(species.id).eventData) {
+ // Gigantamax Melmetal cannot be obtained through the Max Soup
setSources.sourcesBefore = 0;
setSources.sources = ['8S0 melmetal'];
}
@@ -955,7 +956,12 @@ export class TeamValidator {
}
}
} else if (ruleTable.has('obtainablemisc') && (eventOnlyData = this.getEventOnlyData(outOfBattleSpecies))) {
- const { species: eventSpecies, eventData } = eventOnlyData;
+ const eventSpecies = eventOnlyData.species;
+ let eventData = eventOnlyData.eventData;
+ if (ruleTable.has('fullarceusclause') && eventSpecies.baseSpecies === 'Arceus') {
+ // Hall of Origin Arceus
+ eventData = [...eventData, { generation: 4, level: 80, moves: ['refresh', 'futuresight', 'recover', 'hyperbeam'] }];
+ }
let legal = false;
for (const event of eventData) {
if (this.validateEvent(set, setSources, event, eventSpecies)) continue;
diff --git a/test/sim/team-validator/events.js b/test/sim/team-validator/events.js
index 3132ca4a67..2100fddf14 100644
--- a/test/sim/team-validator/events.js
+++ b/test/sim/team-validator/events.js
@@ -181,4 +181,18 @@ describe('Team Validator', () => {
];
assert.legalTeam(team, 'gen4anythinggoes');
});
+
+ it(`should allow Hall of Origin Arceus with Full Arceus Clause`, () => {
+ let team = [
+ { species: 'arceus', level: 80, ability: 'multitype', moves: ['judgment'], evs: { hp: 1 } },
+ ];
+ assert.false.legalTeam(team, 'gen4anythinggoes');
+ assert.false.legalTeam(team, 'gen4anythinggoes@@@fullarceusclause');
+
+ team = [
+ { species: 'arceus', level: 100, ability: 'multitype', moves: ['judgment'], evs: { hp: 1 } },
+ ];
+ assert.false.legalTeam(team, 'gen4anythinggoes');
+ assert.legalTeam(team, 'gen4anythinggoes@@@fullarceusclause');
+ });
});
From c55e84f7cbc4fbcebaff604f58323e164073af47 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Wed, 11 Feb 2026 17:22:56 -0500
Subject: [PATCH 070/233] Add randffats command help (#11759)
---
server/chat-plugins/randombattles/index.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/server/chat-plugins/randombattles/index.ts b/server/chat-plugins/randombattles/index.ts
index 2929d17d08..17a5bb7a11 100644
--- a/server/chat-plugins/randombattles/index.ts
+++ b/server/chat-plugins/randombattles/index.ts
@@ -609,6 +609,7 @@ export const commands: Chat.ChatCommands = {
randombattleshelp: [
`/randombattles OR /randbats [pokemon], [gen] - Displays a Pok\u00e9mon's Random Battle Moves. Defaults to Gen 9. If used in a battle, defaults to the gen of that battle.`,
`/randomdoublesbattle OR /randdubs [pokemon], [gen] - Same as above, but instead displays Random Doubles Battle moves.`,
+ '/randffats [pokemon] - (Gen 9 only) Shows the potential moves for a Pok\u00e9mon in Free-For-All Random Battle.',
],
'1v1factory': 'battlefactory',
From 32f8ffecaa2e78bf0f8a4066a122bffdcd37c6b2 Mon Sep 17 00:00:00 2001
From: VannAccessible
Date: Fri, 13 Feb 2026 08:53:14 -0800
Subject: [PATCH 071/233] Flipped: Fix ruleset (#11758)
Unban Zamazenta and ban Sleep Moves in Flipped. Council vote here:
https://www.smogon.com/forums/threads/flipped-other-metagame-of-the-month.3711301/page-3#post-10868527
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index da4b926419..e252e1cb82 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -484,13 +484,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 9] Flipped",
desc: `All Pokémon have their base stats flipped. For example, Sylveon's HP and Speed stats, Attack and Special Defense stats, and Defense and Special Attack stats swap.`,
mod: 'gen9',
- ruleset: ['Standard OMs', 'Sleep Clause Mod', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
banlist: [
'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Kyurem-Black',
'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin',
'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian', 'Zacian-Crowned',
- 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
+ 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
'Last Respects', 'Shed Tail',
],
},
From 84df91ed1007d12377f2acb7f3af7658ea4547e3 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Fri, 13 Feb 2026 11:53:37 -0500
Subject: [PATCH 072/233] Six By Six: Remove Gunk Rock (#11761)
---
data/random-battles/sixbysix/random-sets.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/random-battles/sixbysix/random-sets.json b/data/random-battles/sixbysix/random-sets.json
index fe3959a1d6..d51c73e78e 100644
--- a/data/random-battles/sixbysix/random-sets.json
+++ b/data/random-battles/sixbysix/random-sets.json
@@ -139,7 +139,7 @@
},
{
"role": "Wallbreaker",
- "movepool": ["Accelerock", "Earthquake", "Gunk Rock", "Stone Edge"],
+ "movepool": ["Accelerock", "Earthquake", "Gunk Shot", "Stone Edge"],
"abilities": ["Earth Eater"]
}
]
@@ -555,3 +555,4 @@
]
}
}
+
From 2ad682ce28a743fc6c5510272f6438142c6abace Mon Sep 17 00:00:00 2001
From: Runo <105902454+Runoisch@users.noreply.github.com>
Date: Fri, 13 Feb 2026 11:53:48 -0500
Subject: [PATCH 073/233] NatDex RU: Ban Sharpedo-Mega (#11763)
https://www.smogon.com/forums/threads/national-dex-ru-metagame-discussion.3713801/post-10871103
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index a7e8263fff..33b82acae1 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -2096,7 +2096,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
sharpedomega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "RU",
+ natDexTier: "RUBL",
},
wailmer: {
isNonstandard: "Past",
From ae43883ed1d232f0a125f070d19a9e3f3cbd3a19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Fri, 13 Feb 2026 16:54:22 +0000
Subject: [PATCH 074/233] Legends Z-A OU: January tier shifts (#11756)
---
data/mods/gen9legendsou/formats-data.ts | 30 ++++++++++++-------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/data/mods/gen9legendsou/formats-data.ts b/data/mods/gen9legendsou/formats-data.ts
index f2fe733967..77d8d85a8a 100644
--- a/data/mods/gen9legendsou/formats-data.ts
+++ b/data/mods/gen9legendsou/formats-data.ts
@@ -90,7 +90,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
clefablemega: {
- tier: "(OU)",
+ tier: "OU",
},
igglybuff: {
tier: "LC",
@@ -366,7 +366,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
slowking: {
- tier: "UU",
+ tier: "OU",
},
slowkinggalar: {
tier: "OU",
@@ -600,7 +600,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
absolmegaz: {
- tier: "OU",
+ tier: "UU",
},
snorunt: {
tier: "LC",
@@ -717,13 +717,13 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "Uber",
},
lucariomegaz: {
- tier: "OU",
+ tier: "UU",
},
hippopotas: {
tier: "LC",
},
hippowdon: {
- tier: "UU",
+ tier: "OU",
},
snover: {
tier: "LC",
@@ -774,7 +774,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
heatranmega: {
- tier: "OU",
+ tier: "(OU)",
},
darkrai: {
tier: "OU",
@@ -999,7 +999,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
chesnaughtmega: {
- tier: "UU",
+ tier: "OU",
},
fennekin: {
tier: "LC",
@@ -1041,7 +1041,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "NFE",
},
talonflame: {
- tier: "OU",
+ tier: "UU",
},
scatterbug: {
tier: "LC",
@@ -1101,16 +1101,16 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "LC",
},
meowstic: {
- tier: "OU",
+ tier: "UU",
},
meowsticf: {
- tier: "OU",
+ tier: "UU",
},
meowsticmmega: {
- tier: "(OU)",
+ tier: "UU",
},
meowsticfmega: {
- tier: "(OU)",
+ tier: "UU",
},
honedge: {
tier: "LC",
@@ -1295,7 +1295,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
volcanion: {
- tier: "OU",
+ tier: "UU",
},
crabrawler: {
tier: "LC",
@@ -1313,7 +1313,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
golisopodmega: {
- tier: "OU",
+ tier: "UU",
},
sandygast: {
tier: "LC",
@@ -1349,7 +1349,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
zeraoramega: {
- tier: "OU",
+ tier: "(OU)",
},
meltan: {
tier: "UU",
From 7a55285dd16846639560b348e68b57256f34ed3e Mon Sep 17 00:00:00 2001
From: TurboRx <187360786+TurboRx@users.noreply.github.com>
Date: Fri, 13 Feb 2026 22:27:20 +0530
Subject: [PATCH 075/233] Fix Stomping Tantrum incorrectly doubling after
canceled two-turn moves (#11760)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix stomping tantrum not doubling when fly is canceled by smack down
* Update sim/battle-actions.ts
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
---------
Co-authored-by: TurboRx
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
---
sim/battle-actions.ts | 9 ++++++---
test/sim/moves/stompingtantrum.js | 2 +-
2 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index b87cf131b0..9df9dceb52 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -485,10 +485,13 @@ export class BattleActions {
}
}
- if (!this.battle.singleEvent('TryMove', move, null, pokemon, target, move) ||
- !this.battle.runEvent('TryMove', pokemon, target, move)) {
+ let tryMoveResult = this.battle.singleEvent('TryMove', move, null, pokemon, target, move);
+ if (tryMoveResult) {
+ tryMoveResult = this.battle.runEvent('TryMove', pokemon, target, move);
+ }
+ if (!tryMoveResult) {
move.mindBlownRecoil = false;
- return false;
+ return tryMoveResult;
}
this.battle.singleEvent('UseMoveMessage', move, null, pokemon, target, move);
diff --git a/test/sim/moves/stompingtantrum.js b/test/sim/moves/stompingtantrum.js
index d4fe8a0708..1f699bc0e9 100644
--- a/test/sim/moves/stompingtantrum.js
+++ b/test/sim/moves/stompingtantrum.js
@@ -90,7 +90,7 @@ describe('Stomping Tantrum', () => {
battle.makeChoices('move stompingtantrum', 'auto');
});
- it.skip(`should not double its Base Power if the user dropped mid-Fly due to Smack Down`, () => {
+ it(`should not double its Base Power if the user dropped mid-Fly due to Smack Down`, () => {
battle = common.createBattle([[
{ species: 'Magikarp', moves: ['fly', 'stompingtantrum'] },
], [
From c448db86927af71b415d5768d33400e14a3f3362 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Fri, 13 Feb 2026 16:57:41 +0000
Subject: [PATCH 076/233] Deduct PP from Gen 3 and Gen 4 Pursuit (#11753)
---
data/mods/gen4/moves.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 1e5db1ae5e..1acc40facf 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1367,6 +1367,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
const move = this.dex.getActiveMove('pursuit');
+ source.deductPP(move.id);
source.moveUsed(move, pokemon.position);
if (this.actions.useMove(move, source, { target: pokemon }) && source.getItem().isChoice) {
source.addVolatile('choicelock');
From a7f286ee0d12eee35702b4e8ce6c373b9609653c Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Sat, 14 Feb 2026 22:09:56 -0500
Subject: [PATCH 077/233] Add "Same Letter Clause" (#11767)
* Add "Same Letter Rule"
* cleanup
* indentation
* ^
Co-authored-by: Slayer95
* change slc desc
* clarify rejection message
---------
Co-authored-by: Slayer95
---
data/rulesets.ts | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/data/rulesets.ts b/data/rulesets.ts
index d3a7cfb690..08f6a9583d 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1559,6 +1559,28 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
}
},
},
+ sameletterclause: {
+ effectType: 'ValidatorRule',
+ name: 'Same Letter Clause',
+ desc: "Forces all Pokémon species on a team to start with the same letter",
+ onValidateTeam(team) {
+ let requiredLetter: string | null = null;
+ for (const set of team) {
+ const species = this.dex.species.get(set.species);
+ const match = /^[A-Za-z]/.exec(species.name);
+ if (!match) {
+ return [`${species.name} cannot be used, as its name does not begin with a valid English letter.`];
+ }
+ const firstLetter = match[0].toUpperCase();
+ if (!requiredLetter) {
+ requiredLetter = firstLetter;
+ } else if (firstLetter !== requiredLetter) {
+ return [
+ `All Pokémon must belong to species starting with the same letter (currently: ${requiredLetter}); ${species.name} starts with ${firstLetter}.`];
+ }
+ }
+ },
+ },
megarayquazaclause: {
effectType: 'Rule',
name: 'Mega Rayquaza Clause',
From 6b5cf272d62e0c572ede0c339f979bc614077e7f Mon Sep 17 00:00:00 2001
From: demir
Date: Sun, 15 Feb 2026 06:10:18 +0300
Subject: [PATCH 078/233] Sleep Moves Clause (#11766)
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index e252e1cb82..7f252456ef 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3161,7 +3161,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: [
'Standard NatDex',
- '!Species Clause', 'Forme Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
+ '!Species Clause', 'Forme Clause', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
],
banlist: [
'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
@@ -3172,7 +3172,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Articuno-Galar', 'Aurorus', 'Bellossom', 'Bewear', 'Blastoise-Base', 'Dodrio', 'Entei', 'Falinks-Base', 'Flygon', 'Furret', 'Goodra-Hisui',
'Gumshoos-Base', 'Heliolisk', 'Hydrapple', 'Indeedee-F', 'Iron Thorns', 'Leavanny', 'Lickilicky', 'Ludicolo', 'Maractus', 'Meganium-Base',
'Polteageist', 'Probopass', 'Regieleki', 'Rhyperior', 'Seismitoad', 'Shiinotic', 'Slaking', 'Spidops', 'Spiritomb', 'Unfezant', 'Vanilluxe',
- 'Victreebel-Base', 'Weezing-Galar', 'Wyrdeer', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z',
+ 'Victreebel-Base', 'Weezing-Galar', 'Wyrdeer', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
],
// Stupid hardcode
onValidateSet(set, format, setHas, teamHas) {
From 686819e5e19f8a7fd2345cfc5a08a5085efa2cc3 Mon Sep 17 00:00:00 2001
From: VannAccessible
Date: Sat, 14 Feb 2026 19:10:47 -0800
Subject: [PATCH 079/233] Flipped: Ban Annihilape (#11765)
* Add Annihilape to the banlist in formats.ts
For Flipped.
Vote: https://www.smogon.com/forums/threads/flipped-other-metagame-of-the-month.3711301/page-3#post-10871384
Ty!
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 7f252456ef..5db5d77f56 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -486,11 +486,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen9',
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
banlist: [
- 'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
- 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre', 'Kyurem-Black',
- 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Palkia-Origin',
- 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian', 'Zacian-Crowned',
- 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
+ 'Annihilape', 'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal',
+ 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre',
+ 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
+ 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian',
+ 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
'Last Respects', 'Shed Tail',
],
},
From 9cfe6c1333e1cc17d5e5015468e0e8d58ff89297 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Tue, 17 Feb 2026 17:11:39 -0700
Subject: [PATCH 080/233] NatDex: Move Zamazenta-C to OU for suspect
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 33b82acae1..ddaaefa03f 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -5209,7 +5209,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
zamazentacrowned: {
tier: "Uber",
doublesTier: "DUber",
- natDexTier: "Uber",
+ natDexTier: "OU",
},
eternatus: {
tier: "Uber",
From a66fecae31ead345c50e295870560cc1168c6f36 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 18 Feb 2026 01:33:31 +0000
Subject: [PATCH 081/233] Add Knock Off + Poison Touch + Lum Berry test
(#11769)
---
test/sim/items/lumberry.js | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/test/sim/items/lumberry.js b/test/sim/items/lumberry.js
index 4cca997639..d48c4a0b3a 100644
--- a/test/sim/items/lumberry.js
+++ b/test/sim/items/lumberry.js
@@ -39,6 +39,18 @@ describe('Lum Berry', () => {
assert(attacker.volatiles['confusion']);
});
+ it('should cure Poison from Poison Touch before being knocked off', () => {
+ battle = common.createBattle({ forceRandomChance: true }, [[
+ { species: 'Wynaut', ability: 'poisontouch', moves: ['knockoff'] },
+ ], [
+ { species: 'Shuckle', item: 'lumberry', moves: ['sleeptalk'] },
+ ]]);
+ battle.makeChoices();
+ assert(battle.getDebugLog().includes('|-status|p2a: Shuckle|psn|[from] ability: Poison Touch'));
+ assert.equal(battle.p2.active[0].status, '');
+ assert.false.holdsItem(battle.p2.active[0]);
+ });
+
it('should cure Poison and confusion after Poison Puppeteer activation', () => {
battle = common.createBattle();
battle.setPlayer('p1', { team: [{ species: 'Charizard', item: 'lumberry', moves: ['sleeptalk'] }] });
From 42f591a3303a4f0bff805e082e0be6451128c333 Mon Sep 17 00:00:00 2001
From: dot-Comfey <84290266+dot-Comfey@users.noreply.github.com>
Date: Tue, 17 Feb 2026 17:33:57 -0800
Subject: [PATCH 082/233] Remove hardcoding of formes inheriting learnsets
(#11750)
* Remove hardcoding of formes inheriting learnsets
* Fix learnset inheritance
* Update learnsets.ts
---
data/learnsets.ts | 406 +++++++++++++++++++++++++++++++++++++-----
sim/dex-species.ts | 4 +-
sim/team-validator.ts | 8 +-
3 files changed, 368 insertions(+), 50 deletions(-)
diff --git a/data/learnsets.ts b/data/learnsets.ts
index 5ae0ca4a50..f5f778f2d6 100644
--- a/data/learnsets.ts
+++ b/data/learnsets.ts
@@ -49734,12 +49734,85 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
},
gastrodoneast: {
learnset: {
- earthpower: ["9S3", "9S2", "8S1", "8S0"],
- icebeam: ["9S2", "8S1", "8S0"],
- icywind: ["9S3"],
- protect: ["9S3", "9S2", "8S1", "8S0"],
- surf: ["8S0"],
- yawn: ["9S3", "9S2", "8S1"],
+ amnesia: ["9M", "8M"],
+ ancientpower: ["9L20", "8L20", "4T"],
+ attract: ["8M", "7M", "6M", "5M", "4M"],
+ blizzard: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ block: ["7T", "6T", "5T", "4T"],
+ bodyslam: ["9M", "9L25", "8M", "8L25", "7L29", "6L29", "5L29", "4L29"],
+ brine: ["8M", "4M"],
+ bulldoze: ["9M", "8M", "7M", "6M", "5M"],
+ captivate: ["4M"],
+ chillingwater: ["9M"],
+ confide: ["7M", "6M"],
+ curse: ["9M"],
+ dig: ["9M", "8M", "6M", "5M", "4M"],
+ dive: ["8M", "6M", "5M", "4T"],
+ doubleteam: ["7M", "6M", "5M", "4M"],
+ earthpower: ["9M", "9L39", "9S2", "9S3", "8M", "8L39", "8S0", "8S1", "7T", "6T", "5T", "4T"],
+ earthquake: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ endure: ["9M", "8M", "4M"],
+ facade: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ flash: ["6M", "5M", "4M"],
+ frustration: ["7M", "6M", "5M", "4M"],
+ gigaimpact: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ hail: ["8M", "7M", "6M", "5M", "4M"],
+ harden: ["9L1", "8L1", "7L1", "6L1", "5L1", "4L1"],
+ headbutt: ["4T"],
+ helpinghand: ["9M"],
+ hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"],
+ hydropump: ["9M", "8M"],
+ hyperbeam: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ icebeam: ["9M", "9S2", "8M", "8S0", "8S1", "7M", "6M", "5M", "4M"],
+ icywind: ["9M", "9S3", "8M", "7T", "6T", "5T", "4T"],
+ infestation: ["7M", "6M"],
+ liquidation: ["9M"],
+ memento: ["9L53", "8L53"],
+ mudbomb: ["7L11", "6L11", "5L11", "4L11"],
+ muddywater: ["9M", "9L33", "8M", "8L33", "7L41", "6L41", "5L41", "4L41"],
+ mudshot: ["9M", "8M"],
+ mudslap: ["9M", "9L1", "8L1", "7L1", "6L1", "5L1", "4T", "4L1"],
+ mudsport: ["7L1", "6L1", "5L1", "4L1"],
+ naturalgift: ["4M"],
+ painsplit: ["9M", "7T", "6T", "5T", "4T"],
+ protect: ["9M", "9S2", "9S3", "8M", "8S0", "8S1", "7M", "6M", "5M", "4M"],
+ raindance: ["9M", "9L46", "8M", "8L46", "7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"],
+ recover: ["9L1", "8L1", "7L54", "6L54", "5L54", "4L54"],
+ rest: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ return: ["7M", "6M", "5M", "4M"],
+ rockblast: ["9M"],
+ rockslide: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ rocksmash: ["6M", "5M", "4M"],
+ rocktomb: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ round: ["8M", "7M", "6M", "5M"],
+ sandstorm: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ sandtomb: ["9M", "8M"],
+ scald: ["8M", "7M", "6M", "5M"],
+ secretpower: ["6M", "4M"],
+ skittersmack: ["9M", "8T"],
+ sleeptalk: ["9M", "8M", "7M", "6M", "5T", "4M"],
+ sludgebomb: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ sludgewave: ["9M", "8M", "7M", "6M", "5M"],
+ snore: ["8M", "7T", "6T", "5T", "4T"],
+ snowscape: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M", "8M", "7T"],
+ stoneedge: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ strength: ["6M", "5M", "4M"],
+ stringshot: ["4T"],
+ substitute: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ surf: ["9M", "8M", "8S0", "7M", "6M", "5M", "4M"],
+ swagger: ["7M", "6M", "5M", "4M"],
+ takedown: ["9M"],
+ terablast: ["9M"],
+ toxic: ["7M", "6M", "5M", "4M"],
+ waterfall: ["9M", "8M", "7M", "6M", "5M", "4M"],
+ watergun: ["9L1", "8L1"],
+ waterpulse: ["9M", "9L15", "8L15", "7T", "7L1", "6T", "6L1", "5L1", "4M", "4L1"],
+ weatherball: ["9M", "8M"],
+ whirlpool: ["9M", "8M", "4M"],
+ yawn: ["9S2", "9S3", "8S1"],
},
eventData: [
{generation: 8, level: 50, gender: "F", nature: "Quiet", abilities: ["stormdrain"], ivs: {hp: 31, atk: 2, def: 31, spa: 31, spd: 31, spe: 0}, moves: ["protect", "surf", "icebeam", "earthpower"], pokeball: "cherishball"},
@@ -72942,10 +73015,79 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
},
pumpkaboosuper: {
learnset: {
- astonish: ["6S0"],
- scaryface: ["6S0"],
- shadowsneak: ["6S0"],
- trickortreat: ["6S0"],
+ allyswitch: ["8M", "7T"],
+ astonish: ["8L1", "7L1", "6L1", "6S0"],
+ attract: ["8M", "7M", "6M"],
+ bestow: ["7E", "6E"],
+ bulletseed: ["8M", "8L20", "7L26", "6L26"],
+ chargebeam: ["7M", "6M"],
+ confide: ["7M", "6M"],
+ confuseray: ["8L8", "7L1", "6L1"],
+ curse: ["8E", "7E"],
+ darkpulse: ["8M", "7M", "6M"],
+ destinybond: ["8E", "7E", "6E"],
+ disable: ["8E", "7E", "6E"],
+ doubleteam: ["7M", "6M"],
+ dreameater: ["7M", "6M"],
+ endure: ["8M"],
+ energyball: ["8M", "7M", "6M"],
+ explosion: ["7M", "6M"],
+ facade: ["8M", "7M", "6M"],
+ fireblast: ["8M", "7M", "6M"],
+ flamecharge: ["7M", "6M"],
+ flamethrower: ["8M", "7M", "6M"],
+ flash: ["6M"],
+ foulplay: ["8M", "7T", "6T"],
+ frustration: ["7M", "6M"],
+ gigadrain: ["8M", "7T", "6T"],
+ grassknot: ["8M", "7M", "6M"],
+ grassyglide: ["8T"],
+ gyroball: ["8M", "7M", "6M"],
+ hex: ["8M"],
+ hiddenpower: ["7M", "6M"],
+ imprison: ["8M"],
+ incinerate: ["6M"],
+ leechseed: ["8L16", "7L20", "6L20"],
+ lightscreen: ["8M", "7M", "6M"],
+ magiccoat: ["7T", "6T"],
+ mysticalfire: ["8M"],
+ naturepower: ["7M", "6M"],
+ painsplit: ["8L44", "7T", "7L42", "6T", "6L42"],
+ poltergeist: ["8T"],
+ protect: ["8M", "7M", "6M"],
+ psychic: ["8M", "7M", "6M"],
+ razorleaf: ["8L12", "7L16", "6L16"],
+ rest: ["8M", "7M", "6M"],
+ return: ["7M", "6M"],
+ rockslide: ["8M", "7M", "6M"],
+ rocksmash: ["6M"],
+ roleplay: ["7T", "6T"],
+ round: ["8M", "7M", "6M"],
+ safeguard: ["8M", "7M", "6M"],
+ scaryface: ["8M", "8L24", "7L4", "6L4", "6S0"],
+ secretpower: ["6M"],
+ seedbomb: ["8M", "8L32", "7T", "7L48", "6T", "6L48"],
+ shadowball: ["8M", "8L36", "7M", "7L36", "6M", "6L36"],
+ shadowsneak: ["8L4", "7L30", "6L30", "6S0"],
+ skillswap: ["8M", "7T", "6T"],
+ skittersmack: ["8T"],
+ sleeptalk: ["8M", "7M", "6M"],
+ sludgebomb: ["8M", "7M", "6M"],
+ snore: ["8M"],
+ solarbeam: ["8M", "7M", "6M"],
+ spite: ["7T", "6T"],
+ substitute: ["8M", "7M", "6M"],
+ sunnyday: ["8M", "7M", "6M"],
+ swagger: ["7M", "6M"],
+ synthesis: ["7T", "6T"],
+ telekinesis: ["7T"],
+ thief: ["8M", "7M", "6M"],
+ toxic: ["7M", "6M"],
+ trick: ["8M", "8L40", "7T", "7L1", "6T", "6L1"],
+ trickortreat: ["8L1", "7L23", "6L6", "6S0"],
+ trickroom: ["8M", "7M", "6M"],
+ willowisp: ["8M", "7M", "6M"],
+ worryseed: ["8L28", "7T", "7L11", "6T", "6L11"],
},
eventData: [
{generation: 6, level: 50, moves: ["trickortreat", "astonish", "scaryface", "shadowsneak"], pokeball: "cherishball"},
@@ -73032,6 +73174,87 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
worryseed: ["8L28", "7T", "7L11", "6T", "6L11"],
},
},
+ gourgeistsuper: {
+ learnset: {
+ allyswitch: ["8M", "7T"],
+ astonish: ["8L1", "7L1", "6L1"],
+ attract: ["8M", "7M", "6M"],
+ brutalswing: ["8M"],
+ bulletseed: ["8M", "8L20", "7L26", "6L26"],
+ chargebeam: ["7M", "6M"],
+ confide: ["7M", "6M"],
+ confuseray: ["8L1", "7L1", "6L1"],
+ darkpulse: ["8M", "7M", "6M"],
+ doubleteam: ["7M", "6M"],
+ dreameater: ["7M", "6M"],
+ endure: ["8M"],
+ energyball: ["8M", "7M", "6M"],
+ explosion: ["8L1", "7M", "7L1", "6M", "6L1"],
+ facade: ["8M", "7M", "6M"],
+ fireblast: ["8M", "7M", "6M"],
+ flamecharge: ["7M", "6M"],
+ flamethrower: ["8M", "7M", "6M"],
+ flash: ["6M"],
+ focusblast: ["8M", "7M", "6M"],
+ foulplay: ["8M", "7T", "6T"],
+ frustration: ["7M", "6M"],
+ gigadrain: ["8M", "7T", "6T"],
+ gigaimpact: ["8M", "7M", "6M"],
+ grassknot: ["8M", "7M", "6M"],
+ grassyglide: ["8T"],
+ gyroball: ["8M", "7M", "6M"],
+ hex: ["8M"],
+ hiddenpower: ["7M", "6M"],
+ hyperbeam: ["8M", "7M", "6M"],
+ imprison: ["8M"],
+ incinerate: ["6M"],
+ leechseed: ["8L16", "7L20", "6L20"],
+ lightscreen: ["8M", "7M", "6M"],
+ magiccoat: ["7T", "6T"],
+ moonblast: ["8L1"],
+ mysticalfire: ["8M"],
+ nastyplot: ["8M"],
+ naturepower: ["7M", "6M"],
+ painsplit: ["8L44", "7T", "7L42", "6T", "6L42"],
+ phantomforce: ["8M", "8L48", "7L1", "6L1"],
+ poltergeist: ["8T"],
+ powerwhip: ["8M"],
+ protect: ["8M", "7M", "6M"],
+ psychic: ["8M", "7M", "6M"],
+ razorleaf: ["8L12", "7L16", "6L16"],
+ rest: ["8M", "7M", "6M"],
+ return: ["7M", "6M"],
+ rockslide: ["8M", "7M", "6M"],
+ rocksmash: ["6M"],
+ roleplay: ["7T", "6T"],
+ round: ["8M", "7M", "6M"],
+ safeguard: ["8M", "7M", "6M"],
+ scaryface: ["8M", "8L24", "7L1", "6L4"],
+ secretpower: ["6M"],
+ seedbomb: ["8M", "8L32", "7T", "7L48", "6T", "6L48"],
+ shadowball: ["8M", "8L36", "7M", "7L36", "6M", "6L36"],
+ shadowsneak: ["8L1", "7L30", "6L30"],
+ skillswap: ["8M", "7T", "6T"],
+ skittersmack: ["8T"],
+ sleeptalk: ["8M", "7M", "6M"],
+ sludgebomb: ["8M", "7M", "6M"],
+ snore: ["8M"],
+ solarbeam: ["8M", "7M", "6M"],
+ spite: ["7T", "6T"],
+ substitute: ["8M", "7M", "6M"],
+ sunnyday: ["8M", "7M", "6M"],
+ swagger: ["7M", "6M"],
+ synthesis: ["7T", "6T"],
+ telekinesis: ["7T"],
+ thief: ["8M", "7M", "6M"],
+ toxic: ["7M", "6M"],
+ trick: ["8M", "8L40", "7T", "7L1", "6T", "6L1"],
+ trickortreat: ["8L1", "7L23", "6L6"],
+ trickroom: ["8M", "7M", "6M"],
+ willowisp: ["8M", "7M", "6M"],
+ worryseed: ["8L28", "7T", "7L11", "6T", "6L11"],
+ },
+ },
bergmite: {
learnset: {
afteryou: ["7T", "6T"],
@@ -84110,49 +84333,53 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
},
sinisteaantique: {
learnset: {
- allyswitch: ["9E"],
- aromatherapy: ["8S0"],
- aromaticmist: ["9L6"],
- astonish: ["9L1"],
- batonpass: ["9M"],
+ allyswitch: ["9E", "8M"],
+ aromatherapy: ["8L30", "8S0"],
+ aromaticmist: ["9L6", "8L6"],
+ astonish: ["9L1", "8L1"],
+ batonpass: ["9M", "8M"],
calmmind: ["9M"],
celebrate: ["8S0"],
confuseray: ["9M"],
curse: ["9M"],
- darkpulse: ["9M"],
- endure: ["9M"],
- facade: ["9M"],
- foulplay: ["9M"],
- gigadrain: ["9M", "9L36"],
- hex: ["9M"],
- imprison: ["9M"],
+ darkpulse: ["9M", "8M"],
+ endure: ["9M", "8M"],
+ facade: ["9M", "8M"],
+ foulplay: ["9M", "8M"],
+ gigadrain: ["9M", "9L36", "8M", "8L36"],
+ hex: ["9M", "8M"],
+ imprison: ["9M", "8M"],
magicalleaf: ["9M"],
- megadrain: ["9L12"],
- memento: ["9L54", "8S0"],
- metronome: ["9M", "8S0"],
- nastyplot: ["9M", "9L42"],
+ megadrain: ["9L12", "8L12"],
+ memento: ["9L54", "8L54", "8S0"],
+ metronome: ["9M", "8M", "8S0"],
+ nastyplot: ["9M", "9L42", "8M", "8L42"],
nightshade: ["9M"],
- phantomforce: ["9M"],
- poltergeist: ["9M"],
- protect: ["9M"],
+ payback: ["8M"],
+ phantomforce: ["9M", "8M"],
+ poltergeist: ["9M", "8T"],
+ protect: ["9M", "8M", "8L18"],
psybeam: ["9M"],
- psychic: ["9M"],
- psyshock: ["9M"],
- rest: ["9M"],
- shadowball: ["9M", "9L48"],
- shellsmash: ["9L60"],
+ psychic: ["9M", "8M"],
+ psyshock: ["9M", "8M"],
+ rest: ["9M", "8M"],
+ round: ["8M"],
+ shadowball: ["9M", "9L48", "8M", "8L48"],
+ shellsmash: ["9L60", "8L60"],
skillswap: ["9M"],
- sleeptalk: ["9M"],
+ sleeptalk: ["9M", "8M"],
+ snore: ["8M"],
spite: ["9M"],
- storedpower: ["9M"],
- substitute: ["9M"],
- suckerpunch: ["9L24"],
+ storedpower: ["9M", "8M"],
+ substitute: ["9M", "8M"],
+ suckerpunch: ["9L24", "8L24"],
sweetscent: ["9L30"],
terablast: ["9M"],
- trick: ["9M"],
+ trick: ["9M", "8M"],
trickroom: ["9M"],
- willowisp: ["9M"],
- withdraw: ["9L1"],
+ willowisp: ["9M", "8M"],
+ withdraw: ["9L1", "8L1"],
+ wonderroom: ["8M"],
},
eventData: [
{generation: 8, level: 50, isHidden: true, moves: ["memento", "metronome", "aromatherapy", "celebrate"], pokeball: "cherishball"},
@@ -84216,6 +84443,64 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
wonderroom: ["8M"],
},
},
+ polteageistantique: {
+ learnset: {
+ allyswitch: ["8M"],
+ aromatherapy: ["8L30"],
+ aromaticmist: ["9L1", "8L1"],
+ astonish: ["9L1", "8L1"],
+ batonpass: ["9M", "8M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M", "9L66", "8L66"],
+ darkpulse: ["9M", "8M"],
+ endure: ["9M", "8M"],
+ facade: ["9M", "8M"],
+ foulplay: ["9M", "8M"],
+ gigadrain: ["9M", "9L36", "8M", "8L36"],
+ gigaimpact: ["9M", "8M"],
+ hex: ["9M", "8M"],
+ hyperbeam: ["9M", "8M"],
+ imprison: ["9M", "8M"],
+ lightscreen: ["9M", "8M"],
+ magicalleaf: ["9M"],
+ megadrain: ["9L1", "8L1"],
+ memento: ["9L54", "8L54"],
+ metronome: ["9M", "8M"],
+ nastyplot: ["9M", "9L42", "8M", "8L42"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["8M"],
+ phantomforce: ["9M", "8M"],
+ poltergeist: ["9M", "8T"],
+ protect: ["9M", "9L18", "8M", "8L18"],
+ psybeam: ["9M"],
+ psychic: ["9M", "8M"],
+ psyshock: ["9M", "8M"],
+ reflect: ["9M", "8M"],
+ rest: ["9M", "8M"],
+ round: ["8M"],
+ selfdestruct: ["8M"],
+ shadowball: ["9M", "9L48", "8M", "8L48"],
+ shellsmash: ["9L60", "8L60"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M", "8M"],
+ snore: ["8M"],
+ spite: ["9M"],
+ storedpower: ["9M", "8M"],
+ strengthsap: ["9L1", "8L1"],
+ substitute: ["9M", "8M"],
+ suckerpunch: ["9L24", "8L24"],
+ sweetscent: ["9L30"],
+ teatime: ["9L0", "8L0"],
+ terablast: ["9M"],
+ trick: ["9M", "8M"],
+ trickroom: ["9M"],
+ willowisp: ["9M", "8M"],
+ withdraw: ["9L1", "8L1"],
+ wonderroom: ["8M"],
+ },
+ },
hatenna: {
learnset: {
afteryou: ["9E", "8E"],
@@ -89475,10 +89760,43 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
},
tatsugiristretchy: {
learnset: {
+ batonpass: ["9M", "9E"],
celebrate: ["9S0"],
- dracometeor: ["9S0"],
- helpinghand: ["9S0"],
- muddywater: ["9S0"],
+ chillingwater: ["9M"],
+ counter: ["9E"],
+ dracometeor: ["9M", "9S0"],
+ dragoncheer: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M", "9L52"],
+ endure: ["9M"],
+ facade: ["9M"],
+ gigaimpact: ["9M"],
+ harden: ["9L6"],
+ helpinghand: ["9M", "9L12", "9S0"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icywind: ["9M"],
+ lunge: ["9M"],
+ memento: ["9L34"],
+ mirrorcoat: ["9L47"],
+ muddywater: ["9M", "9L39", "9S0"],
+ nastyplot: ["9M", "9L43"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9E"],
+ rest: ["9M"],
+ sleeptalk: ["9M"],
+ soak: ["9L23"],
+ splash: ["9L1"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ takedown: ["9M"],
+ taunt: ["9M", "9L28"],
+ terablast: ["9M"],
+ watergun: ["9L1"],
+ waterpulse: ["9M", "9L17"],
+ whirlpool: ["9M"],
},
eventData: [
{generation: 9, level: 50, moves: ["dracometeor", "muddywater", "helpinghand", "celebrate"], pokeball: "cherishball"},
diff --git a/sim/dex-species.ts b/sim/dex-species.ts
index 4a05d4ca0c..7785fcb115 100644
--- a/sim/dex-species.ts
+++ b/sim/dex-species.ts
@@ -742,8 +742,8 @@ export class DexSpecies {
// different learnsets. To prevent a leak, we make them show up as their
// base forme, but hardcode their learnsets into Rockruff-Dusk and
// Greninja-Ash
- if (['Gastrodon', 'Pumpkaboo', 'Sinistea', 'Tatsugiri'].includes(species.baseSpecies) && species.forme) {
- return this.get(species.baseSpecies);
+ if (!this.getLearnsetData(species.id).learnset && species.forme) {
+ return this.get(species.changesFrom || species.baseSpecies);
} else if (species.prevo) {
// there used to be a check for Hidden Ability here, but apparently it's unnecessary
// Shed Skin Pupitar can definitely evolve into Unnerve Tyranitar
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index 58d68c1c95..c1ee6cf1a8 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -2351,10 +2351,10 @@ export class TeamValidator {
if (dex.gen < 8 || this.format.mod === 'gen8dlc1') return null;
if (!pokemonGoData) {
// Handles forms and evolutions not obtainable from Pokemon GO
- const otherSpecies = this.dex.species.learnsetParent(species);
+ const otherSpecies = this.dex.species.get(species.changesFrom || species.prevo);
// If a Pokemon is somehow not obtainable from Pokemon GO and it must be leveled up to be evolved,
// validation for the game should stop because it's more optimal to get the Pokemon outside of the game
- if (otherSpecies && !species.evoLevel) {
+ if (otherSpecies.name && !species.evoLevel) {
const otherProblems = this.validatePokemonGo(otherSpecies, set, setSources, name);
if (otherProblems) {
problems = otherProblems;
@@ -2861,7 +2861,7 @@ export class TeamValidator {
if (!dex.species.getLearnsetData(nextSpecies.id).learnset) {
nextSpecies = dex.species.get(nextSpecies.changesFrom || nextSpecies.baseSpecies);
}
- while (nextSpecies) {
+ while (nextSpecies.name) {
for (let gen = nextSpecies.gen; gen <= dex.gen; gen++) {
/**
* Case 1: The species can learn the move - allow moves of the species from all gens
@@ -2880,7 +2880,7 @@ export class TeamValidator {
}
}
if (canLearnSpecies.includes(nextSpecies.id)) speciesCount++;
- nextSpecies = dex.species.learnsetParent(nextSpecies);
+ nextSpecies = dex.species.get(nextSpecies.prevo);
}
}
From f4889cac746787fb8156278722302220e45b0076 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 18 Feb 2026 01:34:52 +0000
Subject: [PATCH 083/233] Implement Zacian and Zamazenta transformations as
species conditions (#11748)
* Implement Zacian and Zamazenta transformations as species conditions
* Remove custom transformation from gen8linked
---
data/conditions.ts | 59 +++++++++++++++++++++++++++++++
data/mods/gen8linked/scripts.ts | 37 +------------------
data/mods/gen9ssb/conditions.ts | 58 ++++++++++++++++++++++++++++++
data/mods/gen9ssb/scripts.ts | 37 +------------------
data/mods/monkeyspaw/scripts.ts | 37 +------------------
sim/battle.ts | 37 +------------------
sim/dex-conditions.ts | 1 +
test/sim/team-validator/formes.js | 7 ++--
8 files changed, 125 insertions(+), 148 deletions(-)
diff --git a/data/conditions.ts b/data/conditions.ts
index 44406ca01a..cf749e1f66 100644
--- a/data/conditions.ts
+++ b/data/conditions.ts
@@ -879,6 +879,65 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
return [type];
},
},
+ zacian: {
+ name: 'Zacian',
+ onBattleStart(pokemon) {
+ if (pokemon.item !== 'rustedsword') return;
+ const rawSpecies = this.dex.species.get('Zacian-Crowned');
+ const species = pokemon.setSpecies(rawSpecies);
+ if (!species) return;
+ pokemon.baseSpecies = rawSpecies;
+ pokemon.details = pokemon.getUpdatedDetails();
+ pokemon.setAbility(species.abilities['0'], null, null, true);
+ pokemon.baseAbility = pokemon.ability;
+
+ const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHeadIndex >= 0) {
+ const move = this.dex.moves.get('behemothblade');
+ pokemon.baseMoveSlots[ironHeadIndex] = {
+ move: move.name,
+ id: move.id,
+ pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ pokemon.moveSlots = pokemon.baseMoveSlots.slice();
+ }
+ },
+ },
+ zamazenta: {
+ name: 'Zamazenta',
+ onBattleStart(pokemon) {
+ if (pokemon.item !== 'rustedshield') return;
+ const rawSpecies = this.dex.species.get('Zamazenta-Crowned');
+ const species = pokemon.setSpecies(rawSpecies);
+ if (!species) return;
+ pokemon.baseSpecies = rawSpecies;
+ pokemon.details = pokemon.getUpdatedDetails();
+ pokemon.setAbility(species.abilities['0'], null, null, true);
+ pokemon.baseAbility = pokemon.ability;
+
+ const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHeadIndex >= 0) {
+ const move = this.dex.moves.get('behemothbash');
+ pokemon.baseMoveSlots[ironHeadIndex] = {
+ move: move.name,
+ id: move.id,
+ pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ pokemon.moveSlots = pokemon.baseMoveSlots.slice();
+ }
+ },
+ },
+
rolloutstorage: {
name: 'rolloutstorage',
duration: 2,
diff --git a/data/mods/gen8linked/scripts.ts b/data/mods/gen8linked/scripts.ts
index 1962e1d16f..7a9766829f 100644
--- a/data/mods/gen8linked/scripts.ts
+++ b/data/mods/gen8linked/scripts.ts
@@ -70,40 +70,8 @@ export const Scripts: ModdedBattleScriptsData = {
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 = pokemon.getUpdatedDetails();
- // pokemon.setAbility(species.abilities['0'], null, 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.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- target: move.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- pokemon.moveSlots = pokemon.baseMoveSlots.slice();
- }
+ this.singleEvent('BattleStart', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
}
this.format.onBattleStart?.call(this);
@@ -125,9 +93,6 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
}
- for (const pokemon of this.getAllPokemon()) {
- this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
- }
this.midTurn = true;
break;
}
diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts
index 7a6f4cc3ce..a5984188f1 100644
--- a/data/mods/gen9ssb/conditions.ts
+++ b/data/mods/gen9ssb/conditions.ts
@@ -3,6 +3,64 @@ import { changeSet, getName, enemyStaff } from './scripts';
import type { ModdedConditionData } from "../../../sim/dex-conditions";
export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: string } } = {
+ zacian: {
+ inherit: true,
+ onBattleStart(pokemon) {
+ if (pokemon.item !== 'rustedsword') return;
+ const rawSpecies = this.dex.species.get('Zacian-Crowned');
+ const species = pokemon.setSpecies(rawSpecies);
+ if (!species) return;
+ pokemon.baseSpecies = rawSpecies;
+ pokemon.details = pokemon.getUpdatedDetails();
+ // pokemon.setAbility(species.abilities['0'], null, null, true);
+ // pokemon.baseAbility = pokemon.ability;
+
+ const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHeadIndex >= 0) {
+ const move = this.dex.moves.get('behemothblade');
+ pokemon.baseMoveSlots[ironHeadIndex] = {
+ move: move.name,
+ id: move.id,
+ pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ pokemon.moveSlots = pokemon.baseMoveSlots.slice();
+ }
+ },
+ },
+ zamazenta: {
+ inherit: true,
+ onBattleStart(pokemon) {
+ if (pokemon.item !== 'rustedshield') return;
+ const rawSpecies = this.dex.species.get('Zamazenta-Crowned');
+ const species = pokemon.setSpecies(rawSpecies);
+ if (!species) return;
+ pokemon.baseSpecies = rawSpecies;
+ pokemon.details = pokemon.getUpdatedDetails();
+ // pokemon.setAbility(species.abilities['0'], null, null, true);
+ // pokemon.baseAbility = pokemon.ability;
+
+ const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHeadIndex >= 0) {
+ const move = this.dex.moves.get('behemothbash');
+ pokemon.baseMoveSlots[ironHeadIndex] = {
+ move: move.name,
+ id: move.id,
+ pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ target: move.target,
+ disabled: false,
+ disabledSource: '',
+ used: false,
+ };
+ pokemon.moveSlots = pokemon.baseMoveSlots.slice();
+ }
+ },
+ },
/*
// Example:
userid: {
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
index 6be6a31470..4113928614 100644
--- a/data/mods/gen9ssb/scripts.ts
+++ b/data/mods/gen9ssb/scripts.ts
@@ -374,40 +374,8 @@ export const Scripts: ModdedBattleScriptsData = {
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 = pokemon.getUpdatedDetails();
- // pokemon.setAbility(species.abilities['0'], null, 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.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- target: move.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- pokemon.moveSlots = pokemon.baseMoveSlots.slice();
- }
+ this.singleEvent('BattleStart', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
}
this.format.onBattleStart?.call(this);
@@ -429,9 +397,6 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
}
- for (const pokemon of this.getAllPokemon()) {
- this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
- }
this.midTurn = true;
break;
}
diff --git a/data/mods/monkeyspaw/scripts.ts b/data/mods/monkeyspaw/scripts.ts
index ce494c72bd..86a484e7ae 100644
--- a/data/mods/monkeyspaw/scripts.ts
+++ b/data/mods/monkeyspaw/scripts.ts
@@ -193,40 +193,8 @@ export const Scripts: ModdedBattleScriptsData = {
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 = pokemon.getUpdatedDetails();
- pokemon.setAbility(species.abilities['0'], null, 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.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- target: move.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- pokemon.moveSlots = pokemon.baseMoveSlots.slice();
- }
+ this.singleEvent('BattleStart', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
}
this.format.onBattleStart?.call(this);
@@ -248,9 +216,6 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
}
- for (const pokemon of this.getAllPokemon()) {
- this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
- }
this.midTurn = true;
break;
}
diff --git a/sim/battle.ts b/sim/battle.ts
index cbfbda0de2..f06c223980 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -2672,40 +2672,8 @@ export class Battle {
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 = pokemon.getUpdatedDetails();
- pokemon.setAbility(species.abilities['0'], null, null, true);
- pokemon.baseAbility = pokemon.ability;
-
- const behemothMove: { [k: string]: string } = {
- 'Zacian-Crowned': 'behemothblade', 'Zamazenta-Crowned': 'behemothbash',
- };
- const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
- if (ironHeadIndex >= 0) {
- const move = this.dex.moves.get(behemothMove[rawSpecies.name]);
- pokemon.baseMoveSlots[ironHeadIndex] = {
- move: move.name,
- id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- target: move.target,
- disabled: false,
- disabledSource: '',
- used: false,
- };
- pokemon.moveSlots = pokemon.baseMoveSlots.slice();
- }
+ this.singleEvent('BattleStart', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
}
this.format.onBattleStart?.call(this);
@@ -2727,9 +2695,6 @@ export class Battle {
}
}
}
- for (const pokemon of this.getAllPokemon()) {
- this.singleEvent('Start', this.dex.conditions.getByID(pokemon.species.id), pokemon.speciesState, pokemon);
- }
this.midTurn = true;
break;
}
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index 057d6f3284..f900795ad6 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -639,6 +639,7 @@ export class Condition extends BasicEffect implements
declare readonly onStart?: (
this: Battle, target: Pokemon, source: Pokemon, sourceEffect: Effect
) => boolean | null | void;
+ declare readonly onBattleStart?: (this: Battle, pokemon: Pokemon) => void;
constructor(data: AnyObject) {
super(data);
diff --git a/test/sim/team-validator/formes.js b/test/sim/team-validator/formes.js
index 518f782fb6..f405477b79 100644
--- a/test/sim/team-validator/formes.js
+++ b/test/sim/team-validator/formes.js
@@ -100,17 +100,16 @@ describe('Team Validator', () => {
assert.legalTeam(team, 'gen7anythinggoes');
});
- // Zamazenta is unreleased currently
- it.skip('should tier Zacian and Zamazenta formes separately', () => {
+ it('should tier Zacian and Zamazenta formes separately', () => {
team = [
{ species: 'zamazenta-crowned', ability: 'dauntlessshield', item: 'rustedshield', moves: ['howl'], evs: { hp: 1 } },
];
- assert.legalTeam(team, 'gen9almostanyability');
+ assert.false.legalTeam(team, 'gen9ou');
team = [
{ species: 'zamazenta', ability: 'dauntlessshield', item: 'lifeorb', moves: ['howl'], evs: { hp: 1 } },
];
- assert.false.legalTeam(team, 'gen9almostanyability');
+ assert.legalTeam(team, 'gen9ou');
});
it('should validate Unown formes in Gen 2 based on DVs', () => {
From 1091524b94f4fe8797750e3aa0e5f94a357874c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 18 Feb 2026 01:36:37 +0000
Subject: [PATCH 084/233] Gen 1: Fix underflow glitch applied to mimicked
duplicate moves (#11746)
* Fix underflow glitch applied to mimicked duplicate moves
* Remove flags
* Remove console.log
---
data/mods/gen1/moves.ts | 16 ++++++++++++++++
data/mods/gen1/scripts.ts | 19 +++++++++++++++++++
data/mods/gen4/moves.ts | 3 +--
data/mods/gen7letsgo/moves.ts | 7 +++++--
sim/pokemon.ts | 5 ++---
5 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index ba21a2506c..a219633070 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -458,6 +458,22 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target: "self",
type: "Psychic",
},
+ metronome: {
+ inherit: true,
+ onHit(pokemon) {
+ const moves = this.dex.moves.all().filter(move => (
+ (!move.isNonstandard || move.isNonstandard === 'Unobtainable') && move.flags['metronome']
+ ));
+ let randomMove = '';
+ if (moves.length) {
+ moves.sort((a, b) => a.num - b.num);
+ randomMove = this.sample(moves).id;
+ }
+ if (!randomMove) return false;
+ pokemon.side.lastSelectedMove = this.toID(randomMove);
+ this.actions.useMove(randomMove, pokemon);
+ },
+ },
mimic: {
inherit: true,
flags: { protect: 1, bypasssub: 1, metronome: 1 },
diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts
index 118b5ac213..7aa7786f21 100644
--- a/data/mods/gen1/scripts.ts
+++ b/data/mods/gen1/scripts.ts
@@ -25,6 +25,25 @@ export const Scripts: ModdedBattleScriptsData = {
// BattlePokemon scripts.
pokemon: {
inherit: true,
+ // In gen 1, a Pokémon can have two instances of the same move using Mimic
+ // we need to make sure to deduct PP from a move that has PP left
+ deductPP(move, amount, target) {
+ move = this.battle.dex.moves.get(move);
+ // first loop: get the first instance with PP left
+ // second loop: get the first instance, even if it has no PP left
+ for (let i = 0; i < 2; i++) {
+ for (const ppData of this.moveSlots) {
+ if (ppData.id !== move.id) continue;
+ ppData.used = true;
+ if (!ppData.pp && i === 0) continue;
+
+ if (!amount) amount = 1;
+ ppData.pp -= amount;
+ return amount;
+ }
+ }
+ return 0;
+ },
getStat(statName, unmodified) {
// @ts-expect-error type checking prevents 'hp' from being passed, but we're paranoid
if (statName === 'hp') throw new Error("Please read `maxhp` directly");
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 1acc40facf..848090153c 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1087,9 +1087,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { noassist: 1, failcopycat: 1, nosleeptalk: 1, failmimic: 1 },
onHit(pokemon) {
const moves = this.dex.moves.all().filter(move => (
- (![2, 4].includes(this.gen) || !pokemon.moves.includes(move.id)) &&
+ move.flags['metronome'] && !pokemon.moves.includes(move.id) &&
(!move.isNonstandard || move.isNonstandard === 'Unobtainable') &&
- move.flags['metronome'] &&
!(this.field.pseudoWeather['gravity'] && move.flags['gravity']) &&
!(pokemon.volatiles['healblock'] && move.flags['heal'])
));
diff --git a/data/mods/gen7letsgo/moves.ts b/data/mods/gen7letsgo/moves.ts
index 552a0df8c8..31f669b0e1 100644
--- a/data/mods/gen7letsgo/moves.ts
+++ b/data/mods/gen7letsgo/moves.ts
@@ -41,8 +41,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
desc: "A random move that was introduced in gen 1 is selected for use, other than Counter, Mimic, Mirror Move, Struggle, or Transform.",
shortDesc: "Picks a random move from gen 1.",
- onHit(target, source, effect) {
- const moves = this.dex.moves.all().filter(move => move.gen === 1 && move.flags['metronome']);
+ onHit(target) {
+ const moves = this.dex.moves.all().filter(move => (
+ (!move.isNonstandard || move.isNonstandard === 'Unobtainable') &&
+ move.flags['metronome'] && move.gen === 1
+ ));
let randomMove = '';
if (moves.length) {
moves.sort((a, b) => a.num - b.num);
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 418bdc3bd2..6ff69ec153 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -876,16 +876,15 @@ export class Pokemon {
}
deductPP(move: string | Move, amount?: number | null, target?: Pokemon | null | false) {
- const gen = this.battle.gen;
move = this.battle.dex.moves.get(move);
const ppData = this.getMoveData(move);
if (!ppData) return 0;
ppData.used = true;
- if (!ppData.pp && gen > 1) return 0;
+ if (!ppData.pp) return 0;
if (!amount) amount = 1;
ppData.pp -= amount;
- if (ppData.pp < 0 && gen > 1) {
+ if (ppData.pp < 0) {
amount += ppData.pp;
ppData.pp = 0;
}
From 95aad7df02abd58dd737e0acdac22e5d049d360e Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sat, 21 Feb 2026 17:50:31 -0700
Subject: [PATCH 085/233] Gen 6 Mix and Mega: Ban Gengarite and restrict Entei
---
config/formats.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 5db5d77f56..c41d91294f 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3077,11 +3077,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen6mixandmega',
searchShow: false,
ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause', 'Overflow Stat Mod', '!Sleep Clause Mod', 'Sleep Moves Clause'],
- banlist: ['Shadow Tag', 'Baton Pass', 'Electrify'],
+ banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
restricted: [
- 'Beedrillite', 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite',
- 'Arceus', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', 'Dialga', 'Dragonite', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black',
- 'Kyurem-White', 'Lugia', 'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Xerneas', 'Yveltal', 'Zekrom',
+ 'Beedrillite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Arceus', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
+ 'Dialga', 'Dragonite', 'Entei', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
+ 'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Xerneas', 'Yveltal', 'Zekrom',
],
onValidateTeam(team) {
const itemTable = new Set();
From 3ad40b4a5cb20bd653014e871c5bdd743ab1e037 Mon Sep 17 00:00:00 2001
From: Sunny <165436526+Sunny-Krys@users.noreply.github.com>
Date: Sun, 22 Feb 2026 21:27:12 -0500
Subject: [PATCH 086/233] Gen 1 LC: Add Accuracy and Sleep Moves Clause
(#11776)
Co-authored-by: kn-Kris <165436526+kn-Kris@users.noreply.github.com>
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index c41d91294f..65f2ae1270 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5393,7 +5393,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 1] LC",
mod: 'gen1',
searchShow: false,
- ruleset: ['Little Cup', 'Standard', '!Max Level', 'Adjust Level = 5'],
+ ruleset: ['Little Cup', 'Standard', '!Max Level', 'Adjust Level = 5', 'Sleep Moves Clause', 'Accuracy Moves Clause'],
banlist: ['Dragon Rage', 'Fire Spin', 'Sonic Boom', 'Wrap'],
},
{
From c30261be77fee5186273046416e626a5e7d75f77 Mon Sep 17 00:00:00 2001
From: Niadev
Date: Sat, 28 Feb 2026 01:21:20 +0000
Subject: [PATCH 087/233] Ban Okidogi from National Dex UU (#11779)
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index ddaaefa03f..42664c5615 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -5773,7 +5773,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
okidogi: {
tier: "UUBL",
doublesTier: "(DUU)",
- natDexTier: "RUBL",
+ natDexTier: "UUBL",
},
munkidori: {
tier: "NU",
From 76eb3eb3bfeef0b9aa414659923b0e09468469ef Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 27 Feb 2026 19:50:24 -0700
Subject: [PATCH 088/233] Update Kalos starter Mega abilities (#11781)
---
data/pokedex.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/data/pokedex.ts b/data/pokedex.ts
index 15f545e973..e0700637b1 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -12034,7 +12034,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Grass", "Fighting"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 88, atk: 137, def: 172, spa: 74, spd: 115, spe: 44 },
- abilities: { 0: "Overgrow", H: "Bulletproof" },
+ abilities: { 0: "Bulletproof" },
heightm: 1.6,
weightkg: 90,
color: "Green",
@@ -12094,7 +12094,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Fire", "Psychic"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 75, atk: 69, def: 72, spa: 159, spd: 125, spe: 134 },
- abilities: { 0: "Blaze", H: "Magician" },
+ abilities: { 0: "Levitate" },
heightm: 1.5,
weightkg: 39,
color: "Red",
@@ -12186,7 +12186,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Water", "Dark"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 72, atk: 125, def: 77, spa: 133, spd: 81, spe: 142 },
- abilities: { 0: "Torrent", H: "Protean" },
+ abilities: { 0: "Protean" },
heightm: 1.5,
weightkg: 40,
color: "Blue",
From 8a0685b03f94ae8d8308b4f037f86244040af71a Mon Sep 17 00:00:00 2001
From: Mia <49593536+mia-pi-git@users.noreply.github.com>
Date: Sun, 1 Mar 2026 01:11:09 -0600
Subject: [PATCH 089/233] Ladder tours: Cap deadline length
---
server/chat-plugins/laddertours.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/server/chat-plugins/laddertours.ts b/server/chat-plugins/laddertours.ts
index 518ae8041e..fccbada35f 100644
--- a/server/chat-plugins/laddertours.ts
+++ b/server/chat-plugins/laddertours.ts
@@ -87,13 +87,17 @@ export class LadderTracker {
this.deadline = date;
if (this.final) clearTimeout(this.final);
+ const timeDiff = (+this.deadline - Date.now()) - 500;
+ if (timeDiff >= Number.MAX_SAFE_INTEGER) {
+ throw new Chat.ErrorMessage("Deadline is too far away. Please wait and set it later.");
+ }
// We set the timer to fire slightly before the deadline and then
// repeatedly do process.nextTick checks for accuracy
this.final = setTimeout(() => {
this.stop();
// eslint-disable-next-line @typescript-eslint/no-floating-promises
this.captureFinalLeaderboard();
- }, (+this.deadline - Date.now()) - 500);
+ }, timeDiff);
if (save) LadderTracker.save();
}
From be25932afff89949f9bcda3eecb1df445f0beaeb Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 03:19:22 -0700
Subject: [PATCH 090/233] Update rotational ladders (#11785)
* Update Kalos starter Mega abilities
* Update rotational ladders
---
config/formats.ts | 489 ++++++++++--------
data/aliases.ts | 8 +-
data/mods/gen8linked/items.ts | 14 -
.../mods/{gen8linked => linked}/conditions.ts | 13 +-
data/mods/{gen8linked => linked}/moves.ts | 261 ++++++----
data/mods/{gen8linked => linked}/scripts.ts | 87 +++-
6 files changed, 505 insertions(+), 367 deletions(-)
delete mode 100644 data/mods/gen8linked/items.ts
rename data/mods/{gen8linked => linked}/conditions.ts (82%)
rename data/mods/{gen8linked => linked}/moves.ts (59%)
rename data/mods/{gen8linked => linked}/scripts.ts (88%)
diff --git a/config/formats.ts b/config/formats.ts
index 65f2ae1270..a04fa483f6 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -358,6 +358,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Sneasel-Hisui', 'Ursaring', 'Vigoroth', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass',
],
},
+ {
+ name: "[Gen 9] Ubers UU",
+ mod: 'gen9',
+ searchShow: false,
+ ruleset: ['[Gen 9] Ubers'],
+ banlist: [
+ // Ubers OU
+ 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Calyrex-Ice', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto',
+ 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina-Origin', 'Glimmora', 'Gliscor', 'Grimmsnarl', 'Groudon', 'Hatterene', 'Ho-Oh', 'Kingambit', 'Koraidon',
+ 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned',
+ // Ubers UUBL + Lunala, Arceus-Ghost, Arceus-Water
+ 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian',
+ 'Zekrom',
+ ],
+ },
// Draft League
///////////////////////////////////////////////////////////////////
@@ -481,199 +496,135 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Flat Rules', 'VGC Timer', 'Best of = 3'],
},
{
- name: "[Gen 9] Flipped",
- desc: `All Pokémon have their base stats flipped. For example, Sylveon's HP and Speed stats, Attack and Special Defense stats, and Defense and Special Attack stats swap.`,
- mod: 'gen9',
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
- banlist: [
- 'Annihilape', 'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal',
- 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre',
- 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
- 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian',
- 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
- 'Last Respects', 'Shed Tail',
- ],
- },
- {
- name: "[Gen 9] The Loser's Game",
- desc: `The first player to lose all of their Pokémon wins.`,
- mod: 'gen9',
+ name: "[Gen 9] Linked",
+ desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
+ mod: 'linked',
// searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'],
- banlist: ['Infiltrator', 'Choice Scarf', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct'],
- onValidateTeam(team) {
- const familyTable = new Set();
- for (const set of team) {
- let species = this.dex.species.get(set.species);
- while (species.prevo) {
- species = this.dex.species.get(species.prevo);
- }
- if (familyTable.has(species.id)) {
- return [
- `You are limited to one Pokémon from each family by the Family Clause.`,
- `(You have more than one evolution of ${species.name}.)`,
- ];
- }
- familyTable.add(species.id);
- }
- },
- battle: {
- tiebreak() {
- if (this.ended) return false;
-
- this.inputLog.push(`>tiebreak`);
- this.add('message', "Time's up! Going to tiebreaker...");
- const notFainted = this.sides.map(side => (
- side.pokemon.filter(pokemon => !pokemon.fainted).length
- ));
- this.add('-message', this.sides.map((side, i) => (
- `${side.name}: ${notFainted[i]} Pokemon left`
- )).join('; '));
- const maxNotFainted = Math.max(...notFainted);
- let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpPercentage = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
- )).join('; '));
- const maxPercentage = Math.max(...hpPercentage);
- tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
-
- const hpTotal = tiedSides.map(side => (
- side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
- ));
- this.add('-message', tiedSides.map((side, i) => (
- `${side.name}: ${Math.round(hpTotal[i])} total HP left`
- )).join('; '));
- const maxTotal = Math.max(...hpTotal);
- tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
- if (tiedSides.length <= 1) {
- return this.win(tiedSides[1]);
- }
- return this.tie();
- },
- checkWin(faintData) {
- const team1PokemonLeft = this.sides[0].pokemonLeft;
- const team2PokemonLeft = this.sides[1].pokemonLeft;
- if (!team1PokemonLeft && !team2PokemonLeft) {
- this.win(faintData?.target.side || null);
- return true;
- }
- for (const side of this.sides) {
- if (!side.pokemonLeft) {
- this.win(side);
- return true;
- }
- }
- },
- },
- },
- {
- name: "[Gen 9] STABmons Mix and Mega",
- desc: `Mega evolve any Pokémon with any mega stone, or transform them with Genesect Drives, Primal orbs, Origin orbs, Rusted items, Ogerpon Masks, Arceus Plates, and Silvally Memories with no limit. Pokémon can use any move of their typing, in addition to the moves they can normally learn. Mega and Primal boosts based on form changes from gen 7.`,
- mod: 'mixandmega',
- ruleset: ['Standard OMs', 'STABmons Move Legality', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'],
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'],
banlist: [
- 'Arceus', 'Calyrex-Shadow', 'Enamorus-Incarnate', 'Koraidon', 'Kyogre', 'Miraidon', 'Komala', 'Moody', 'Shadow Tag',
- 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Zygardite',
- 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail',
+ 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', 'Eternatus',
+ 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
+ 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Raichu-Alola',
+ 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona',
+ 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Moody', 'Sand Rush', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden',
+ 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Basculegion-M', 'Calyrex-Ice', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dragapult', 'Eternatus', 'Flutter Mane', 'Gengar', 'Giratina', 'Gouging Fire',
- 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Manaphy', 'Meloetta', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
- 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', 'Sneasler', 'Solgaleo', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Walking Wake',
- 'Zacian', 'Zekrom', 'Zoroark-Hisui', 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Blood Moon', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw',
- 'Dragon Energy', 'Electro Shot', 'Extreme Speed', 'Fillet Away', 'Gigaton Hammer', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Power Trip',
- 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Torch Song', 'Triple Arrows', 'V-create', 'Victory Dance', 'Wicked Blow',
+ 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Detect', 'Dig', 'Dive', 'Fly', 'Imprison', 'Phantom Force', 'Protect',
+ 'Ruination', 'Shadow Force', 'Silk Trap', 'Spiky Shield', 'Super Fang', 'Taunt', 'Trick Room',
],
- onValidateTeam(team) {
- const itemTable = new Set();
- for (const set of team) {
- const item = this.dex.items.get(set.item);
- if (!(item.forcedForme && !item.zMove) && !item.megaStone &&
- !item.isPrimalOrb && !item.name.startsWith('Rusted')) continue;
- const natdex = this.ruleTable.has('natdexmod');
- if (natdex && item.id !== 'ultranecroziumz') continue;
- const species = this.dex.species.get(set.species);
- if (species.isNonstandard && !this.ruleTable.has(`+pokemontag:${this.toID(species.isNonstandard)}`)) {
- return [`${species.baseSpecies} does not exist in gen 9.`];
+ onValidateSet(set) {
+ const problems = [];
+ for (const [i, moveid] of set.moves.entries()) {
+ const move = this.dex.moves.get(moveid);
+ if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
+ problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
}
- if (((item.itemUser?.includes(species.name) || item.forcedForme === species.name) &&
- !item.megaStone && !item.isPrimalOrb) || (natdex && species.name.startsWith('Necrozma-') &&
- item.id === 'ultranecroziumz')) {
- continue;
+ }
+ return problems;
+ },
+ },
+ {
+ name: "[Gen 9] 350 Cup",
+ desc: `Pokemon with a BST of 350 or lower have their stats doubled.`,
+ mod: 'gen9',
+ // searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'],
+ banlist: ['Calyrex-Shadow', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
+ },
+ {
+ name: "[Gen 9] Pokebilities AAA",
+ desc: `Pokémon have all of their released abilities simultaneously, as well as one ability they cannot normally use.`,
+ mod: 'pokebilities',
+ // searchShow: false,
+ ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
+ banlist: [
+ 'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Enamorus-Base', 'Espathra', 'Eternatus', 'Excadrill',
+ 'Flutter Mane', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor',
+ 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
+ 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle',
+ 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Zacian',
+ 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit',
+ 'Regenerator > 2',
+ 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll', 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer',
+ 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive', 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak',
+ 'Snow Warning + Slush Rush', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail',
+ ],
+ restricted: [
+ 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Neutralizing Gas',
+ 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Simple', 'Speed Boost', 'Stakeout', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard',
+ ],
+ onValidateSet(set) {
+ const species = this.dex.species.get(set.species);
+ const unSeenAbilities = Object.keys(species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
+ .map(key => species.abilities[key as "0" | "1" | "H" | "S"])
+ .filter(ability => ability !== set.ability);
+ if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
+ for (const abilityName of unSeenAbilities) {
+ const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
+ if (banReason) {
+ return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
+ }
}
- if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') {
- return [`${species.name} is not allowed to hold ${item.name}.`];
- }
- if (itemTable.has(item.id)) {
- return [
- `You are limited to one of each Mega Stone/Primal Orb/Rusted item/Origin item/Ogerpon Mask/Arceus Plate/Silvally Memory.`,
- `(You have more than one ${item.name})`,
- ];
- }
- itemTable.add(item.id);
}
},
onBegin() {
for (const pokemon of this.getAllPokemon()) {
- pokemon.m.originalSpecies = pokemon.baseSpecies.name;
+ if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
+ continue;
+ }
+ pokemon.m.innates = Object.keys(pokemon.species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
+ .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
+ .filter(ability => ability !== pokemon.ability);
}
},
- onSwitchIn(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- // Place volatiles on the Pokémon to show its mega-evolved condition and details
- this.add('-start', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
+ onBeforeSwitchIn(pokemon) {
+ if (pokemon.m.innates) {
+ for (const innate of pokemon.m.innates) {
+ if (pokemon.hasAbility(innate)) continue;
+ const effect = 'ability:' + this.toID(innate);
+ pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon });
}
}
},
onSwitchOut(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- this.add('-end', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
}
},
+ onFaint(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ const innateEffect = this.dex.conditions.get(innate) as Effect;
+ this.singleEvent('End', innateEffect, null, pokemon);
+ }
+ },
+ onAfterMega(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
+ }
+ pokemon.m.innates = undefined;
+ },
},
{
- name: "[Gen 9] Ubers UU",
- mod: 'gen9',
- // searchShow: false,
- ruleset: ['[Gen 9] Ubers'],
+ name: "[Gen 9] 4v4 Doubles UU",
+ desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.",
+ ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'],
banlist: [
- // Ubers OU
- 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Calyrex-Ice', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto',
- 'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina-Origin', 'Glimmora', 'Gliscor', 'Grimmsnarl', 'Groudon', 'Hatterene', 'Ho-Oh', 'Kingambit', 'Koraidon',
- 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned',
- // Ubers UUBL + Lunala, Arceus-Ghost, Arceus-Water
- 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian',
- 'Zekrom',
+ 'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane',
+ 'Gholdengo', 'Gouging Fire', 'Incineroar', 'Indeedee-F', 'Iron Crown', 'Landorus-Incarnate', 'Landorus-Therian', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring',
+ 'Porygon2', 'Raging Bolt', 'Regidrago', 'Rillaboom', 'Roaring Moon', 'Sneasler', 'Ting-Lu', 'Torkoal', 'Tornadus-Incarnate', 'Ursaluna-Base', 'Urshifu-Single-Strike',
+ 'Urshifu-Rapid-Strike', 'Whimsicott', 'Commander', 'Bright Powder', 'King\'s Rock', 'Razor Fang',
],
},
{
- name: "[Gen 9] National Dex Ubers UU",
+ name: "[Gen 9] National Dex RU",
mod: 'gen9',
// searchShow: false,
- ruleset: ['[Gen 9] National Dex Ubers'],
- banlist: [
- 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Ditto', 'Dondozo', 'Eternatus', 'Giratina-Origin', 'Groudon-Primal',
- 'Hatterene', 'Ho-Oh', 'Kingambit', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Salamence-Mega', 'Smeargle', 'Yveltal',
- 'Zacian-Crowned', 'Zygarde-50%',
- // UUBL
- 'Arceus-Dragon', 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Chien-Pao', 'Dracovish', 'Flutter Mane', 'Groudon',
- 'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects',
- ],
+ ruleset: ['[Gen 9] National Dex UU'],
+ banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
},
{
name: "[Gen 9] Six by Six Random Battle",
@@ -718,32 +669,27 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 3] Ubers",
- mod: 'gen3',
+ name: "[Gen 4] Ubers",
+ mod: 'gen4',
// searchShow: false,
- ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
- banlist: ['Wobbuffet + Leftovers', 'Wynaut + Leftovers', 'Baton Pass'],
+ ruleset: ['Standard'],
+ banlist: ['AG'],
},
{
- name: "[Gen 1] NC 1997",
- mod: 'gen1jpn',
- bestOfDefault: true,
+ name: "[Gen 6] NU",
+ mod: 'gen6',
// searchShow: false,
- ruleset: [
- 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
- 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'Cancel Mod', 'NC 1997 Move Legality',
- ],
- banlist: ['Uber'],
+ ruleset: ['[Gen 6] RU'],
+ banlist: ['RU', 'NUBL'],
},
{
- name: "[Gen 7] VGC 2019",
- mod: 'gen7',
+ name: "[Gen 4] VGC 2009",
+ mod: 'gen4pt',
gameType: 'doubles',
- // searchShow: false,
bestOfDefault: true,
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', 'Limit Two Restricted'],
- restricted: ['Restricted Legendary'],
- banlist: ['Unown', 'Battle Bond'],
+ // searchShow: false,
+ ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50'],
+ banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'],
},
// Other Metagames
@@ -1003,14 +949,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
},
- {
- name: "[Gen 9] 350 Cup",
- desc: `Pokemon with a BST of 350 or lower have their stats doubled.`,
- mod: 'gen9',
- searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'],
- banlist: ['Calyrex-Shadow', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
- },
{
name: "[Gen 9] Alphabet Cup",
desc: `Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.`,
@@ -1482,6 +1420,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [
],
// Implemented the mechanics as a Rule because I'm too lazy to make battles read base format for `onResidual` at the moment
},
+ {
+ name: "[Gen 9] Flipped",
+ desc: `All Pokémon have their base stats flipped. For example, Sylveon's HP and Speed stats, Attack and Special Defense stats, and Defense and Special Attack stats swap.`,
+ mod: 'gen9',
+ searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Abilities Clause', 'Evasion Items Clause', 'Flipped Mod'],
+ banlist: [
+ 'Annihilape', 'Araquanid', 'Arceus', 'Azumarill', 'Blissey', 'Calyrex-Ice', 'Calyrex-Shadow', 'Cloyster', 'Cyclizar', 'Deoxys-Attack', 'Deoxys-Normal',
+ 'Deoxys-Speed', 'Dialga', 'Dialga-Origin', 'Espathra', 'Eternatus', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Koraidon', 'Kyogre',
+ 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Mienshao', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
+ 'Palkia-Origin', 'Rayquaza', 'Regieleki', 'Reshiram', 'Shaymin-Sky', 'Snorlax', 'Solgaleo', 'Sylveon', 'Terapagos', 'Torkoal', 'Tornadus-Therian', 'Zacian',
+ 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass',
+ 'Last Respects', 'Shed Tail',
+ ],
+ },
{
name: "[Gen 9] Foresighters",
desc: `Moves in the first moveslot will be delayed by two turns.`,
@@ -2741,6 +2694,88 @@ export const Formats: import('../sim/dex-formats').FormatList = [
pokemon.apparentType = pokemon.getTypes(true).join('/');
},
},
+ {
+ name: "[Gen 9] The Loser's Game",
+ desc: `The first player to lose all of their Pokémon wins.`,
+ mod: 'gen9',
+ searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Clause Mod', '!OHKO Clause', 'Picked Team Size = 6', 'Adjust Level = 100'],
+ banlist: ['Infiltrator', 'Choice Scarf', 'Explosion', 'Final Gambit', 'Healing Wish', 'Lunar Dance', 'Magic Room', 'Memento', 'Misty Explosion', 'Self-Destruct'],
+ onValidateTeam(team) {
+ const familyTable = new Set();
+ for (const set of team) {
+ let species = this.dex.species.get(set.species);
+ while (species.prevo) {
+ species = this.dex.species.get(species.prevo);
+ }
+ if (familyTable.has(species.id)) {
+ return [
+ `You are limited to one Pokémon from each family by the Family Clause.`,
+ `(You have more than one evolution of ${species.name}.)`,
+ ];
+ }
+ familyTable.add(species.id);
+ }
+ },
+ battle: {
+ tiebreak() {
+ if (this.ended) return false;
+
+ this.inputLog.push(`>tiebreak`);
+ this.add('message', "Time's up! Going to tiebreaker...");
+ const notFainted = this.sides.map(side => (
+ side.pokemon.filter(pokemon => !pokemon.fainted).length
+ ));
+ this.add('-message', this.sides.map((side, i) => (
+ `${side.name}: ${notFainted[i]} Pokemon left`
+ )).join('; '));
+ const maxNotFainted = Math.max(...notFainted);
+ let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
+
+ const hpPercentage = tiedSides.map(side => (
+ side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6
+ ));
+ this.add('-message', tiedSides.map((side, i) => (
+ `${side.name}: ${Math.round(hpPercentage[i])}% total HP left`
+ )).join('; '));
+ const maxPercentage = Math.max(...hpPercentage);
+ tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
+
+ const hpTotal = tiedSides.map(side => (
+ side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b)
+ ));
+ this.add('-message', tiedSides.map((side, i) => (
+ `${side.name}: ${Math.round(hpTotal[i])} total HP left`
+ )).join('; '));
+ const maxTotal = Math.max(...hpTotal);
+ tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal);
+ if (tiedSides.length <= 1) {
+ return this.win(tiedSides[1]);
+ }
+ return this.tie();
+ },
+ checkWin(faintData) {
+ const team1PokemonLeft = this.sides[0].pokemonLeft;
+ const team2PokemonLeft = this.sides[1].pokemonLeft;
+ if (!team1PokemonLeft && !team2PokemonLeft) {
+ this.win(faintData?.target.side || null);
+ return true;
+ }
+ for (const side of this.sides) {
+ if (!side.pokemonLeft) {
+ this.win(side);
+ return true;
+ }
+ }
+ },
+ },
+ },
{
name: "[Gen 9] Tier Shift",
desc: `Pokémon below OU get their stats, excluding HP, boosted. UU/RUBL get +15, RU/NUBL get +20, NU/PUBL get +25, and PU or lower get +30.`,
@@ -3205,11 +3240,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay'],
},
{
- name: "[Gen 9] National Dex RU",
+ name: "[Gen 9] National Dex Ubers UU",
mod: 'gen9',
searchShow: false,
- ruleset: ['[Gen 9] National Dex UU'],
- banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
+ ruleset: ['[Gen 9] National Dex Ubers'],
+ banlist: [
+ 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Ditto', 'Dondozo', 'Eternatus', 'Giratina-Origin', 'Groudon-Primal',
+ 'Hatterene', 'Ho-Oh', 'Kingambit', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Salamence-Mega', 'Smeargle', 'Yveltal',
+ 'Zacian-Crowned', 'Zygarde-50%',
+ // UUBL
+ 'Arceus-Dragon', 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Chien-Pao', 'Dracovish', 'Flutter Mane', 'Groudon',
+ 'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects',
+ ],
},
{
name: "[Gen 9] National Dex LC",
@@ -4552,6 +4594,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 7] Doubles OU'],
banlist: ['DOU', 'DBL'],
},
+ {
+ name: "[Gen 7] VGC 2019",
+ mod: 'gen7',
+ gameType: 'doubles',
+ searchShow: false,
+ bestOfDefault: true,
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 7', 'VGC Timer', 'Limit Two Restricted'],
+ restricted: ['Restricted Legendary'],
+ banlist: ['Unown', 'Battle Bond'],
+ },
{
name: "[Gen 7] VGC 2018",
mod: 'gen7',
@@ -4628,13 +4680,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 6] UU'],
banlist: ['UU', 'RUBL'],
},
- {
- name: "[Gen 6] NU",
- mod: 'gen6',
- searchShow: false,
- ruleset: ['[Gen 6] RU'],
- banlist: ['RU', 'NUBL'],
- },
{
name: "[Gen 6] PU",
mod: 'gen6',
@@ -4982,13 +5027,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "DPP Singles",
column: 4,
},
- {
- name: "[Gen 4] Ubers",
- mod: 'gen4',
- searchShow: false,
- ruleset: ['Standard'],
- banlist: ['AG'],
- },
{
name: "[Gen 4] UU",
mod: 'gen4',
@@ -5134,15 +5172,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
}
},
},
- {
- name: "[Gen 4] VGC 2009",
- mod: 'gen4pt',
- gameType: 'doubles',
- searchShow: false,
- bestOfDefault: true,
- ruleset: ['Flat Rules', '! Adjust Level Down', 'Max Level = 50'],
- banlist: ['Tyranitar', 'Rotom', 'Judgment', 'Soul Dew'],
- },
{
name: "[Gen 4] Doubles Custom Game",
mod: 'gen4',
@@ -5162,11 +5191,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
column: 4,
},
{
- name: "[Gen 3] RU",
+ name: "[Gen 3] Ubers",
mod: 'gen3',
searchShow: false,
- ruleset: ['Standard'],
- banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'Glalie', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
+ ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
+ banlist: ['Wobbuffet + Leftovers', 'Wynaut + Leftovers', 'Baton Pass'],
},
{
name: "[Gen 3] UU",
@@ -5175,6 +5204,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard'],
banlist: ['Uber', 'OU', 'UUBL', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
},
+ {
+ name: "[Gen 3] RU",
+ mod: 'gen3',
+ searchShow: false,
+ ruleset: ['Standard'],
+ banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'Glalie', 'Smeargle + Ingrain', 'Arena Trap', 'Baton Pass', 'Swagger'],
+ },
{
name: "[Gen 3] NU",
mod: 'gen3',
@@ -5406,6 +5442,17 @@ export const Formats: import('../sim/dex-formats').FormatList = [
],
banlist: ['Mew', 'Mewtwo', 'Bind', 'Clamp', 'Explosion', 'Fire Spin', 'Self-Destruct', 'Wrap'],
},
+ {
+ name: "[Gen 1] NC 1997",
+ mod: 'gen1jpn',
+ bestOfDefault: true,
+ searchShow: false,
+ ruleset: [
+ 'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
+ 'Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Species Clause', 'Nickname Clause', 'Cancel Mod', 'NC 1997 Move Legality',
+ ],
+ banlist: ['Uber'],
+ },
{
name: "[Gen 1] Japanese OU",
desc: `Generation 1 with Japanese battle mechanics.`,
diff --git a/data/aliases.ts b/data/aliases.ts
index 72eb6bfa03..d5bd11694f 100644
--- a/data/aliases.ts
+++ b/data/aliases.ts
@@ -91,10 +91,10 @@ export const Aliases: import('../sim/dex').AliasesTable = {
zaou: "[Gen 9] Legends Z-A OU",
legendsou: "[Gen 9] Legends Z-A OU",
plzaou: "[Gen 9] Legends Z-A OU",
- omotm: "[Gen 9] Flipped",
- lcotm: "[Gen 9] The Loser's Game",
- ommotm: "[Gen 9] STABmons Mix and Mega",
- ommspotlight: "[Gen 9] STABmons Mix and Mega",
+ omotm: "[Gen 9] Linked",
+ lcotm: "[Gen 9] 350 Cup",
+ ommotm: "[Gen 9] Pokebilities AAA",
+ ommspotlight: "[Gen 9] Pokebilities AAA",
// mega evos --- 1st ordered alphabetically by species, 2nd by alias
megasnow: "Abomasnow-Mega",
diff --git a/data/mods/gen8linked/items.ts b/data/mods/gen8linked/items.ts
deleted file mode 100644
index 2765c2ed4a..0000000000
--- a/data/mods/gen8linked/items.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- leppaberry: {
- inherit: true,
- onUpdate(pokemon) {
- if (!pokemon.hp) return;
- const moveSlot = pokemon.getMoveData(pokemon.m.lastMoveAbsolute);
- if (moveSlot?.pp === 0) {
- pokemon.addVolatile('leppaberry');
- pokemon.volatiles['leppaberry'].moveSlot = moveSlot;
- pokemon.eatItem();
- }
- },
- },
-};
diff --git a/data/mods/gen8linked/conditions.ts b/data/mods/linked/conditions.ts
similarity index 82%
rename from data/mods/gen8linked/conditions.ts
rename to data/mods/linked/conditions.ts
index de549ffb2a..014a218bc6 100644
--- a/data/mods/gen8linked/conditions.ts
+++ b/data/mods/linked/conditions.ts
@@ -21,7 +21,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
frz: {
inherit: true,
onBeforeMove(pokemon, target, move) {
- if (move.flags['defrost']) return;
+ if (move.flags['defrost'] && !(move.id === 'burnup' && !pokemon.hasType('Fire'))) return;
if (this.effectState.durationRolled !== this.turn && this.randomChance(1, 5)) {
pokemon.cureStatus();
return;
@@ -46,17 +46,14 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
}
}
this.add('-activate', pokemon, 'confusion');
- if (!this.randomChance(1, 3)) {
+ if (!this.randomChance(33, 100)) {
return;
}
this.activeTarget = pokemon;
- const damage = this.actions.getDamage(pokemon, pokemon, 40);
+ const damage = this.actions.getConfusionDamage(pokemon, 40);
if (typeof damage !== 'number') throw new Error("Confusion damage not dealt");
- this.damage(damage, pokemon, pokemon, {
- id: 'confused' as ID,
- effectType: 'Move',
- type: '???',
- } as unknown as ActiveMove);
+ const activeMove = { id: this.toID('confused'), effectType: 'Move', type: '???' };
+ this.damage(damage, pokemon, pokemon, activeMove as ActiveMove);
return false;
},
},
diff --git a/data/mods/gen8linked/moves.ts b/data/mods/linked/moves.ts
similarity index 59%
rename from data/mods/gen8linked/moves.ts
rename to data/mods/linked/moves.ts
index 4cf9d26437..e401244c0f 100644
--- a/data/mods/gen8linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -1,35 +1,38 @@
export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pursuit: {
inherit: true,
- beforeTurnCallback(pokemon, target) {
+ beforeTurnCallback(pokemon) {
// @ts-expect-error modded
const linkedMoves: [string, string] = pokemon.getLinkedMoves();
if (linkedMoves.length) {
if (linkedMoves[0] !== 'pursuit' && linkedMoves[1] === 'pursuit') return;
}
- target.side.addSideCondition('pursuit', pokemon);
- if (!target.side.sideConditions['pursuit'].sources) {
- target.side.sideConditions['pursuit'].sources = [];
+ for (const target of pokemon.foes()) {
+ target.addVolatile('pursuit');
+ const data = target.volatiles['pursuit'];
+ if (!data.sources) {
+ data.sources = [];
+ }
+ data.sources.push(pokemon);
}
- target.side.sideConditions['pursuit'].sources.push(pokemon);
},
},
mefirst: {
inherit: true,
onTryHit(target, pokemon) {
const action = this.queue.willMove(target);
- if (action) {
- // Mod-specific: Me First copies the first move in the link
- // @ts-expect-error modded
- const move = this.dex.getActiveMove(action.linked?.[0] || action.move);
- if (move.category !== 'Status' && !move.flags['failmefirst']) {
- pokemon.addVolatile('mefirst');
- this.actions.useMove(move, pokemon, { target });
- return null;
- }
- }
- return false;
+ if (!action) return false;
+ // Mod-specific: Me First copies the first move in the link
+ // @ts-expect-error modded
+ const move = this.dex.getActiveMove(action.linked?.[0] || action.move.id);
+ if (action.zmove || move.isZ || move.isMax) return false;
+ if (target.volatiles['mustrecharge']) return false;
+ if (move.category === 'Status' || move.flags['failmefirst']) return false;
+
+ pokemon.addVolatile('mefirst');
+ this.actions.useMove(move, pokemon, { target });
+ return null;
},
},
@@ -38,7 +41,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onTry(source, target) {
const action = this.queue.willMove(target);
- if (!action || action.choice !== 'move') {
+ if (!action || action.choice !== 'move' ||
+ // @ts-expect-error modded
+ (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
this.attrLastMove('[still]');
this.add('-fail', source);
return null;
@@ -51,13 +56,67 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return null;
}
// @ts-expect-error modded
- if (!action.linked) {
- if (action.move.category === 'Status' && action.move.id !== 'mefirst') {
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ if (action.linked) {
+ // @ts-expect-error modded
+ for (const linkedMove of action.linked) {
+ if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
}
- } else {
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ },
+ },
+ thunderclap: {
+ inherit: true,
+ onTry(source, target) {
+ const action = this.queue.willMove(target);
+ if (!action || action.choice !== 'move' ||
+ // @ts-expect-error modded
+ (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ if (target.volatiles.mustrecharge && target.volatiles.mustrecharge.duration! < 2) {
+ // Duration may not be lower than 2 if Sucker Punch is used as a low-priority move
+ // i.e. if Sucker Punch is linked with a negative priority move
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ // @ts-expect-error modded
+ if (action.linked) {
+ // @ts-expect-error modded
+ for (const linkedMove of action.linked) {
+ if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
+ }
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ },
+ },
+ upperhand: {
+ inherit: true,
+ onTry(source, target) {
+ const action = this.queue.willMove(target);
+ if (!action || action.choice !== 'move' || action.move.priority < 0.1 ||
+ // @ts-expect-error modded
+ (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ if (target.volatiles.mustrecharge && target.volatiles.mustrecharge.duration! < 2) {
+ // Duration may not be lower than 2 if Sucker Punch is used as a low-priority move
+ // i.e. if Sucker Punch is linked with a negative priority move
+ this.attrLastMove('[still]');
+ this.add('-fail', source);
+ return null;
+ }
+ // @ts-expect-error modded
+ if (action.linked) {
// @ts-expect-error modded
for (const linkedMove of action.linked) {
if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
@@ -73,13 +132,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
sketch: {
inherit: true,
onHit(target, source) {
- const disallowedMoves = ['chatter', 'sketch', 'struggle'];
- const lastMove: Move = target.m.lastMoveAbsolute;
- if (source.transformed || !lastMove || disallowedMoves.includes(lastMove.id) ||
- source.moves.includes(lastMove.id) || lastMove.isZ) return false;
+ const move = target.m.lastMoveAbsolute;
+ if (source.transformed || !move || source.moves.includes(move.id)) return false;
+ if (move.flags['nosketch'] || move.isZ || move.isMax) return false;
const sketchIndex = source.moves.indexOf('sketch');
if (sketchIndex < 0) return false;
- const move = this.dex.moves.get(lastMove);
const sketchedMove = {
move: move.name,
id: move.id,
@@ -97,12 +154,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mimic: {
inherit: true,
onHit(target, source) {
- const lastMove: Move = target.m.lastMoveAbsolute;
- if (source.transformed || !lastMove || lastMove.flags['failmimic'] ||
- source.moves.includes(lastMove.id) || lastMove.isZ) return false;
+ const move = target.m.lastMoveAbsolute;
+ if (source.transformed || !move || move.flags['failmimic'] || source.moves.includes(move.id)) {
+ return false;
+ }
+ if (move.isZ || move.isMax) return false;
const mimicIndex = source.moves.indexOf('mimic');
if (mimicIndex < 0) return false;
- const move = this.dex.moves.get(lastMove);
+
source.moveSlots[mimicIndex] = {
move: move.name,
id: move.id,
@@ -121,25 +180,30 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
instruct: {
inherit: true,
onHit(target, source) {
- const lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
+ const lastMove = target.m.lastMoveAbsolute;
if (!lastMove || target.volatiles['dynamax']) return false;
- const moveIndex = target.moves.indexOf(lastMove.id);
+ const moveSlot = target.getMoveData(lastMove.id);
if (
lastMove.flags['failinstruct'] || lastMove.isZ || lastMove.isMax ||
lastMove.flags['charge'] || lastMove.flags['recharge'] ||
target.volatiles['beakblast'] || target.volatiles['focuspunch'] || target.volatiles['shelltrap'] ||
- (target.moveSlots[moveIndex] && target.moveSlots[moveIndex].pp <= 0)
+ (moveSlot && moveSlot.pp <= 0)
) {
return false;
}
this.add('-singleturn', target, 'move: Instruct', `[of] ${source}`);
- this.actions.runMove(lastMove.id, target, target.lastMoveTargetLoc!);
+ this.queue.prioritizeAction(this.queue.resolveAction({
+ choice: 'move',
+ pokemon: target,
+ moveid: lastMove.id,
+ targetLoc: target.lastMoveTargetLoc!,
+ })[0] as MoveAction);
},
},
mirrormove: {
inherit: true,
onTryHit(target, pokemon) {
- const move: Move | ActiveMove | null = target.m.lastMoveAbsolute;
+ const move = target.m.lastMoveAbsolute;
if (!move?.flags['mirror'] || move.isZ || move.isMax) {
return false;
}
@@ -155,15 +219,16 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 5,
noCopy: true, // doesn't get copied by Baton Pass
onStart(pokemon, source, effect) {
- const lastMove: Move | ActiveMove | null = pokemon.m.lastMoveAbsolute;
+ // The target hasn't taken its turn, or Cursed Body activated and the move was not used through Dancer or Instruct
if (
this.queue.willMove(pokemon) ||
(pokemon === this.activePokemon && this.activeMove && !this.activeMove.isExternal)
) {
this.effectState.duration!--;
}
+ const lastMove = pokemon.m.lastMoveAbsolute;
if (!lastMove) {
- this.debug('pokemon hasn\'t moved yet');
+ this.debug(`Pokemon hasn't moved yet`);
return false;
}
for (const moveSlot of pokemon.moveSlots) {
@@ -171,18 +236,15 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (!moveSlot.pp) {
this.debug('Move out of PP');
return false;
- } else {
- if (effect.id === 'cursedbody') {
- this.add('-start', pokemon, 'Disable', moveSlot.move, '[from] ability: Cursed Body', `[of] ${source}`);
- } else {
- this.add('-start', pokemon, 'Disable', moveSlot.move);
- }
- this.effectState.move = lastMove.id;
- return;
}
}
}
- return false;
+ if (effect.effectType === 'Ability') {
+ this.add('-start', pokemon, 'Disable', lastMove.name, '[from] ability: ' + effect.name, `[of] ${source}`);
+ } else {
+ this.add('-start', pokemon, 'Disable', lastMove.name);
+ }
+ this.effectState.move = lastMove.id;
},
onResidualOrder: 14,
onEnd(pokemon) {
@@ -190,7 +252,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onBeforeMovePriority: 7,
onBeforeMove(attacker, defender, move) {
- if (!move.isZ && move.id === this.effectState.move) {
+ if (!(move.isZ && move.isZOrMaxPowered) && move.id === this.effectState.move) {
this.add('cant', attacker, 'Disable', move);
return false;
}
@@ -210,28 +272,26 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 3,
noCopy: true, // doesn't get copied by Z-Baton Pass
onStart(target) {
- let lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (!lastMove || target.volatiles['dynamax']) return false;
- if ((lastMove as ActiveMove).isZOrMaxPowered) lastMove = this.dex.moves.get(lastMove.baseMove);
+ let move: Move | ActiveMove | null = target.m.lastMoveAbsolute;
+ if (!move || target.volatiles['dynamax']) return false;
+ // Encore only works on Max Moves if the base move is not itself a Max Move
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
// @ts-expect-error modded
const linkedMoves: [string, string] = target.getLinkedMoves(true);
- const moveIndex = target.moves.indexOf(lastMove.id);
- if (linkedMoves.includes(lastMove.id) && this.dex.moves.get((linkedMoves[0])).flags['failencore'] &&
- this.dex.moves.get((linkedMoves[1])).flags['failencore']) {
+ const moveSlot = target.getMoveData(move.id);
+ if (linkedMoves.includes(move.id) && linkedMoves.every(m => !!this.dex.moves.get(m).flags['failencore'])) {
// both moves cannot be encored
delete target.volatiles['encore'];
return false;
}
- if (lastMove.isZ || lastMove.flags['failencore'] ||
- (target.moveSlots[moveIndex] && target.moveSlots[moveIndex].pp <= 0)) {
+ if (move.isZ || move.isMax || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
// it failed
- delete target.volatiles['encore'];
return false;
}
- this.effectState.turnsActivated = {};
- this.effectState.move = lastMove.id;
+ this.effectState.timesActivated = {};
+ this.effectState.move = move.id;
this.add('-start', target, 'Encore');
- if (linkedMoves.includes(lastMove.id)) {
+ if (linkedMoves.includes(move.id)) {
this.effectState.move = linkedMoves;
}
if (!this.queue.willMove(target)) {
@@ -239,51 +299,50 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
onOverrideAction(pokemon, target, move) {
- if (!this.effectState.turnsActivated[this.turn]) {
+ if (!this.effectState.timesActivated[this.turn]) {
// Initialize Encore effect for this turn
- this.effectState.turnsActivated[this.turn] = 0;
- } else if (
- this.effectState.turnsActivated[this.turn] >= (Array.isArray(this.effectState.move) ?
- this.effectState.move.length : 1)) {
+ this.effectState.timesActivated[this.turn] = 0;
+ } else if (this.effectState.timesActivated[this.turn] >= (Array.isArray(this.effectState.move) ?
+ this.effectState.move.length : 1)) {
// Finish Encore effect for this turn
return;
}
- this.effectState.turnsActivated[this.turn]++;
+ this.effectState.timesActivated[this.turn]++;
if (!Array.isArray(this.effectState.move)) {
this.queue.cancelAction(pokemon);
if (move.id !== this.effectState.move) return this.effectState.move;
- return;
- }
-
+ } else {
// Locked into a link
- switch (this.effectState.turnsActivated[this.turn]) {
- case 1: {
- if (this.effectState.move[0] !== move.id) return this.effectState.move[0];
- return;
- }
- case 2:
- if (this.effectState.move[1] !== move.id) return this.effectState.move[1];
- return;
+ switch (this.effectState.timesActivated[this.turn]) {
+ case 1: {
+ if (this.effectState.move[0] !== move.id) return this.effectState.move[0];
+ return;
+ }
+ case 2:
+ if (this.effectState.move[1] !== move.id) return this.effectState.move[1];
+ return;
+ }
}
},
onResidualOrder: 13,
onResidual(target) {
// early termination if you run out of PP
const lastMove = target.m.lastMoveAbsolute;
- const index = target.moves.indexOf(lastMove.id);
- if (index === -1) return; // no last move
+ const moveSlot = target.getMoveData(lastMove);
+ if (!moveSlot) {
+ target.removeVolatile('encore');
+ return; // no last move
+ }
// @ts-expect-error modded
if (target.hasLinkedMove(lastMove.id)) {
// TODO: Check instead whether the last executed move was linked
if (target.moveSlots[0].pp <= 0 || target.moveSlots[1].pp <= 0) {
- delete target.volatiles.encore;
- this.add('-end', target, 'Encore');
+ target.removeVolatile('encore');
}
} else {
- if (target.moveSlots[index].pp <= 0) {
- delete target.volatiles.encore;
- this.add('-end', target, 'Encore');
+ if (moveSlot.pp <= 0) {
+ target.removeVolatile('encore');
}
}
},
@@ -313,22 +372,25 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
noCopy: true,
- onStart(pokemon) {
+ onStart(pokemon, source, effect) {
if (pokemon.volatiles['dynamax']) {
delete pokemon.volatiles['torment'];
return false;
}
+ if (effect?.id === 'gmaxmeltdown') this.effectState.duration = 3;
this.add('-start', pokemon, 'Torment');
},
onEnd(pokemon) {
this.add('-end', pokemon, 'Torment');
},
onDisableMove(pokemon) {
- const lastMove = pokemon.lastMove;
+ const lastMove = pokemon.m.lastMoveAbsolute;
if (!lastMove || lastMove.id === 'struggle') return;
- if (Array.isArray(lastMove)) {
- for (const move of lastMove) {
+ // @ts-expect-error
+ if (pokemon.hasLinkedMove(lastMove.id)) {
+ // @ts-expect-error
+ for (const move of pokemon.getLinkedMoves()) {
pokemon.disableMove(move.id);
}
} else {
@@ -347,12 +409,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onFaint(target, source, effect) {
if (!source || source.fainted || !effect) return;
- const lastMove: Move | ActiveMove | null = source.m.lastMoveAbsolute;
- if (effect.effectType === 'Move' && !effect.flags['futuremove'] && lastMove) {
+ let move = source.m.lastMoveAbsolute;
+ if (effect.effectType === 'Move' && !effect.flags['futuremove'] && move) {
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
for (const moveSlot of source.moveSlots) {
- if (moveSlot.id === lastMove.id) {
+ if (moveSlot.id === move.id) {
moveSlot.pp = 0;
- this.add('-activate', source, 'move: Grudge', this.dex.moves.get(lastMove.id).name);
+ this.add('-activate', source, 'move: Grudge', move.name);
}
}
}
@@ -368,11 +431,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spite: {
inherit: true,
onHit(target) {
- const lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (!lastMove || lastMove.isZ || lastMove.isMax) return false;
- const ppDeducted = target.deductPP(lastMove.id, 4);
+ let move: Move | ActiveMove | null = target.m.lastMoveAbsolute;
+ if (!move || move.isZ) return false;
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
+
+ const ppDeducted = target.deductPP(move.id, 4);
if (!ppDeducted) return false;
- this.add("-activate", target, 'move: Spite', lastMove.name, ppDeducted);
+ this.add("-activate", target, 'move: Spite', move.name, ppDeducted);
},
},
@@ -407,7 +472,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-singlemove', pokemon, 'Destiny Bond');
},
onFaint(target, source, effect) {
- if (!source || !effect || target.side === source.side) return;
+ if (!source || !effect || target.isAlly(source)) return;
if (effect.effectType === 'Move' && !effect.flags['futuremove']) {
if (source.volatiles['dynamax']) {
this.add('-hint', "Dynamaxed Pokémon are immune to Destiny Bond.");
diff --git a/data/mods/gen8linked/scripts.ts b/data/mods/linked/scripts.ts
similarity index 88%
rename from data/mods/gen8linked/scripts.ts
rename to data/mods/linked/scripts.ts
index 7a9766829f..2d03e008f7 100644
--- a/data/mods/gen8linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -1,6 +1,5 @@
export const Scripts: ModdedBattleScriptsData = {
- inherit: 'gen8',
- gen: 8,
+ gen: 9,
getActionSpeed(action) {
if (action.choice === 'move') {
let move = action.move;
@@ -106,8 +105,9 @@ export const Scripts: ModdedBattleScriptsData = {
// @ts-expect-error modded
const linkedMoves: ActiveMove[] = action.linked;
for (let i = linkedMoves.length - 1; i >= 0; i--) {
- const validTarget = this.validTargetLoc(action.targetLoc, action.pokemon, linkedMoves[i].target);
- const targetLoc = validTarget ? action.targetLoc : 0;
+ const isValidTarget = this.validTargetLoc(action.targetLoc, action.pokemon, linkedMoves[i].target);
+ const targetLoc = isValidTarget ? action.targetLoc :
+ action.pokemon.getLocOf(this.getRandomTarget(action.pokemon, linkedMoves[i])!);
const pseudoAction: Action = {
choice: 'move', priority: action.priority, speed: action.speed, pokemon: action.pokemon,
targetLoc, moveid: linkedMoves[i].id, move: linkedMoves[i], mega: action.mega,
@@ -334,15 +334,12 @@ export const Scripts: ModdedBattleScriptsData = {
// THIS IS PURELY A SANITY CHECK
// DO NOT TAKE ADVANTAGE OF THIS TO PREVENT A POKEMON FROM MOVING;
// USE this.queue.cancelMove INSTEAD
- this.debug(`${pokemon.id} INCONSISTENT STATE, ALREADY MOVED: ${pokemon.moveThisTurn}`);
- this.clearActiveMove(true);
+ 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) {
- if (pokemon.volatiles['twoturnmove']?.move === move.id) {
- pokemon.removeVolatile('twoturnmove');
- }
this.battle.runEvent('MoveAborted', pokemon, target, move);
this.battle.clearActiveMove(true);
// The event 'BeforeMove' could have returned false or null
@@ -351,6 +348,12 @@ export const Scripts: ModdedBattleScriptsData = {
pokemon.moveThisTurnResult = willTryMove;
return;
}
+
+ // Used exclusively for a hint later
+ if (move.flags['cantusetwice'] && pokemon.m.lastMoveAbsolute?.id === move.id) {
+ pokemon.addVolatile(move.id);
+ }
+
if (move.beforeMoveCallback) {
if (move.beforeMoveCallback.call(this.battle, pokemon, target, move)) {
this.battle.clearActiveMove(true);
@@ -366,10 +369,6 @@ export const Scripts: ModdedBattleScriptsData = {
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;
@@ -382,7 +381,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Dancer Petal Dance hack
// TODO: implement properly
- const noLock = externalMove && !pokemon.volatiles.lockedmove;
+ const noLock = externalMove && !pokemon.volatiles['lockedmove'];
if (zMove) {
if (pokemon.illusion) {
@@ -391,12 +390,19 @@ export const Scripts: ModdedBattleScriptsData = {
this.battle.add('-zpower', pokemon);
pokemon.side.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);
+ if (move.flags['cantusetwice'] && pokemon.removeVolatile(move.id)) {
+ this.battle.add('-hint', `Some effects can force a Pokemon to use ${move.name} again in a row.`);
+ }
+ // TODO: Refactor to use BattleQueue#prioritizeAction in onAnyAfterMove handlers
// 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 = [];
@@ -410,20 +416,29 @@ export const Scripts: ModdedBattleScriptsData = {
// 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.abilityState.effectOrder - a.abilityState.effectOrder);
+ dancers.sort(
+ (a, b) => -(b.storedStats['spe'] - a.storedStats['spe']) || b.abilityState.effectOrder - a.abilityState.effectOrder
+ );
+ 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');
- const dancersTarget = !target!.isAlly(dancer) && pokemon.isAlly(dancer) ? target! : pokemon;
- this.runMove(move.id, dancer, dancer.getLocOf(dancersTarget),
- { sourceEffect: this.dex.abilities.get('dancer'), externalMove: true });
+ const dancersTarget = !targetOf1stDance.isAlly(dancer) && pokemon.isAlly(dancer) ?
+ targetOf1stDance :
+ pokemon;
+ const dancersTargetLoc = dancer.getLocOf(dancersTarget);
+ this.runMove(move.id, dancer, dancersTargetLoc, { sourceEffect: this.dex.abilities.get('dancer'), 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;
+ }
},
},
queue: {
@@ -441,13 +456,16 @@ export const Scripts: ModdedBattleScriptsData = {
instaswitch: 3,
beforeTurn: 4,
beforeTurnMove: 5,
+ revivalblessing: 6,
- runUnnerve: 100,
runSwitch: 101,
- // runPrimal: 102, (deprecated)
switch: 103,
megaEvo: 104,
+ megaEvoX: 104,
+ megaEvoY: 104,
runDynamax: 105,
+ terastallize: 106,
+ priorityChargeMove: 107,
shift: 200,
// default is 200 (for moves)
@@ -476,12 +494,37 @@ export const Scripts: ModdedBattleScriptsData = {
pokemon: action.pokemon,
}));
}
+ if (action.megax && !action.pokemon.isSkyDropped()) {
+ actions.unshift(...this.resolveAction({
+ choice: 'megaEvoX',
+ pokemon: action.pokemon,
+ }));
+ }
+ if (action.megay && !action.pokemon.isSkyDropped()) {
+ actions.unshift(...this.resolveAction({
+ choice: 'megaEvoY',
+ 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);
const linkedMoves: [string, string] = action.pokemon.getLinkedMoves();
if (
From 261dcddca6a0f76b114a13206a5313ac9305462d Mon Sep 17 00:00:00 2001
From: demir
Date: Sun, 1 Mar 2026 13:19:50 +0300
Subject: [PATCH 091/233] 35 Pokes: Update list of allowed Pokemon for March
2026 (#11784)
---
config/formats.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index a04fa483f6..5d1e9281c9 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3204,10 +3204,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
],
unbanlist: [
- 'Articuno-Galar', 'Aurorus', 'Bellossom', 'Bewear', 'Blastoise-Base', 'Dodrio', 'Entei', 'Falinks-Base', 'Flygon', 'Furret', 'Goodra-Hisui',
- 'Gumshoos-Base', 'Heliolisk', 'Hydrapple', 'Indeedee-F', 'Iron Thorns', 'Leavanny', 'Lickilicky', 'Ludicolo', 'Maractus', 'Meganium-Base',
- 'Polteageist', 'Probopass', 'Regieleki', 'Rhyperior', 'Seismitoad', 'Shiinotic', 'Slaking', 'Spidops', 'Spiritomb', 'Unfezant', 'Vanilluxe',
- 'Victreebel-Base', 'Weezing-Galar', 'Wyrdeer', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
+ 'Aerodactyl-Base', 'Arctozolt', 'Armaldo', 'Armarouge', 'Bronzong', 'Centiskorch', 'Cherrim-Base', 'Cyclizar', 'Dhelmise', 'Dondozo',
+ 'Drakloak', 'Empoleon', 'Glaceon', 'Golduck', 'Gyarados-Base', 'Jellicent', 'Jumpluff', 'Kecleon', 'Kilowattrel', 'Kingdra', 'Lunatone',
+ 'Musharna', 'Noivern', 'Palossand', 'Pincurchin', 'Reuniclus', 'Revavroom', 'Sandslash-Alola', 'Snorlax', 'Solrock', 'Stonjourner',
+ 'Tyranitar-Base', 'Vaporeon', 'Virizion', 'Wigglytuff', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
],
// Stupid hardcode
onValidateSet(set, format, setHas, teamHas) {
From 1d8968acdf011351c454021965561f851fe3dcc2 Mon Sep 17 00:00:00 2001
From: livid washed <115855253+livid-washed@users.noreply.github.com>
Date: Sun, 1 Mar 2026 21:20:05 +1100
Subject: [PATCH 092/233] Randomized formats update (#11782)
* Randomized set updates
* fix some things
* add resttalk primarina gen 7
* Create Pokemon incompability system
* Simplify code
* tghost oinkolognes
* Give sash back to doubles smeargle
* Give sash back to doubles smeargle
---
data/random-battles/gen2/sets.json | 8 +-
data/random-battles/gen2/teams.ts | 28 ++++
data/random-battles/gen3/sets.json | 21 ++-
data/random-battles/gen3/teams.ts | 36 +++-
data/random-battles/gen4/sets.json | 2 +-
data/random-battles/gen4/teams.ts | 32 +++-
data/random-battles/gen5/sets.json | 35 ++--
data/random-battles/gen5/teams.ts | 40 ++++-
data/random-battles/gen6/sets.json | 44 ++---
data/random-battles/gen6/teams.ts | 3 +-
data/random-battles/gen7/sets.json | 65 ++++----
data/random-battles/gen7/teams.ts | 60 ++++++-
data/random-battles/gen8/teams.ts | 2 +-
data/random-battles/gen9/doubles-sets.json | 182 +++++++++++++--------
data/random-battles/gen9/sets.json | 48 +++---
data/random-battles/gen9/teams.ts | 96 ++++++++++-
sim/global-types.ts | 1 +
17 files changed, 505 insertions(+), 198 deletions(-)
diff --git a/data/random-battles/gen2/sets.json b/data/random-battles/gen2/sets.json
index 8d1d325055..f119307e27 100644
--- a/data/random-battles/gen2/sets.json
+++ b/data/random-battles/gen2/sets.json
@@ -450,7 +450,7 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["explosion", "icebeam", "rapidspin", "spikes", "surf", "toxic"]
+ "movepool": ["explosion", "icebeam", "spikes", "surf"]
},
{
"role": "Generalist",
@@ -1360,11 +1360,7 @@
"sets": [
{
"role": "Generalist",
- "movepool": ["haze", "hydropump", "rest", "sleeptalk", "sludgebomb", "spikes"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["curse", "hiddenpowerground", "hydropump", "sludgebomb", "spikes"]
+ "movepool": ["curse", "haze", "hydropump", "sludgebomb", "spikes"]
}
]
},
diff --git a/data/random-battles/gen2/teams.ts b/data/random-battles/gen2/teams.ts
index 36022fc378..5e90da3e81 100644
--- a/data/random-battles/gen2/teams.ts
+++ b/data/random-battles/gen2/teams.ts
@@ -473,6 +473,7 @@ export class RandomGen2Teams extends RandomGen3Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
level,
moves: shuffledMoves,
ability: 'No Ability',
@@ -485,6 +486,33 @@ export class RandomGen2Teams extends RandomGen3Teams {
gender: species.gender ? species.gender : 'M',
};
}
+
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ override getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ ): boolean {
+ const spikesSetters = ['cloyster', 'delibird', 'qwilfish', 'forretress', 'smeargle'];
+ const incompatibilityList = [
+ // These combinations are prevented to avoid double spikes.
+ [spikesSetters, spikesSetters],
+ ];
+
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
}
export default RandomGen2Teams;
diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json
index 4549e95064..0274430dd1 100644
--- a/data/random-battles/gen3/sets.json
+++ b/data/random-battles/gen3/sets.json
@@ -188,9 +188,14 @@
"level": 82,
"sets": [
{
- "role": "Wallbreaker",
+ "role": "Fast Attacker",
"movepool": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "substitute", "thunderbolt"],
"abilities": ["Poison Point"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "rockslide", "shadowball", "sludgebomb"],
+ "abilities": ["Poison Point"]
}
]
},
@@ -198,9 +203,14 @@
"level": 82,
"sets": [
{
- "role": "Wallbreaker",
+ "role": "Fast Attacker",
"movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "shadowball", "sludgebomb", "substitute", "thunderbolt"],
"abilities": ["Poison Point"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "fireblast", "icebeam", "megahorn", "rockslide", "shadowball", "sludgebomb"],
+ "abilities": ["Poison Point"]
}
]
},
@@ -608,6 +618,11 @@
"role": "Setup Sweeper",
"movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"],
"abilities": ["Hyper Cutter"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["doubleedge", "hiddenpowerghost", "mudshot", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
}
]
},
@@ -1544,7 +1559,7 @@
},
{
"role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "protect", "psychic", "return", "shadowball", "thunderbolt", "thunderwave", "toxic", "wish"],
+ "movepool": ["doubleedge", "earthquake", "protect", "psychic", "return", "thunderwave", "toxic", "wish"],
"abilities": ["Early Bird"]
}
]
diff --git a/data/random-battles/gen3/teams.ts b/data/random-battles/gen3/teams.ts
index 6c229c924b..c260b28708 100644
--- a/data/random-battles/gen3/teams.ts
+++ b/data/random-battles/gen3/teams.ts
@@ -618,6 +618,7 @@ export class RandomGen3Teams extends RandomGen4Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.gender,
shiny: this.randomChance(1, 1024),
level,
@@ -630,6 +631,35 @@ export class RandomGen3Teams extends RandomGen4Teams {
};
}
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ override getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ ): boolean {
+ const incompatibilityList = [
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Shedinja + Tyranitar
+ ['shedinja', 'tyranitar'],
+ // Prevent Reversal/Flail users + Tyranitar
+ [['dodrio', 'raticate', 'primeape', 'hitmonlee', 'furret', 'yanma', 'heracross', 'blaziken', 'medicham'], 'tyranitar'],
+ ];
+
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
+
override randomTeam() {
this.enforceNoDirectCustomBanlistChanges();
@@ -659,9 +689,6 @@ export class RandomGen3Teams extends RandomGen4Teams {
// 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
@@ -707,6 +734,9 @@ export class RandomGen3Teams extends RandomGen4Teams {
if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
continue;
}
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon)) continue;
}
// Okay, the set passes, add it to our team
diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json
index c9a7112bb5..1b94aa0a29 100644
--- a/data/random-battles/gen4/sets.json
+++ b/data/random-battles/gen4/sets.json
@@ -1512,7 +1512,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["earthquake", "hypnosis", "megahorn", "return", "suckerpunch", "thunderbolt"],
+ "movepool": ["doubleedge", "earthquake", "hypnosis", "megahorn", "return", "suckerpunch", "thunderbolt", "thunderwave"],
"abilities": ["Intimidate"],
"preferredTypes": ["Ground"]
}
diff --git a/data/random-battles/gen4/teams.ts b/data/random-battles/gen4/teams.ts
index 66ebe587c3..beadb292ca 100644
--- a/data/random-battles/gen4/teams.ts
+++ b/data/random-battles/gen4/teams.ts
@@ -210,7 +210,7 @@ export class RandomGen4Teams extends RandomGen5Teams {
for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
- const statusInflictingMoves = ['stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];
+ const statusInflictingMoves = ['hypnosis', 'stunspore', 'thunderwave', 'toxic', 'willowisp', 'yawn'];
if (role !== 'Staller') {
this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
}
@@ -766,6 +766,7 @@ export class RandomGen4Teams extends RandomGen5Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.gender,
shiny: this.randomChance(1, 1024),
level,
@@ -777,6 +778,35 @@ export class RandomGen4Teams extends RandomGen5Teams {
role,
};
}
+
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ override getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ ): boolean {
+ const incompatibilityList = [
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ [['parasect', 'toxicroak'], 'groudon'],
+ // Prevent Shedinja + sand/hail setting ability
+ ['shedinja', ['tyranitar', 'hippowdon', 'abomasnow']],
+ ];
+
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
}
export default RandomGen4Teams;
diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json
index acee027540..53315306f1 100644
--- a/data/random-battles/gen5/sets.json
+++ b/data/random-battles/gen5/sets.json
@@ -458,20 +458,15 @@
"level": 83,
"sets": [
{
- "role": "Bulky Support",
+ "role": "Bulky Attacker",
"movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
- "abilities": ["Regenerator"]
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
},
{
"role": "Staller",
"movepool": ["calmmind", "psyshock", "scald", "slackoff"],
"abilities": ["Regenerator"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"],
- "abilities": ["Regenerator"],
- "preferredTypes": ["Psychic"]
}
]
},
@@ -1274,13 +1269,8 @@
"level": 83,
"sets": [
{
- "role": "Bulky Support",
+ "role": "Bulky Attacker",
"movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["fireblast", "icebeam", "psyshock", "surf", "trick", "trickroom"],
"abilities": ["Regenerator"],
"preferredTypes": ["Psychic"]
}
@@ -1397,7 +1387,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["destinybond", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
"abilities": ["Intimidate"]
}
]
@@ -1579,7 +1569,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "hypnosis", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
+ "movepool": ["doubleedge", "earthquake", "hypnosis", "jumpkick", "megahorn", "return", "suckerpunch", "thunderwave"],
"abilities": ["Intimidate"],
"preferredTypes": ["Ground"]
}
@@ -3319,12 +3309,12 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder"],
+ "movepool": ["earthquake", "gigadrain", "hiddenpowerfire", "leafstorm", "leechseed", "morningsun", "rockslide", "sleeppowder"],
"abilities": ["Regenerator"]
},
{
"role": "Bulky Support",
- "movepool": ["earthquake", "hiddenpowerfire", "leafstorm", "powerwhip", "rockslide", "sleeppowder"],
+ "movepool": ["earthquake", "gigadrain", "hiddenpowerfire", "leafstorm", "rockslide", "sleeppowder"],
"abilities": ["Regenerator"]
}
]
@@ -4020,14 +4010,19 @@
"level": 86,
"sets": [
{
- "role": "Fast Attacker",
+ "role": "Wallbreaker",
"movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "megahorn", "superpower"],
"abilities": ["Torrent"]
},
{
- "role": "Wallbreaker",
+ "role": "Setup Sweeper",
"movepool": ["aquajet", "megahorn", "superpower", "swordsdance", "waterfall"],
"abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Torrent"]
}
]
},
diff --git a/data/random-battles/gen5/teams.ts b/data/random-battles/gen5/teams.ts
index 0774d4a494..21af10e2ef 100644
--- a/data/random-battles/gen5/teams.ts
+++ b/data/random-battles/gen5/teams.ts
@@ -830,6 +830,7 @@ export class RandomGen5Teams extends RandomGen6Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.gender,
shiny: this.randomChance(1, 1024),
level,
@@ -842,6 +843,39 @@ export class RandomGen5Teams extends RandomGen6Teams {
};
}
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ override getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ ): boolean {
+ const incompatibilityList = [
+ // These Pokemon with support roles are considered too similar to each other.
+ ['blissey', 'chansey'],
+ ['illumise', 'volbeat'],
+
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ [['parasect', 'jynx', 'toxicroak'], ['ninetales', 'groudon']],
+ // Prevent Shedinja + sand/hail setting ability
+ ['shedinja', ['tyranitar', 'hippowdon', 'abomasnow']],
+ ];
+
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
+
override randomTeam() {
this.enforceNoDirectCustomBanlistChanges();
@@ -874,9 +908,6 @@ export class RandomGen5Teams extends RandomGen6Teams {
// Illusion shouldn't be in the last slot
if (species.name === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
- // Prevent Shedinja from generating after Sandstorm/Hail setters
- if (species.name === 'Shedinja' && (teamDetails.sand || teamDetails.hail)) continue;
-
// Dynamically scale limits for different team sizes. The default and minimum value is 1.
const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
@@ -924,6 +955,9 @@ export class RandomGen5Teams extends RandomGen6Teams {
if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
continue;
}
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon)) continue;
}
const set = this.randomSet(species, teamDetails, pokemon.length === 0);
diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json
index d50f9c1849..26445ce53a 100644
--- a/data/random-battles/gen6/sets.json
+++ b/data/random-battles/gen6/sets.json
@@ -501,14 +501,10 @@
"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"]
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
}
]
},
@@ -1382,14 +1378,10 @@
"level": 86,
"sets": [
{
- "role": "Bulky Support",
- "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"],
- "abilities": ["Regenerator"]
+ "role": "Bulky Attacker",
+ "movepool": ["dragontail", "fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
}
]
},
@@ -1738,7 +1730,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
+ "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "return", "suckerpunch", "thunderwave"],
"abilities": ["Intimidate"],
"preferredTypes": ["Ground"]
}
@@ -3135,11 +3127,6 @@
"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"]
}
]
},
@@ -3752,12 +3739,12 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
+ "movepool": ["earthquake", "gigadrain", "knockoff", "leafstorm", "leechseed", "morningsun", "rockslide", "sleeppowder", "sludgebomb"],
"abilities": ["Regenerator"]
},
{
"role": "AV Pivot",
- "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
+ "movepool": ["earthquake", "gigadrain", "knockoff", "leafstorm", "rockslide", "sludgebomb"],
"abilities": ["Regenerator"]
}
]
@@ -4008,7 +3995,7 @@
"level": 86,
"sets": [
{
- "role": "Fast Support",
+ "role": "Bulky Attacker",
"movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
"abilities": ["Levitate"]
}
@@ -4494,9 +4481,14 @@
"abilities": ["Torrent"]
},
{
- "role": "Fast Attacker",
+ "role": "Setup Sweeper",
"movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"],
"abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Torrent"]
}
]
},
diff --git a/data/random-battles/gen6/teams.ts b/data/random-battles/gen6/teams.ts
index 40bbbc656a..9730d0dbd8 100644
--- a/data/random-battles/gen6/teams.ts
+++ b/data/random-battles/gen6/teams.ts
@@ -260,7 +260,7 @@ export class RandomGen6Teams extends RandomGen7Teams {
this.incompatibleMoves(moves, movePool, 'knockoff', ['pursuit', 'suckerpunch']);
}
- const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn'];
+ const statusInflictingMoves = ["nuzzle", 'thunderwave', 'toxic', 'willowisp', 'yawn'];
if (!abilities.includes('Prankster') && role !== 'Staller') {
this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
}
@@ -883,6 +883,7 @@ export class RandomGen6Teams extends RandomGen7Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.gender || (this.random(2) ? 'F' : 'M'),
shiny: this.randomChance(1, 1024),
level,
diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json
index 5654350ef9..6f0d4b3593 100644
--- a/data/random-battles/gen7/sets.json
+++ b/data/random-battles/gen7/sets.json
@@ -642,14 +642,10 @@
"level": 85,
"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"]
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
}
]
},
@@ -1594,14 +1590,10 @@
"level": 89,
"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"]
+ "role": "Bulky Attacker",
+ "movepool": ["dragontail", "fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"],
+ "preferredTypes": ["Psychic"]
}
]
},
@@ -1958,7 +1950,7 @@
"sets": [
{
"role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "throatchop", "thunderwave"],
+ "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "return", "suckerpunch", "throatchop", "thunderwave"],
"abilities": ["Intimidate"],
"preferredTypes": ["Ground"]
}
@@ -3420,11 +3412,6 @@
"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"]
}
]
},
@@ -3467,12 +3454,6 @@
"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"],
@@ -4069,12 +4050,12 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
+ "movepool": ["earthquake", "gigadrain", "knockoff", "leafstorm", "leechseed", "morningsun", "rockslide", "sleeppowder", "sludgebomb"],
"abilities": ["Regenerator"]
},
{
"role": "AV Pivot",
- "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
+ "movepool": ["earthquake", "gigadrain", "knockoff", "leafstorm", "rockslide", "sludgebomb"],
"abilities": ["Regenerator"]
}
]
@@ -4343,7 +4324,7 @@
"level": 86,
"sets": [
{
- "role": "Fast Support",
+ "role": "Bulky Attacker",
"movepool": ["defog", "hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
"abilities": ["Levitate"]
}
@@ -4864,9 +4845,14 @@
"abilities": ["Torrent"]
},
{
- "role": "Fast Attacker",
+ "role": "Setup Sweeper",
"movepool": ["aquajet", "knockoff", "liquidation", "megahorn", "sacredsword", "swordsdance"],
"abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Torrent"]
}
]
},
@@ -5097,6 +5083,11 @@
"movepool": ["bulkup", "facade", "knockoff", "stormthrow"],
"abilities": ["Guts"]
},
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "knockoff", "stormthrow", "superpower"],
+ "abilities": ["Guts"]
+ },
{
"role": "Bulky Support",
"movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"],
@@ -6675,6 +6666,11 @@
"role": "Bulky Attacker",
"movepool": ["hydropump", "moonblast", "psychic", "scald"],
"abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["moonblast", "rest", "scald", "sleeptalk"],
+ "abilities": ["Torrent"]
}
]
},
@@ -7447,6 +7443,11 @@
"role": "Bulky Setup",
"movepool": ["calmmind", "hydropump", "icebeam", "moonblast", "surf", "taunt"],
"abilities": ["Misty Surge"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "hydropump", "knockoff", "moonblast", "naturesmadness", "surf", "taunt"],
+ "abilities": ["Misty Surge"]
}
]
},
diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts
index 553e7e4469..e54572d390 100644
--- a/data/random-battles/gen7/teams.ts
+++ b/data/random-battles/gen7/teams.ts
@@ -377,7 +377,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
this.incompatibleMoves(moves, movePool, 'knockoff', ['pursuit', 'suckerpunch']);
}
- const statusInflictingMoves = ['thunderwave', 'toxic', 'willowisp', 'yawn'];
+ const statusInflictingMoves = ["nuzzle", 'thunderwave', 'toxic', 'willowisp', 'yawn'];
if (!abilities.includes('Prankster') && role !== 'Staller') {
this.incompatibleMoves(moves, movePool, statusInflictingMoves, statusInflictingMoves);
}
@@ -1172,6 +1172,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
shiny: this.randomChance(1, 1024),
level,
@@ -1184,6 +1185,60 @@ export class RandomGen7Teams extends RandomGen8Teams {
};
}
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ ): boolean {
+ const webSetters = [
+ 'ariados', 'shuckle', 'smeargle', 'masquerain', 'kricketune', 'leavanny', 'galvantula', 'ribombee', 'araquanid',
+ ];
+
+ // Some pokes are setters in gen 7 but not gen 6
+ const gen6ScreenSetters = ['meowstic', 'carbink'];
+ const screenSetters = (this.gen === 7) ? [...gen6ScreenSetters, 'electrode', 'ninetalesalola'] : gen6ScreenSetters;
+
+ const gen6SunSetters = ['charizardmegay', 'ninetales', 'groudon'];
+ const sunSetters = (this.gen === 7) ? [...gen6SunSetters, 'torkoal'] : gen6SunSetters;
+
+ const gen6SandSetters = ['tyranitar', 'tyranitarmega', 'hippowdon'];
+ const sandSetters = (this.gen === 7) ? [...gen6SandSetters, 'gigalith'] : gen6SandSetters;
+
+ const gen6HailSetters = ['abomasnow', 'abomasnowmega', 'aurorus'];
+ const hailSetters = (this.gen === 7) ? [...gen6HailSetters, 'vanilluxe', 'ninetalesalola'] : gen6HailSetters;
+
+ const incompatibilityList = [
+ // These Pokemon with support roles are considered too similar to each other.
+ ['blissey', 'chansey'],
+ ['illumise', 'volbeat'],
+
+ // These combinations are prevented to avoid double webs or screens.
+ [webSetters, webSetters],
+ [screenSetters, screenSetters],
+
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ ['parasect', 'jynx', 'toxicroak', 'heliolisk', sunSetters],
+ // Prevent Shedinja + sand/hail setting ability
+ ['shedinja', [...sandSetters, ...hailSetters]],
+ ];
+
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
+
override randomTeam() {
this.enforceNoDirectCustomBanlistChanges();
@@ -1300,6 +1355,9 @@ export class RandomGen7Teams extends RandomGen8Teams {
if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
continue;
}
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon)) continue;
}
// Limit three of any type combination in Monotype
diff --git a/data/random-battles/gen8/teams.ts b/data/random-battles/gen8/teams.ts
index 6daf9528f1..468d4b932f 100644
--- a/data/random-battles/gen8/teams.ts
+++ b/data/random-battles/gen8/teams.ts
@@ -1526,7 +1526,7 @@ export class RandomGen8Teams {
case 'Cloud Nine':
return (!isNoDynamax || species.id !== 'golduck');
case 'Competitive':
- return (!counter.get('Special') || moves.has('rest') && moves.has('sleeptalk'));
+ return species.id === 'boltund';
case 'Compound Eyes': case 'No Guard':
return !counter.get('inaccurate');
case 'Cursed Body':
diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json
index 2045bd1ba4..bfbaada009 100644
--- a/data/random-battles/gen9/doubles-sets.json
+++ b/data/random-battles/gen9/doubles-sets.json
@@ -150,15 +150,15 @@
"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"]
+ "movepool": ["Dazzling Gleam", "Fire Blast", "Icy Wind", "Moonblast", "Protect", "Thunder Wave"],
+ "abilities": ["Magic Guard"],
+ "teraTypes": ["Fire", "Steel"]
},
{
"role": "Doubles Support",
- "movepool": ["Encore", "Fire Blast", "Follow Me", "Helping Hand", "Life Dew", "Moonblast", "Moonlight"],
+ "movepool": ["Follow Me", "Helping Hand", "Knock Off", "Life Dew", "Moonblast", "Moonlight"],
"abilities": ["Unaware"],
- "teraTypes": ["Fire", "Steel", "Water"]
+ "teraTypes": ["Steel", "Water"]
}
]
},
@@ -195,7 +195,7 @@
"sets": [
{
"role": "Doubles Support",
- "movepool": ["Dazzling Gleam", "Disable", "Encore", "Fire Blast", "Heal Pulse", "Helping Hand", "Icy Wind", "Thunder Wave"],
+ "movepool": ["Dazzling Gleam", "Encore", "Fire Blast", "Helping Hand", "Icy Wind", "Thunder Wave"],
"abilities": ["Competitive"],
"teraTypes": ["Fire", "Steel"]
}
@@ -209,6 +209,18 @@
"movepool": ["Pollen Puff", "Sludge Bomb", "Strength Sap", "Stun Spore"],
"abilities": ["Effect Spore"],
"teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Energy Ball", "Sludge Bomb", "Strength Sap", "Stun Spore"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Steel", "Water"]
+ },
+ {
+ "role": "Bulky Protect",
+ "movepool": ["Leech Seed", "Pollen Puff", "Protect", "Sludge Bomb"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Steel", "Water"]
}
]
},
@@ -451,8 +463,8 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Gas", "Poison Jab", "Shadow Sneak"],
- "abilities": ["Poison Touch", "Sticky Hold"],
+ "movepool": ["Drain Punch", "Gunk Shot", "Helping Hand", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak", "Toxic Spikes"],
+ "abilities": ["Poison Touch"],
"teraTypes": ["Dark"]
}
]
@@ -814,7 +826,7 @@
"sets": [
{
"role": "Doubles Wallbreaker",
- "movepool": ["Crunch", "Double-Edge", "Hammer Arm", "Heat Crash", "High Horsepower"],
+ "movepool": ["Body Slam", "Crunch", "Double-Edge", "Hammer Arm", "Heat Crash", "High Horsepower"],
"abilities": ["Thick Fat"],
"teraTypes": ["Fire", "Ghost", "Ground"]
},
@@ -825,9 +837,9 @@
"teraTypes": ["Ghost", "Ground"]
},
{
- "role": "Doubles Bulky Setup",
- "movepool": ["Body Slam", "Crunch", "Curse", "High Horsepower", "Protect", "Recycle"],
- "abilities": ["Gluttony"],
+ "role": "Bulky Protect",
+ "movepool": ["Body Slam", "Curse", "High Horsepower", "Protect"],
+ "abilities": ["Thick Fat"],
"teraTypes": ["Ground", "Poison"]
}
]
@@ -1172,7 +1184,7 @@
"level": 91,
"sets": [
{
- "role": "Doubles Bulky Attacker",
+ "role": "Doubles Support",
"movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Liquidation", "Recover", "Yawn"],
"abilities": ["Unaware", "Water Absorb"],
"teraTypes": ["Fire", "Poison", "Steel"]
@@ -1401,10 +1413,16 @@
"level": 86,
"sets": [
{
- "role": "Doubles Fast Attacker",
+ "role": "Offensive Protect",
"movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect", "Sucker Punch"],
"abilities": ["Flash Fire", "Unnerve"],
"teraTypes": ["Dark", "Fire", "Ghost", "Grass"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Dark Pulse", "Heat Wave", "Nasty Plot", "Protect"],
+ "abilities": ["Flash Fire", "Unnerve"],
+ "teraTypes": ["Dark", "Fire", "Ghost", "Grass"]
}
]
},
@@ -1620,8 +1638,8 @@
"level": 82,
"sets": [
{
- "role": "Doubles Bulky Attacker",
- "movepool": ["Flip Turn", "High Horsepower", "Ice Beam", "Icy Wind", "Knock Off", "Muddy Water"],
+ "role": "Doubles Support",
+ "movepool": ["Flip Turn", "High Horsepower", "Icy Wind", "Knock Off", "Muddy Water"],
"abilities": ["Torrent"],
"teraTypes": ["Fire", "Steel"]
}
@@ -1659,7 +1677,7 @@
"level": 84,
"sets": [
{
- "role": "Doubles Fast Attacker",
+ "role": "Doubles Wallbreaker",
"movepool": ["Fake Out", "Knock Off", "Leaf Blade", "Tailwind"],
"abilities": ["Wind Rider"],
"teraTypes": ["Ghost"]
@@ -1817,7 +1835,7 @@
"level": 92,
"sets": [
{
- "role": "Doubles Fast Attacker",
+ "role": "Doubles Setup Sweeper",
"movepool": ["Alluring Voice", "Nasty Plot", "Protect", "Thunderbolt"],
"abilities": ["Lightning Rod"],
"teraTypes": ["Flying"]
@@ -1874,7 +1892,7 @@
"sets": [
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Encore", "Gunk Shot", "Helping Hand", "Knock Off", "Poison Gas", "Thunder Wave", "Toxic Spikes"],
+ "movepool": ["Encore", "Gunk Shot", "Helping Hand", "Knock Off", "Thunder Wave", "Toxic Spikes"],
"abilities": ["Gluttony"],
"teraTypes": ["Dark"]
}
@@ -1990,7 +2008,7 @@
"level": 88,
"sets": [
{
- "role": "Doubles Bulky Attacker",
+ "role": "Doubles Support",
"movepool": ["Helping Hand", "High Horsepower", "Icy Wind", "Muddy Water", "Protect"],
"abilities": ["Oblivious"],
"teraTypes": ["Fire", "Steel"]
@@ -2317,7 +2335,7 @@
{
"role": "Doubles Setup Sweeper",
"movepool": ["Headlong Rush", "Protect", "Rock Slide", "Shell Smash"],
- "abilities": ["Overgrow"],
+ "abilities": ["Shell Armor"],
"teraTypes": ["Rock"]
}
]
@@ -2453,9 +2471,15 @@
"gastrodon": {
"level": 82,
"sets": [
+ {
+ "role": "Doubles Support",
+ "movepool": ["Earth Power", "Helping Hand", "Icy Wind", "Muddy Water", "Recover", "Yawn"],
+ "abilities": ["Storm Drain"],
+ "teraTypes": ["Fire"]
+ },
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Clear Smog", "Earth Power", "Helping Hand", "Icy Wind", "Muddy Water", "Recover"],
+ "movepool": ["Earth Power", "Ice Beam", "Recover", "Yawn"],
"abilities": ["Storm Drain"],
"teraTypes": ["Fire"]
}
@@ -2594,7 +2618,13 @@
"sets": [
{
"role": "Doubles Fast Attacker",
- "movepool": ["Close Combat", "Fake Out", "Gunk Shot", "Protect", "Sucker Punch", "Swords Dance"],
+ "movepool": ["Close Combat", "Fake Out", "Gunk Shot", "Protect", "Sucker Punch"],
+ "abilities": ["Dry Skin"],
+ "teraTypes": ["Dark", "Fighting", "Poison"]
+ },
+ {
+ "role": "Doubles Setup Sweeper",
+ "movepool": ["Close Combat", "Gunk Shot", "Protect", "Sucker Punch", "Swords Dance"],
"abilities": ["Dry Skin"],
"teraTypes": ["Dark", "Fighting", "Poison"]
}
@@ -2656,7 +2686,7 @@
{
"role": "Doubles Support",
"movepool": ["Electroweb", "Flash Cannon", "Protect", "Thunderbolt", "Volt Switch"],
- "abilities": ["Sturdy"],
+ "abilities": ["Magnet Pull"],
"teraTypes": ["Flying"]
}
]
@@ -2683,13 +2713,13 @@
"sets": [
{
"role": "Doubles Fast Attacker",
- "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Protect", "Volt Switch", "Wild Charge"],
+ "movepool": ["Flamethrower", "Ice Punch", "Protect", "Wild Charge"],
"abilities": ["Motor Drive"],
"teraTypes": ["Flying"]
},
{
"role": "Doubles Bulky Attacker",
- "movepool": ["Cross Chop", "Flamethrower", "Ice Punch", "Knock Off", "Volt Switch", "Wild Charge"],
+ "movepool": ["Electroweb", "Ice Punch", "Knock Off", "Volt Switch", "Wild Charge"],
"abilities": ["Motor Drive"],
"teraTypes": ["Flying"]
}
@@ -2721,6 +2751,12 @@
"abilities": ["Tinted Lens"],
"teraTypes": ["Bug"]
},
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Air Slash", "Bug Buzz", "Protect", "Tailwind"],
+ "abilities": ["Tinted Lens"],
+ "teraTypes": ["Ground", "Steel"]
+ },
{
"role": "Tera Blast user",
"movepool": ["Air Slash", "Bug Buzz", "Protect", "Tera Blast"],
@@ -2961,17 +2997,17 @@
"azelf": {
"level": 83,
"sets": [
- {
- "role": "Doubles Fast Attacker",
- "movepool": ["Dazzling Gleam", "Energy Ball", "Fire Blast", "Nasty Plot", "Psychic", "U-turn"],
- "abilities": ["Levitate"],
- "teraTypes": ["Fairy", "Fire"]
- },
{
"role": "Offensive Protect",
"movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Protect", "Psychic", "Thunderbolt"],
"abilities": ["Levitate"],
"teraTypes": ["Electric", "Fairy", "Fire"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Dazzling Gleam", "Fire Blast", "Psychic", "U-turn"],
+ "abilities": ["Levitate"],
+ "teraTypes": ["Fairy", "Fire"]
}
]
},
@@ -3279,12 +3315,6 @@
"arceusghost": {
"level": 72,
"sets": [
- {
- "role": "Doubles Setup Sweeper",
- "movepool": ["Brick Break", "Extreme Speed", "Phantom Force", "Swords Dance"],
- "abilities": ["Multitype"],
- "teraTypes": ["Normal"]
- },
{
"role": "Doubles Bulky Setup",
"movepool": ["Calm Mind", "Focus Blast", "Judgment", "Recover"],
@@ -3471,13 +3501,13 @@
"level": 87,
"sets": [
{
- "role": "Offensive Protect",
+ "role": "Doubles Fast Attacker",
"movepool": ["High Horsepower", "Overheat", "Protect", "Wild Charge"],
"abilities": ["Sap Sipper"],
"teraTypes": ["Ground"]
},
{
- "role": "Doubles Fast Attacker",
+ "role": "Doubles Wallbreaker",
"movepool": ["High Horsepower", "Overheat", "Protect", "Thunderbolt"],
"abilities": ["Lightning Rod"],
"teraTypes": ["Flying", "Water"]
@@ -3847,15 +3877,21 @@
"sets": [
{
"role": "Doubles Fast Attacker",
- "movepool": ["Close Combat", "Fake Out", "Knock Off", "Triple Axel", "U-turn"],
+ "movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"],
"abilities": ["Regenerator"],
- "teraTypes": ["Dark"]
+ "teraTypes": ["Dark", "Steel"]
},
{
"role": "Doubles Bulky Attacker",
"movepool": ["Close Combat", "Fake Out", "Knock Off", "U-turn"],
"abilities": ["Regenerator"],
"teraTypes": ["Dark", "Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Close Combat", "Knock Off", "Triple Axel", "U-turn"],
+ "abilities": ["Inner Focus"],
+ "teraTypes": ["Dark", "Steel"]
}
]
},
@@ -4251,10 +4287,16 @@
"level": 88,
"sets": [
{
- "role": "Doubles Support",
+ "role": "Doubles Fast Attacker",
"movepool": ["Hurricane", "Pollen Puff", "Protect", "Sleep Powder"],
"abilities": ["Compound Eyes"],
"teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Doubles Fast Attacker",
+ "movepool": ["Hurricane", "Protect", "Sleep Powder", "Tailwind"],
+ "abilities": ["Compound Eyes"],
+ "teraTypes": ["Flying", "Steel"]
}
]
},
@@ -4508,9 +4550,9 @@
},
{
"role": "Bulky Protect",
- "movepool": ["Diamond Storm", "Moonblast", "Protect", "Trick Room"],
+ "movepool": ["Body Press", "Diamond Storm", "Moonblast", "Trick Room"],
"abilities": ["Clear Body"],
- "teraTypes": ["Grass", "Steel"]
+ "teraTypes": ["Fighting"]
}
]
},
@@ -4596,8 +4638,8 @@
"teraTypes": ["Water"]
},
{
- "role": "Bulky Protect",
- "movepool": ["Calm Mind", "Hyper Voice", "Moonblast", "Protect"],
+ "role": "Offensive Protect",
+ "movepool": ["Hyper Voice", "Icy Wind", "Life Dew", "Moonblast", "Protect"],
"abilities": ["Liquid Voice"],
"teraTypes": ["Grass", "Steel"]
}
@@ -4636,7 +4678,7 @@
"sets": [
{
"role": "Bulky Protect",
- "movepool": ["Bug Buzz", "Electroweb", "Protect", "Sticky Web", "Thunderbolt"],
+ "movepool": ["Bug Buzz", "Protect", "Sticky Web", "Thunderbolt"],
"abilities": ["Levitate"],
"teraTypes": ["Electric"]
}
@@ -4725,7 +4767,7 @@
"level": 86,
"sets": [
{
- "role": "Doubles Support",
+ "role": "Doubles Fast Attacker",
"movepool": ["Moonblast", "Pollen Puff", "Protect", "Tailwind"],
"abilities": ["Shield Dust"],
"teraTypes": ["Steel"]
@@ -4844,7 +4886,7 @@
"sets": [
{
"role": "Doubles Fast Attacker",
- "movepool": ["Encore", "Fake Out", "Fire Blast", "Heat Wave", "Poison Gas", "Protect", "Sludge Bomb"],
+ "movepool": ["Encore", "Fake Out", "Fire Blast", "Heat Wave", "Protect", "Sludge Bomb"],
"abilities": ["Corrosion"],
"teraTypes": ["Fire", "Flying", "Water"]
}
@@ -5877,15 +5919,15 @@
"sets": [
{
"role": "Doubles Support",
- "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"],
- "abilities": ["Gluttony"],
+ "movepool": ["Double-Edge", "Helping Hand", "Protect", "Yawn"],
+ "abilities": ["Thick Fat"],
"teraTypes": ["Ghost", "Normal"]
},
{
"role": "Doubles Wallbreaker",
- "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"],
+ "movepool": ["Body Slam", "Double-Edge", "High Horsepower", "Lash Out"],
"abilities": ["Thick Fat"],
- "teraTypes": ["Fairy", "Ground", "Normal"]
+ "teraTypes": ["Ghost", "Ground", "Normal"]
}
]
},
@@ -5894,15 +5936,15 @@
"sets": [
{
"role": "Doubles Support",
- "movepool": ["Double-Edge", "Helping Hand", "Lash Out", "Protect", "Yawn"],
- "abilities": ["Gluttony"],
+ "movepool": ["Double-Edge", "Helping Hand", "Protect", "Yawn"],
+ "abilities": ["Thick Fat"],
"teraTypes": ["Ghost", "Normal"]
},
{
"role": "Doubles Wallbreaker",
- "movepool": ["Double-Edge", "High Horsepower", "Lash Out", "Play Rough"],
+ "movepool": ["Body Slam", "Double-Edge", "High Horsepower", "Lash Out"],
"abilities": ["Thick Fat"],
- "teraTypes": ["Fairy", "Ground", "Normal"]
+ "teraTypes": ["Ghost", "Ground", "Normal"]
}
]
},
@@ -5927,13 +5969,13 @@
"teraTypes": ["Bug"]
},
{
- "role": "Doubles Fast Attacker",
+ "role": "Doubles Wallbreaker",
"movepool": ["First Impression", "Knock Off", "Protect", "Sucker Punch"],
"abilities": ["Tinted Lens"],
"teraTypes": ["Bug", "Dark"]
},
{
- "role": "Doubles Wallbreaker",
+ "role": "Offensive Protect",
"movepool": ["First Impression", "Knock Off", "Leech Life", "Protect"],
"abilities": ["Tinted Lens"],
"teraTypes": ["Bug"]
@@ -6098,6 +6140,12 @@
"movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"],
"abilities": ["Competitive"],
"teraTypes": ["Flying", "Steel"]
+ },
+ {
+ "role": "Doubles Wallbreaker",
+ "movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"],
+ "abilities": ["Competitive"],
+ "teraTypes": ["Flying", "Steel"]
}
]
},
@@ -6649,6 +6697,12 @@
"ironbundle": {
"level": 78,
"sets": [
+ {
+ "role": "Doubles Bulky Attacker",
+ "movepool": ["Encore", "Freeze-Dry", "Hydro Pump", "Icy Wind", "Protect"],
+ "abilities": ["Quark Drive"],
+ "teraTypes": ["Dragon", "Water"]
+ },
{
"role": "Doubles Fast Attacker",
"movepool": ["Encore", "Freeze-Dry", "Hydro Pump", "Icy Wind", "Protect"],
@@ -6784,12 +6838,6 @@
"movepool": ["Collision Course", "Dragon Claw", "Flare Blitz", "U-turn"],
"abilities": ["Orichalcum Pulse"],
"teraTypes": ["Fire"]
- },
- {
- "role": "Offensive Protect",
- "movepool": ["Collision Course", "Dragon Claw", "Flare Blitz", "Protect"],
- "abilities": ["Orichalcum Pulse"],
- "teraTypes": ["Fire"]
}
]
},
@@ -7109,7 +7157,7 @@
"level": 73,
"sets": [
{
- "role": "Doubles Bulky Setup",
+ "role": "Bulky Protect",
"movepool": ["Calm Mind", "Earth Power", "Protect", "Tera Starstorm"],
"abilities": ["Tera Shift"],
"teraTypes": ["Stellar"]
diff --git a/data/random-battles/gen9/sets.json b/data/random-battles/gen9/sets.json
index 6740222d10..b869ed198e 100644
--- a/data/random-battles/gen9/sets.json
+++ b/data/random-battles/gen9/sets.json
@@ -77,7 +77,7 @@
"level": 93,
"sets": [
{
- "role": "Fast Attacker",
+ "role": "AV Pivot",
"movepool": ["Fake Out", "Knock Off", "Play Rough", "Surf", "Volt Switch", "Volt Tackle"],
"abilities": ["Lightning Rod"],
"teraTypes": ["Water"]
@@ -185,7 +185,7 @@
},
{
"role": "Fast Attacker",
- "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Moonblast", "Nasty Plot"],
+ "movepool": ["Aurora Veil", "Blizzard", "Freeze-Dry", "Moonblast"],
"abilities": ["Snow Warning"],
"teraTypes": ["Steel", "Water"]
}
@@ -2136,7 +2136,7 @@
"sets": [
{
"role": "Bulky Attacker",
- "movepool": ["Clear Smog", "Earthquake", "Encore", "Ice Beam", "Knock Off", "Pain Split", "Sludge Bomb", "Toxic Spikes"],
+ "movepool": ["Clear Smog", "Earthquake", "Encore", "Ice Beam", "Knock Off", "Pain Split", "Sludge Bomb", "Thunder Wave", "Toxic Spikes"],
"abilities": ["Liquid Ooze"],
"teraTypes": ["Dark"]
},
@@ -2379,7 +2379,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["Disable", "Earthquake", "Freeze-Dry", "Spikes", "Taunt"],
+ "movepool": ["Earthquake", "Freeze-Dry", "Spikes", "Taunt"],
"abilities": ["Inner Focus"],
"teraTypes": ["Ghost", "Ground", "Water"]
}
@@ -2712,7 +2712,7 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["Knock Off", "Pounce", "Sticky Web", "Swords Dance", "Taunt"],
+ "movepool": ["Knock Off", "Pounce", "Sticky Web", "Taunt"],
"abilities": ["Technician"],
"teraTypes": ["Ghost"]
}
@@ -3063,13 +3063,13 @@
"role": "Fast Attacker",
"movepool": ["Body Press", "Flash Cannon", "Thunderbolt", "Volt Switch"],
"abilities": ["Analytic", "Magnet Pull"],
- "teraTypes": ["Electric", "Fighting", "Flying", "Water"]
+ "teraTypes": ["Electric", "Fighting", "Flying"]
},
{
"role": "AV Pivot",
"movepool": ["Body Press", "Discharge", "Flash Cannon", "Mirror Coat", "Thunderbolt", "Volt Switch"],
"abilities": ["Analytic", "Magnet Pull"],
- "teraTypes": ["Flying", "Water"]
+ "teraTypes": ["Flying"]
},
{
"role": "Bulky Setup",
@@ -3405,9 +3405,9 @@
},
{
"role": "Fast Attacker",
- "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "Thunderbolt", "Trick", "U-turn"],
+ "movepool": ["Dazzling Gleam", "Fire Blast", "Nasty Plot", "Psychic", "Psyshock", "U-turn"],
"abilities": ["Levitate"],
- "teraTypes": ["Electric", "Fairy", "Fire", "Psychic"]
+ "teraTypes": ["Fairy", "Fire", "Psychic"]
}
]
},
@@ -4018,13 +4018,13 @@
"sets": [
{
"role": "Fast Support",
- "movepool": ["Knock Off", "Leaf Blade", "Lunge", "Sticky Web", "Swords Dance"],
+ "movepool": ["Knock Off", "Leaf Blade", "Lunge", "Sticky Web"],
"abilities": ["Chlorophyll", "Swarm"],
"teraTypes": ["Ghost", "Rock"]
},
{
"role": "Fast Attacker",
- "movepool": ["Bullet Seed", "Knock Off", "Sticky Web", "Swords Dance", "Triple Axel"],
+ "movepool": ["Bullet Seed", "Knock Off", "Sticky Web", "Triple Axel"],
"abilities": ["Chlorophyll"],
"teraTypes": ["Ghost", "Rock"]
}
@@ -4273,13 +4273,13 @@
"role": "Bulky Support",
"movepool": ["Flip Turn", "Protect", "Scald", "Wish"],
"abilities": ["Regenerator"],
- "teraTypes": ["Steel"]
+ "teraTypes": ["Poison", "Steel"]
},
{
"role": "Fast Support",
"movepool": ["Flip Turn", "Protect", "Scald", "Wish"],
"abilities": ["Regenerator"],
- "teraTypes": ["Steel"]
+ "teraTypes": ["Poison", "Steel"]
}
]
},
@@ -4819,7 +4819,7 @@
{
"role": "Tera Blast user",
"movepool": ["Brave Bird", "Flare Blitz", "Swords Dance", "Tera Blast"],
- "abilities": ["Flame Body"],
+ "abilities": ["Flame Body", "Gale Wings"],
"teraTypes": ["Ground"]
}
]
@@ -5567,7 +5567,7 @@
"sets": [
{
"role": "Fast Bulky Setup",
- "movepool": ["Boomburst", "Clanging Scales", "Clangorous Soul", "Close Combat", "Iron Head"],
+ "movepool": ["Boomburst", "Clanging Scales", "Clangorous Soul", "Close Combat", "Drain Punch", "Iron Head"],
"abilities": ["Soundproof"],
"teraTypes": ["Normal", "Steel"]
},
@@ -5721,9 +5721,9 @@
},
{
"role": "Fast Support",
- "movepool": ["Court Change", "High Jump Kick", "Pyro Ball", "Sucker Punch"],
+ "movepool": ["Court Change", "Pyro Ball", "U-turn", "Will-O-Wisp"],
"abilities": ["Libero"],
- "teraTypes": ["Fighting", "Fire"]
+ "teraTypes": ["Grass"]
},
{
"role": "Fast Attacker",
@@ -7079,12 +7079,6 @@
"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"]
}
]
},
@@ -7348,7 +7342,7 @@
"sets": [
{
"role": "Fast Attacker",
- "movepool": ["Encore", "Flip Turn", "Freeze-Dry", "Hydro Pump", "Ice Beam", "Substitute"],
+ "movepool": ["Encore", "Flip Turn", "Freeze-Dry", "Hydro Pump", "Ice Beam"],
"abilities": ["Quark Drive"],
"teraTypes": ["Ice", "Water"]
}
@@ -7456,7 +7450,7 @@
},
{
"role": "Setup Sweeper",
- "movepool": ["Ice Shard", "Icicle Crash", "Sacred Sword", "Sucker Punch", "Swords Dance", "Throat Chop"],
+ "movepool": ["Icicle Crash", "Sacred Sword", "Sucker Punch", "Swords Dance", "Throat Chop"],
"abilities": ["Sword of Ruin"],
"teraTypes": ["Dark", "Fighting", "Ice"]
}
@@ -7511,8 +7505,8 @@
"level": 65,
"sets": [
{
- "role": "Fast Bulky Setup",
- "movepool": ["Calm Mind", "Draco Meteor", "Electro Drift", "Substitute"],
+ "role": "Setup Sweeper",
+ "movepool": ["Calm Mind", "Draco Meteor", "Dragon Pulse", "Electro Drift"],
"abilities": ["Hadron Engine"],
"teraTypes": ["Electric"]
},
diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts
index 99fea6cb97..4569c1dabc 100644
--- a/data/random-battles/gen9/teams.ts
+++ b/data/random-battles/gen9/teams.ts
@@ -146,7 +146,7 @@ const DOUBLES_NO_LEAD_POKEMON = [
];
const DEFENSIVE_TERA_BLAST_USERS = [
- 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges', 'raikou',
+ 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges',
];
function sereneGraceBenefits(move: Move) {
@@ -246,7 +246,9 @@ export class RandomTeams {
!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')),
+ Water: (movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles) => (
+ !counter.get('Water') && (!types.includes('Ground') || isDoubles)
+ ),
};
this.poolsCacheKey = undefined;
this.cachedPool = undefined;
@@ -1157,15 +1159,15 @@ export class RandomTeams {
}
return this.sample(species.requiredItems);
}
- if (role === 'AV Pivot') return 'Assault Vest';
if (species.id === 'pikachu') return 'Light Ball';
+ if (role === 'AV Pivot') return 'Assault Vest';
if (species.id === 'regieleki') return 'Magnet';
if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf';
if (
species.id === 'froslass' || moves.has('populationbomb') ||
(ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2))
) return 'Wide Lens';
- if (species.id === 'smeargle' && !isDoubles) return 'Focus Sash';
+ if (species.id === 'smeargle') return 'Focus Sash';
if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray';
if (
(species.baseSpecies === 'Magearna' && role === 'Tera Blast user') ||
@@ -1285,9 +1287,14 @@ export class RandomTeams {
(role === 'Bulky Protect' && counter.get('setup')) ||
['irondefense', 'coil', 'acidarmor', 'wish'].some(m => moves.has(m)) ||
(counter.get('recovery') && !moves.has('strengthsap') && !counter.get('speedcontrol') && !offensiveRole) ||
+ (PROTECT_MOVES.some(m => moves.has(m)) && moves.has('leechseed')) ||
species.id === 'regigigas'
) return 'Leftovers';
- if (species.id === 'sylveon') return 'Pixie Plate';
+ if (moves.has('hypervoice') && !types.includes('Normal')) return 'Throat Spray';
+ if (
+ role === 'Doubles Fast Attacker' && !counter.get('recoil') &&
+ species.baseStats.hp + species.baseStats.def + species.baseStats.spd <= 230
+ ) return 'Focus Sash';
if (
(offensiveRole || (role === 'Tera Blast user' && (species.baseStats.spe >= 80 || moves.has('trickroom')))) &&
!moves.has('fakeout') &&
@@ -1300,7 +1307,7 @@ export class RandomTeams {
) ? 'Booster Energy' : 'Life Orb';
}
if (isLead && (species.id === 'glimmora' ||
- (['Doubles Fast Attacker', 'Doubles Wallbreaker', 'Offensive Protect'].includes(role) &&
+ (['Doubles Wallbreaker', 'Offensive Protect'].includes(role) &&
species.baseStats.hp + species.baseStats.def + species.baseStats.spd <= 230))
) return 'Focus Sash';
if (
@@ -1582,6 +1589,7 @@ export class RandomTeams {
return {
name: species.baseSpecies,
species: forme,
+ speciesId: species.id,
gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
shiny: this.randomChance(1, 1024),
level,
@@ -1630,6 +1638,79 @@ export class RandomTeams {
return [pokemonPool, baseSpeciesPool];
}
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[],
+ isDoubles = false
+ ): boolean {
+ const webSetters = [
+ 'ariados', 'smeargle', 'masquerain', 'kricketune', 'leavanny', 'galvantula', 'vikavolt', 'ribombee', 'araquanid', 'spidops',
+ ];
+ const screenSetters = ['meowstic', 'grimmsnarl', 'ninetalesalola', 'abomasnow'];
+
+ const doublesWebSetters = ['ariados', 'kricketune', 'leavanny', 'galvantula', 'vikavolt', 'araquanid', 'spidops'];
+ const doublesScreenSetters = ['meowstic', 'klefki', 'grimmsnarl', 'ninetalesalola', 'abomasnow'];
+
+ const sunSetters = ['ninetales', 'torkoal', 'groudon', 'koraidon'];
+ const rainSetters = ['politoed', 'pelipper', 'kyogre'];
+ const sandSetters = ['tyranitar', 'hippowdon'];
+ const snowSetters = ['ninetalesalola', 'abomasnow'];
+
+ const incompatiblePokemon = [
+ // These Pokemon with support roles are considered too similar to each other.
+ ['blissey', 'chansey'],
+ ['illumise', 'volbeat'],
+
+ // These combinations are prevented to avoid double webs or screens.
+ [webSetters, webSetters],
+ [screenSetters, screenSetters],
+
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ ['toxicroak', sunSetters],
+ ];
+
+ const doublesIncompatiblePokemon = [
+ // These Pokemon with support roles are considered too similar to each other.
+ ['illumise', 'volbeat'],
+ [['minun', 'plusle', 'pachirisu', 'raichu'], ['minun', 'plusle', 'pachirisu', 'raichu']],
+
+ // These combinations are prevented to avoid double webs or screens.
+ [doublesWebSetters, doublesWebSetters],
+ [doublesScreenSetters, doublesScreenSetters],
+
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ ['toxicroak', sunSetters],
+
+ // Prevent conflicting weather abilities from generating together
+ [sunSetters, [...rainSetters, ...sandSetters, ...snowSetters]],
+ [rainSetters, [...sandSetters, ...snowSetters]],
+ [sandSetters, snowSetters],
+
+ // Prevent conflicting terrain abilities from generating together
+ [['pincurchin', 'miraidon'], ['indeedee', 'indeedeef', 'rillaboom']],
+ ['rillaboom', ['indeedee', 'indeedeef']],
+ ];
+
+ const incompatibilityList = isDoubles ? doublesIncompatiblePokemon : incompatiblePokemon;
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
+
randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json');
randomDoublesSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./doubles-sets.json');
@@ -1737,6 +1818,9 @@ export class RandomTeams {
if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) {
continue;
}
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon, isDoubles)) continue;
}
// Limit three of any type combination in Monotype
diff --git a/sim/global-types.ts b/sim/global-types.ts
index dab8ed3233..e663413e98 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -496,6 +496,7 @@ declare namespace RandomTeamsTypes {
export interface RandomSet {
name: string;
species: string;
+ speciesId?: string;
gender: string | boolean;
moves: string[];
ability: string;
From 376da145ff1465dd0e5032b93f78e220c894b4f9 Mon Sep 17 00:00:00 2001
From: Yoshiblaze <53023564+Yoshiblaze@users.noreply.github.com>
Date: Sun, 1 Mar 2026 05:37:04 -0500
Subject: [PATCH 093/233] Add [Gen 6] Megas Revisited Random Battle (#11778)
* March PMOTM Part 1
* March PMOTM Part 2
* March PMOTM Part 3
* March PMOTM Part 4
* March PMOTM Part 5
* Update data/mods/gen6megasrevisited/abilities.ts
* Update data/mods/gen6megasrevisited/scripts.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 68 +-
data/mods/gen6megasrevisited/abilities.ts | 369 +
data/mods/gen6megasrevisited/formats-data.ts | 26 +
data/mods/gen6megasrevisited/items.ts | 12 +
data/mods/gen6megasrevisited/moves.ts | 77 +
data/mods/gen6megasrevisited/pokedex.ts | 249 +
data/mods/gen6megasrevisited/rulesets.ts | 33 +
data/mods/gen6megasrevisited/scripts.ts | 237 +
data/mods/sixbysix/formats-data.ts | 113 -
data/mods/sixbysix/items.ts | 32 -
data/mods/sixbysix/learnsets.ts | 2580 ----
data/mods/sixbysix/pokedex.ts | 542 -
data/mods/sixbysix/rulesets.ts | 17 -
data/mods/sixbysix/scripts.ts | 3 -
.../gen6megasrevisited/factory-sets.json | 10319 ++++++++++++++++
.../gen6megasrevisited/sets.json | 6301 ++++++++++
.../gen6megasrevisited/teams.ts | 7 +
data/random-battles/sixbysix/random-sets.json | 558 -
data/random-battles/sixbysix/teams.ts | 960 --
19 files changed, 17649 insertions(+), 4854 deletions(-)
create mode 100644 data/mods/gen6megasrevisited/abilities.ts
create mode 100644 data/mods/gen6megasrevisited/formats-data.ts
create mode 100644 data/mods/gen6megasrevisited/items.ts
create mode 100644 data/mods/gen6megasrevisited/moves.ts
create mode 100644 data/mods/gen6megasrevisited/pokedex.ts
create mode 100644 data/mods/gen6megasrevisited/rulesets.ts
create mode 100644 data/mods/gen6megasrevisited/scripts.ts
delete mode 100644 data/mods/sixbysix/formats-data.ts
delete mode 100644 data/mods/sixbysix/items.ts
delete mode 100644 data/mods/sixbysix/learnsets.ts
delete mode 100644 data/mods/sixbysix/pokedex.ts
delete mode 100644 data/mods/sixbysix/rulesets.ts
delete mode 100644 data/mods/sixbysix/scripts.ts
create mode 100644 data/random-battles/gen6megasrevisited/factory-sets.json
create mode 100644 data/random-battles/gen6megasrevisited/sets.json
create mode 100644 data/random-battles/gen6megasrevisited/teams.ts
delete mode 100644 data/random-battles/sixbysix/random-sets.json
delete mode 100644 data/random-battles/sixbysix/teams.ts
diff --git a/config/formats.ts b/config/formats.ts
index 5d1e9281c9..6c5557f8e2 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -627,27 +627,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
},
{
- name: "[Gen 9] Six by Six Random Battle",
- desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
- mod: 'sixbysix',
- team: 'random6x6',
- ruleset: [
- 'Species Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod', 'Illusion Level Mod',
- 'Terastal Clause', 'Data Preview', 'Sprite Viewer',
- ],
+ name: "[Gen 6] Megas Revisited Random Battle",
+ desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`,
+ mod: 'gen6megasrevisited',
+ team: 'random',
+ bestOfDefault: true,
+ ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Mega Data Mod'],
onBegin() {
- this.add('-message', `Welcome to Six by Six!`);
- this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
+ this.add(`raw|Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
+ this.add('-message', `Welcome to Megas Revisited!`);
+ this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
- },
- onSwitchInPriority: 100,
- onSwitchIn(pokemon) {
- if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !==
- this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') &&
- !pokemon.terastallized) {
- this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
- }
+ this.add('-message', `https://www.smogon.com/forums/threads/3713949/`);
},
},
{
@@ -3469,39 +3460,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Pet Mods",
},
{
- name: "[Gen 9] Six by Six", // Roomtours
- desc: `A Gen 9 micrometa featuring only 6 Pokemon with 6 forms each.`,
- mod: 'sixbysix',
+ name: "[Gen 6] Megas Revisited", // Roomtours
+ desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`,
+ mod: 'gen6megasrevisited',
searchShow: false,
- ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', 'Terastal Clause', 'Data Preview', 'Sprite Viewer'],
- banlist: [
- 'All Pokemon', 'Last Respects', 'Shed Tail',
- 'King\'s Rock', 'Razor Fang', 'Baton Pass',
- ],
- unbanlist: [
- 'Kingdra-Classic', 'Kingdra-Brinepool', 'Kingdra-Druid', 'Kingdra-Bard', 'Kingdra-Gourmet', 'Kingdra-Ancient',
- 'Nidoqueen-Classic', 'Nidoqueen-Erudite', 'Nidoqueen-Volcanic',
- 'Nidoqueen-Rosegold', 'Nidoqueen-Shaman', 'Nidoqueen-Jasper',
- 'Bisharp-Centurion', 'Bisharp-Savage', 'Bisharp-Ronin', 'Bisharp-Mantis', 'Bisharp-Revenant', 'Bisharp-Assassin',
- 'Corviknight-Thunderbird', 'Corviknight-Genie', 'Corviknight-Yeti',
- 'Corviknight-Analytical', 'Corviknight-Martian', 'Corviknight-Falcon',
- 'Krookodile-Infernal', 'Krookodile-Abyssal', 'Krookodile-Wetlander',
- 'Krookodile-Cave Dweller', 'Krookodile-Cliffside', 'Krookodile-Quantum',
- 'Ogerpon-Muerta', 'Ogerpon-Easter', 'Ogerpon-Ankh', 'Ogerpon-Eid', 'Ogerpon-Vessel', 'Ogerpon-Kitsune',
- ],
+ ruleset: ['Standard', 'Swagger Clause', 'Mega Data Mod'],
+ banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Blaziken + Speed Boost'],
onBegin() {
- this.add('-message', `Welcome to Six by Six!`);
- this.add('-message', `This is a micrometa featuring just 6 Pokemon, each with 6 forms each!`);
+ this.add(`raw|Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
+ this.add('-message', `Welcome to Megas Revisited!`);
+ this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3769141/`);
- },
- onSwitchInPriority: 100,
- onSwitchIn(pokemon) {
- if ((pokemon.illusion || pokemon).getTypes(true, true).join('/') !==
- this.dex.forGen(9).species.get((pokemon.illusion || pokemon).species.name).types.join('/') &&
- !pokemon.terastallized) {
- this.add('-start', pokemon, 'typechange', (pokemon.illusion || pokemon).getTypes(true).join('/'), '[silent]');
- }
+ this.add('-message', `https://www.smogon.com/forums/threads/3713949/`);
},
},
{
diff --git a/data/mods/gen6megasrevisited/abilities.ts b/data/mods/gen6megasrevisited/abilities.ts
new file mode 100644
index 0000000000..037690e30b
--- /dev/null
+++ b/data/mods/gen6megasrevisited/abilities.ts
@@ -0,0 +1,369 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ merciless: {
+ shortDesc: "This Pokemon's attacks are critical hits if the target is statused.",
+ onModifyCritRatio(critRatio, source, target) {
+ if (target?.status) return 5;
+ },
+ name: "Merciless",
+ rating: 1.5,
+ num: 196,
+ gen: 6,
+ },
+ pocketdimension: {
+ shortDesc: "This Pokemon switches out after using a status move.",
+ onModifyMove(move, pokemon) {
+ if (move.category === 'Status') {
+ move.selfSwitch = true;
+ this.add('-ability', pokemon, 'Pocket Dimension');
+ this.add('-message', `${pokemon.name} will switch out if this moves lands!`);
+ }
+ },
+ name: "Pocket Dimension",
+ rating: 4.5,
+ },
+ grassysurge: {
+ inherit: true,
+ gen: 6,
+ },
+ mistysurge: {
+ inherit: true,
+ gen: 6,
+ },
+ neutralizinggas: {
+ inherit: true,
+ // Ability suppression cancelled in scripts.ts
+ // new Ability suppression implemented in scripts.ts
+ onSwitchIn(pokemon) {},
+ onEnd(source) {},
+ onStart(pokemon) {
+ this.add('-ability', pokemon, 'Neutralizing Gas');
+ },
+ // onModifyPriority implemented in relevant abilities
+ onFoeBeforeMovePriority: 13,
+ onFoeBeforeMove(attacker, defender, move) {
+ attacker.addVolatile('neutralizinggas');
+ },
+ condition: {
+ onAfterMove(pokemon) {
+ pokemon.removeVolatile('neutralizinggas');
+ },
+ },
+ flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
+ desc: "While this Pokemon is active, opposing Pokemon's moves and their effects ignore its own Ability. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.",
+ shortDesc: "While this Pokemon is active, opposing Pokemon's Ability has no effect when it uses moves.",
+ gen: 6,
+ },
+ nostalgiatrip: {
+ shortDesc: "This Pokemon's moves have the damage categories they would have in Gen 3. Fairy-type moves are Special.",
+ onStart(pokemon) {
+ this.add('-ability', pokemon, 'Nostalgia Trip');
+ this.add('-message', `This Pokemon is experiencing a nostalgia trip!`);
+ },
+ onModifyMovePriority: 8,
+ onModifyMove(move, pokemon) {
+ if (move.category === "Status") return;
+ if (['Fire', 'Water', 'Grass', 'Electric', 'Dark', 'Psychic', 'Dragon', 'Fairy', 'Ice'].includes(move.type)) {
+ move.category = "Special";
+ } else {
+ move.category = "Physical";
+ }
+ },
+ name: "Nostalgia Trip",
+ rating: 4,
+ gen: 6,
+ },
+ weatherreport: {
+ onBeforeMovePriority: 0.5,
+ onBeforeMove(target, source, move) {
+ if (move.type === 'Fire') {
+ this.field.setWeather('sunnyday');
+ } else if (move.type === 'Water') {
+ this.field.setWeather('raindance');
+ }
+ },
+ name: "Weather Report",
+ shortDesc: "Before using a Water or Fire-type move, this Pokemon sets Rain Dance or Sunny Day respectively.",
+ rating: 4,
+ gen: 6,
+ },
+ armortail: {
+ inherit: true,
+ gen: 6,
+ },
+ brainpower: {
+ onModifySpAPriority: 5,
+ onModifySpA(spa) {
+ return this.chainModify(2);
+ },
+ name: "Brain Power",
+ shortDesc: "This Pokemon's Special Attack is doubled.",
+ rating: 5,
+ },
+ neuroforce: {
+ inherit: true,
+ gen: 6,
+ },
+ bugzapper: {
+ onTryHit(target, source, move) {
+ if (target !== source && move.type === 'Bug') {
+ if (!source.addVolatile('trapped', target, move, 'trapper')) {
+ this.add('-immune', target, '[from] ability: Bug Zapper');
+ }
+ return null;
+ }
+ },
+ name: "Bug Zapper",
+ shortDesc: "This Pokemon is immune to Bug-type moves and traps the foe if hit by one.",
+ rating: 5,
+ },
+ exoskeleton: {
+ onSourceModifyDamage(damage, source, target, move) {
+ if (move.category === 'Physical') {
+ return this.chainModify(0.5);
+ }
+ },
+ name: "Exoskeleton",
+ shortDesc: "This Pokemon receives 1/2 damage from physical attacks; Hazard immunity.",
+ rating: 4,
+ },
+ icescales: {
+ inherit: true,
+ onModifyAtkPriority: 5,
+ onModifyAtk(atk, attacker, defender, move) {
+ if (move.type === 'Ice') {
+ this.debug('Ice Scales boost');
+ return this.chainModify(1.5);
+ }
+ },
+ onModifySpAPriority: 5,
+ onModifySpA(atk, attacker, defender, move) {
+ if (move.type === 'Ice') {
+ this.debug('Ice Scales boost');
+ return this.chainModify(1.5);
+ }
+ },
+ onImmunity(type, pokemon) {
+ if (type === 'hail') return false;
+ },
+ shortDesc: "This Pokemon receives 1/2 damage from special attacks. Ice moves have 1.5x power. Hail immunity.",
+ gen: 6,
+ },
+ eartheater: {
+ inherit: true,
+ onDamage(damage, target, source, effect) {
+ if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) {
+ this.heal(damage);
+ return false;
+ }
+ },
+ shortDesc: "Heals 1/4 of its max HP when hit by Ground; Ground immunity. Healed by Spikes and Stealth Rock.",
+ gen: 6,
+ },
+ toxicchain: {
+ inherit: true,
+ gen: 6,
+ },
+ shellejection: {
+ onModifyMovePriority: -1,
+ onModifyMove(move, attacker) {
+ if (move.category === 'Special') {
+ attacker.addVolatile('shellejection');
+ this.add('-ability', attacker, 'Shell Ejection');
+ this.add('-message', `${attacker.name} is getting ready to leave the battlefield!`);
+ this.add('-message', `${attacker.name} can no longer use status moves!`);
+ }
+ },
+ condition: {
+ duration: 2,
+ onDisableMove(pokemon) {
+ for (const moveSlot of pokemon.moveSlots) {
+ const move = this.dex.moves.get(moveSlot.id);
+ if (move.category === 'Status' && move.id !== 'mefirst') {
+ pokemon.disableMove(moveSlot.id);
+ }
+ }
+ },
+ onSwitchOut(pokemon) {
+ pokemon.heal(pokemon.baseMaxhp / 3);
+ },
+ onEnd(pokemon) {
+ this.add('-ability', pokemon, 'Shell Ejection');
+ this.add('-message', `${pokemon.name} ejected itself from its shell!`);
+ pokemon.heal(pokemon.baseMaxhp / 3);
+ pokemon.switchFlag = true;
+ },
+ },
+ name: "Shell Ejection",
+ rating: 3.5,
+ gen: 6,
+ shortDesc: "On using Special move: switching heals 1/3, can't use status, switches out at end of next turn.",
+ },
+ sharpness: {
+ inherit: true,
+ gen: 6,
+ },
+ dauntlessshield: {
+ onStart(pokemon) {
+ this.boost({ def: 1 }, pokemon);
+ pokemon.addVolatile('dauntlessshield');
+ },
+ onResidualOrder: 6,
+ onResidual(pokemon) {
+ if (pokemon.positiveBoosts()) {
+ this.heal(pokemon.baseMaxhp / 16);
+ this.add('-message', `${pokemon.name}'s shield gives it strength!`);
+ }
+ },
+ name: "Dauntless Shield",
+ rating: 5,
+ num: 235,
+ shortDesc: "+1 Defense on switch-in. Heals 1/16 of max HP if it has a positive boost.",
+ gen: 6,
+ },
+ confidence: {
+ onSourceAfterFaint(length, target, source, effect) {
+ if (effect && effect.effectType === 'Move') {
+ this.boost({ spa: length }, source);
+ }
+ },
+ name: "Confidence",
+ rating: 3,
+ shortDesc: "This Pokemon's Sp. Atk is raised by 1 stage if it attacks and KOes another Pokemon.",
+ gen: 6,
+ },
+ electricsurge: {
+ inherit: true,
+ gen: 6,
+ },
+ goodasgold: {
+ inherit: true,
+ gen: 6,
+ },
+ opportunist: {
+ inherit: true,
+ onUpdate(pokemon) {
+ let activate = false;
+ const boosts: SparseBoostsTable = {};
+ let i: BoostID;
+ for (i in pokemon.boosts) {
+ if (pokemon.boosts[i] < 0) {
+ activate = true;
+ boosts[i] = 0;
+ }
+ }
+ if (this.effectState.herb) return;
+ if (activate) {
+ pokemon.setBoost(boosts);
+ this.effectState.herb = true;
+ this.add('-ability', pokemon, 'Opportunist');
+ this.add('-clearnegativeboost', pokemon, '[silent]');
+ }
+ },
+ onSwitchIn(pokemon) {
+ delete this.effectState.herb;
+ },
+ shortDesc: "Copies foe's stat gains as they happen. Resets negative stat changes once per switch-in.",
+ gen: 6,
+ },
+ intoxicate: {
+ onModifyTypePriority: -1,
+ onModifyType(move, pokemon) {
+ const noModifyType = [
+ 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
+ ];
+ if (move.type === 'Normal' && !noModifyType.includes(move.id) &&
+ !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {
+ move.type = 'Poison';
+ move.typeChangerBoosted = this.effect;
+ }
+ },
+ onBasePowerPriority: 23,
+ onBasePower(basePower, pokemon, target, move) {
+ if (move.typeChangerBoosted) return this.chainModify([5325, 4096]);
+ },
+ name: "Intoxicate",
+ rating: 4,
+ shortDesc: "This Pokemon's Normal-type moves become Poison-type and have 1.3x power.",
+ },
+ dragonsgale: {
+ onStart(source) {
+ this.field.setWeather('deltastream');
+ },
+ onAnySetWeather(target, source, weather) {
+ const strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];
+ if (this.field.getWeather().id === 'deltastream' && !strongWeathers.includes(weather.id)) return false;
+ },
+ onEnd(pokemon) {
+ if (this.field.weatherState.source !== pokemon) return;
+ for (const target of this.getAllActive()) {
+ if (target === pokemon) continue;
+ if (target.hasAbility('dragonsgale')) {
+ this.field.weatherState.source = target;
+ return;
+ }
+ }
+ this.field.clearWeather();
+ },
+ onDamage(damage, target, source, effect) {
+ if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) {
+ return damage / 2;
+ }
+ },
+ flags: {},
+ name: "Dragon's Gale",
+ shortDesc: "On switch-in, sets Delta Stream. User takes halved damage from hazards.",
+ rating: 5,
+ },
+ parentalbond: {
+ onPrepareHit(source, target, move) {
+ if (move.category === 'Status' || move.selfdestruct || move.multihit) return;
+ if ([
+ 'endeavor', 'seismictoss', 'psywave', 'nightshade', 'sonicboom', 'dragonrage',
+ 'superfang', 'naturesmadness', 'bide', 'counter', 'mirrorcoat', 'metalburst',
+ ].includes(move.id)) return;
+ if (!move.spreadHit && !move.isZ && !move.isMax) {
+ move.multihit = 2;
+ move.multihitType = 'parentalbond';
+ }
+ },
+ onSourceModifySecondaries(secondaries, target, source, move) {
+ if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) {
+ // hack to prevent accidentally suppressing King's Rock/Razor Fang
+ return secondaries.filter(effect => effect.volatileStatus === 'flinch');
+ }
+ },
+ name: "Parental Bond",
+ rating: 4.5,
+ shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage quartered.",
+ num: 184,
+ },
+
+ // for ngas
+ galewings: {
+ // for ngas
+ inherit: true,
+ onModifyPriority(priority, pokemon, target, move) {
+ for (const poke of this.getAllActive()) {
+ if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) {
+ return;
+ }
+ }
+ if (move && move.type === 'Flying') return priority + 1;
+ },
+ },
+ prankster: {
+ // for ngas
+ inherit: true,
+ onModifyPriority(priority, pokemon, target, move) {
+ for (const poke of this.getAllActive()) {
+ if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) {
+ return;
+ }
+ }
+ if (move?.category === 'Status') {
+ move.pranksterBoosted = true;
+ return priority + 1;
+ }
+ },
+ },
+};
diff --git a/data/mods/gen6megasrevisited/formats-data.ts b/data/mods/gen6megasrevisited/formats-data.ts
new file mode 100644
index 0000000000..a5d97dda38
--- /dev/null
+++ b/data/mods/gen6megasrevisited/formats-data.ts
@@ -0,0 +1,26 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ blaziken: {
+ tier: "OU",
+ },
+ blazikenmega: {
+ tier: "OU",
+ },
+ gengarmega: {
+ tier: "OU",
+ },
+ kangaskhanmega: {
+ tier: "OU",
+ },
+ lucariomega: {
+ tier: "OU",
+ },
+ mawilemega: {
+ tier: "OU",
+ },
+ sableyemega: {
+ tier: "OU",
+ },
+ salamencemega: {
+ tier: "OU",
+ },
+};
diff --git a/data/mods/gen6megasrevisited/items.ts b/data/mods/gen6megasrevisited/items.ts
new file mode 100644
index 0000000000..90f2c22c71
--- /dev/null
+++ b/data/mods/gen6megasrevisited/items.ts
@@ -0,0 +1,12 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ meteorite: {
+ name: "Meteorite",
+ spritenum: 615,
+ megaStone: { "Rayquaza": "Rayquaza-Mega" },
+ itemUser: ["Rayquaza"],
+ onTakeItem(item, source) {
+ return !item.megaStone?.[source.baseSpecies.baseSpecies];
+ },
+ desc: "If held by a Rayquaza, this item allows it to Mega Evolve in battle.",
+ },
+};
diff --git a/data/mods/gen6megasrevisited/moves.ts b/data/mods/gen6megasrevisited/moves.ts
new file mode 100644
index 0000000000..b8e3a95b36
--- /dev/null
+++ b/data/mods/gen6megasrevisited/moves.ts
@@ -0,0 +1,77 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ stealthrock: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Stealth Rock');
+ },
+ onSwitchIn(pokemon) {
+ if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
+ this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
+ },
+ },
+ },
+ toxicspikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 2) return false;
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded()) return;
+ if (pokemon.hasType('Poison')) {
+ this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`);
+ pokemon.side.removeSideCondition('toxicspikes');
+ } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) {
+ // do nothing
+ } else if (this.effectState.layers >= 2) {
+ pokemon.trySetStatus('tox', pokemon.side.foe.active[0]);
+ } else {
+ pokemon.trySetStatus('psn', pokemon.side.foe.active[0]);
+ }
+ },
+ },
+ },
+ spikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 3) return false;
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
+ const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
+ this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
+ },
+ },
+ },
+ stickyweb: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Sticky Web');
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
+ this.add('-activate', pokemon, 'move: Sticky Web');
+ this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
+ },
+ },
+ },
+};
diff --git a/data/mods/gen6megasrevisited/pokedex.ts b/data/mods/gen6megasrevisited/pokedex.ts
new file mode 100644
index 0000000000..70821f3c7f
--- /dev/null
+++ b/data/mods/gen6megasrevisited/pokedex.ts
@@ -0,0 +1,249 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ audinomega: {
+ inherit: true,
+ types: ["Normal", "Electric"],
+ baseStats: { hp: 103, atk: 60, def: 120, spa: 110, spd: 97, spe: 55 },
+ abilities: { 0: "Regenerator" },
+ },
+ houndoommega: {
+ inherit: true,
+ types: ["Dark", "Fire"],
+ baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 90, spe: 115 },
+ abilities: { 0: "Merciless" },
+ },
+ lucariomega: {
+ inherit: true,
+ types: ["Fighting", "Steel"],
+ baseStats: { hp: 70, atk: 125, def: 70, spa: 140, spd: 94, spe: 126 },
+ abilities: { 0: "Lightning Rod" },
+ },
+ banettemega: {
+ inherit: true,
+ types: ["Ghost", "Steel"],
+ baseStats: { hp: 64, atk: 149, def: 75, spa: 83, spd: 83, spe: 101 },
+ abilities: { 0: "Pocket Dimension" },
+ },
+ glaliemega: {
+ inherit: true,
+ types: ["Ice", "Steel"],
+ baseStats: { hp: 80, atk: 160, def: 70, spa: 95, spd: 70, spe: 105 },
+ abilities: { 0: "Refrigerate" },
+ },
+ venusaurmega: {
+ inherit: true,
+ types: ["Grass", "Poison"],
+ baseStats: { hp: 80, atk: 82, def: 123, spa: 120, spd: 120, spe: 100 },
+ abilities: { 0: "Grassy Surge" },
+ },
+ blastoisemega: {
+ inherit: true,
+ types: ["Water", "Fairy"],
+ baseStats: { hp: 79, atk: 83, def: 130, spa: 135, spd: 105, spe: 98 },
+ abilities: { 0: "Misty Surge" },
+ },
+ charizardmegay: {
+ inherit: true,
+ types: ["Fire", "Flying"],
+ baseStats: { hp: 78, atk: 94, def: 93, spa: 159, spd: 110, spe: 100 },
+ abilities: { 0: "Dragon's Gale" },
+ },
+ alakazammega: {
+ inherit: true,
+ types: ["Psychic", "Ice"],
+ baseStats: { hp: 55, atk: 50, def: 75, spa: 155, spd: 125, spe: 140 },
+ abilities: { 0: "Magic Guard" },
+ },
+ pinsirmega: {
+ inherit: true,
+ types: ["Bug", "Ice"],
+ baseStats: { hp: 65, atk: 150, def: 110, spa: 80, spd: 85, spe: 110 },
+ abilities: { 0: "Mountaineer" },
+ },
+ gengarmega: {
+ inherit: true,
+ types: ["Ghost", "Poison"],
+ baseStats: { hp: 60, atk: 65, def: 105, spa: 155, spd: 105, spe: 110 },
+ abilities: { 0: "Neutralizing Gas" },
+ },
+ aerodactylmega: {
+ inherit: true,
+ types: ["Rock", "Flying"],
+ baseStats: { hp: 80, atk: 140, def: 65, spa: 85, spd: 100, spe: 145 },
+ abilities: { 0: "Nostalgia Trip" },
+ },
+ steelixmega: {
+ inherit: true,
+ types: ["Steel", "Ground"],
+ baseStats: { hp: 75, atk: 135, def: 210, spa: 55, spd: 105, spe: 30 },
+ abilities: { 0: "Flash Fire" },
+ weightkg: 999.9,
+ },
+ altariamega: {
+ inherit: true,
+ types: ["Dragon", "Fairy"],
+ baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 115, spe: 80 },
+ abilities: { 0: "Weather Report" },
+ },
+ sceptilemega: {
+ inherit: true,
+ types: ["Grass", "Dragon"],
+ baseStats: { hp: 70, atk: 95, def: 79, spa: 145, spd: 99, spe: 142 },
+ abilities: { 0: "Armor Tail" },
+ },
+ swampertmega: {
+ inherit: true,
+ types: ["Water", "Poison"],
+ baseStats: { hp: 100, atk: 145, def: 110, spa: 85, spd: 110, spe: 85 },
+ abilities: { 0: "Toxic Chain" },
+ },
+ manectricmega: {
+ inherit: true,
+ types: ["Electric"],
+ baseStats: { hp: 70, atk: 75, def: 80, spa: 135, spd: 85, spe: 130 },
+ abilities: { 0: "Bug Zapper" },
+ },
+ absolmega: {
+ inherit: true,
+ types: ["Dark", "Fairy"],
+ baseStats: { hp: 65, atk: 130, def: 60, spa: 135, spd: 60, spe: 115 },
+ abilities: { 0: "Neuroforce" },
+ },
+ medichammega: {
+ inherit: true,
+ types: ["Fighting", "Psychic"],
+ baseStats: { hp: 60, atk: 60, def: 100, spa: 90, spd: 100, spe: 100 },
+ abilities: { 0: "Brain Power" },
+ },
+ sableyemega: {
+ inherit: true,
+ types: ["Dark", "Ghost"],
+ baseStats: { hp: 50, atk: 95, def: 115, spa: 85, spd: 115, spe: 20 },
+ },
+ beedrillmega: {
+ inherit: true,
+ types: ["Bug", "Rock"],
+ baseStats: { hp: 65, atk: 140, def: 85, spa: 45, spd: 85, spe: 75 },
+ abilities: { 0: "Exoskeleton" },
+ },
+ mawilemega: {
+ inherit: true,
+ types: ["Steel", "Fairy"],
+ baseStats: { hp: 50, atk: 90, def: 125, spa: 70, spd: 95, spe: 50 },
+ abilities: { 0: "Huge Power" },
+ },
+ abomasnowmega: {
+ inherit: true,
+ types: ["Grass"],
+ abilities: { 0: "Ice Scales" },
+ },
+ cameruptmega: {
+ inherit: true,
+ types: ["Fire", "Ground"],
+ baseStats: { hp: 70, atk: 80, def: 140, spa: 135, spd: 115, spe: 20 },
+ abilities: { 0: "Earth Eater" },
+ },
+ slowbromega: {
+ inherit: true,
+ types: ["Water", "Psychic"],
+ baseStats: { hp: 95, atk: 75, def: 150, spa: 120, spd: 120, spe: 30 },
+ abilities: { 0: "Shell Ejection" },
+ },
+ gallademega: {
+ inherit: true,
+ types: ["Psychic", "Fighting"],
+ baseStats: { hp: 68, atk: 150, def: 100, spa: 75, spd: 127, spe: 98 },
+ abilities: { 0: "Sharpness" },
+ },
+ ampharosmega: {
+ inherit: true,
+ types: ["Electric", "Dragon"],
+ baseStats: { hp: 90, atk: 95, def: 95, spa: 165, spd: 110, spe: 55 },
+ abilities: { 0: "Mega Launcher" },
+ },
+ gyaradosmega: {
+ inherit: true,
+ types: ["Water", "Flying"],
+ baseStats: { hp: 95, atk: 130, def: 109, spa: 85, spd: 130, spe: 91 },
+ abilities: { 0: "Aerilate" },
+ },
+ heracrossmega: {
+ inherit: true,
+ types: ["Bug", "Fighting"],
+ baseStats: { hp: 80, atk: 150, def: 150, spa: 40, spd: 110, spe: 70 },
+ abilities: { 0: "Iron Barbs" },
+ },
+ sharpedomega: {
+ inherit: true,
+ types: ["Water", "Electric"],
+ baseStats: { hp: 70, atk: 130, def: 55, spa: 145, spd: 55, spe: 105 },
+ abilities: { 0: "No Guard" },
+ },
+ gardevoirmega: {
+ inherit: true,
+ types: ["Psychic", "Fairy"],
+ baseStats: { hp: 68, atk: 65, def: 100, spa: 150, spd: 127, spe: 108 },
+ },
+ aggronmega: {
+ inherit: true,
+ types: ["Steel"],
+ baseStats: { hp: 70, atk: 145, def: 185, spa: 85, spd: 85, spe: 60 },
+ abilities: { 0: "Dauntless Shield" },
+ },
+ kangaskhanmega: {
+ inherit: true,
+ types: ["Normal", "Ground"],
+ baseStats: { hp: 105, atk: 125, def: 105, spa: 50, spd: 105, spe: 100 },
+ },
+ salamencemega: {
+ inherit: true,
+ types: ["Dragon", "Flying"],
+ baseStats: { hp: 95, atk: 135, def: 105, spa: 155, spd: 105, spe: 105 },
+ abilities: { 0: "Confidence" },
+ },
+ garchompmega: {
+ inherit: true,
+ types: ["Dragon", "Ground"],
+ baseStats: { hp: 108, atk: 150, def: 115, spa: 140, spd: 85, spe: 102 },
+ abilities: { 0: "Water Absorb" },
+ },
+ tyranitarmega: {
+ inherit: true,
+ types: ["Rock", "Electric"],
+ baseStats: { hp: 100, atk: 144, def: 120, spa: 110, spd: 144, spe: 82 },
+ abilities: { 0: "Electric Surge" },
+ },
+ latiasmega: {
+ inherit: true,
+ abilities: { 0: "Trace" },
+ },
+ latiosmega: {
+ inherit: true,
+ baseStats: { hp: 80, atk: 140, def: 100, spa: 150, spd: 120, spe: 110 },
+ abilities: { 0: "Opportunist" },
+ },
+ dianciemega: {
+ inherit: true,
+ abilities: { 0: "Good As Gold" },
+ },
+ blazikenmega: {
+ inherit: true,
+ baseStats: { hp: 80, atk: 150, def: 80, spa: 120, spd: 90, spe: 110 },
+ abilities: { 0: "Regenerator" },
+ },
+ mewtwomegax: {
+ inherit: true,
+ types: ["Psychic", "Poison"],
+ baseStats: { hp: 106, atk: 140, def: 130, spa: 154, spd: 120, spe: 130 },
+ abilities: { 0: "Intoxicate" },
+ },
+ mewtwomegay: {
+ inherit: true,
+ types: ["Psychic", "Water"],
+ baseStats: { hp: 106, atk: 120, def: 110, spa: 194, spd: 130, spe: 120 },
+ abilities: { 0: "Levitate" },
+ },
+ rayquazamega: {
+ inherit: true,
+ requiredItem: "Meteorite",
+ },
+};
diff --git a/data/mods/gen6megasrevisited/rulesets.ts b/data/mods/gen6megasrevisited/rulesets.ts
new file mode 100644
index 0000000000..b1a52de493
--- /dev/null
+++ b/data/mods/gen6megasrevisited/rulesets.ts
@@ -0,0 +1,33 @@
+export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ megadatamod: {
+ effectType: 'Rule',
+ name: 'Mega Data Mod',
+ desc: 'Gives data on stats, Ability and types when a Pokémon Mega Evolves or undergoes Ultra Burst.',
+ onSwitchIn(pokemon) {
+ if (pokemon.species.forme.startsWith('Mega') || pokemon.species.forme.startsWith('Ultra')) {
+ this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
+ }
+ },
+ onAfterMega(pokemon) {
+ this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
+ const species = pokemon.species;
+ let buf = `${species.name} `;
+ buf += ``;
+ buf += `
`;
+ if (species.types[1]) {
+ buf += `
`;
+ }
+ buf += ` `;
+ buf += `${species.abilities[0]}`;
+ const stats = [];
+ let stat: StatID;
+ for (stat in species.baseStats) {
+ const statNames: { [k in StatID]: string } = { hp: "HP", atk: "Atk", def: "Def", spa: "SpA", spd: "SpD", spe: "Spe" };
+ stats.push(`${statNames[stat]}
${species.baseStats[stat]}`);
+ }
+ buf += `${stats.join(' ')}`;
+ buf += ``;
+ this.add(`raw|`);
+ },
+ },
+};
diff --git a/data/mods/gen6megasrevisited/scripts.ts b/data/mods/gen6megasrevisited/scripts.ts
new file mode 100644
index 0000000000..fe185cc6a0
--- /dev/null
+++ b/data/mods/gen6megasrevisited/scripts.ts
@@ -0,0 +1,237 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 6,
+ inherit: 'gen6',
+ actions: {
+ // for parental bond
+ modifyDamage(
+ baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false
+ ) {
+ const tr = this.battle.trunc;
+ if (!move.type) move.type = '???';
+ const type = move.type;
+ baseDamage += 2;
+ if (move.spreadHit) {
+ // multi-target modifier (doubles only)
+ const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
+ this.battle.debug(`Spread modifier: ${spreadModifier}`);
+ baseDamage = this.battle.modify(baseDamage, spreadModifier);
+ } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
+ // Parental Bond modifier
+ const bondModifier = 0.25;
+ this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
+ baseDamage = this.battle.modify(baseDamage, bondModifier);
+ }
+ baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
+ const isCrit = target.getMoveHitData(move).crit;
+ if (isCrit) {
+ baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
+ }
+ baseDamage = this.battle.randomizer(baseDamage);
+ if (type !== '???') {
+ let stab: number | [number, number] = 1;
+ const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
+ if (isSTAB) {
+ stab = 1.5;
+ }
+ if (pokemon.terastallized === 'Stellar') {
+ if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
+ stab = isSTAB ? 2 : [4915, 4096];
+ move.stellarBoosted = true;
+ if (pokemon.species.name !== 'Terapagos-Stellar') {
+ pokemon.stellarBoostedTypes.push(type);
+ }
+ }
+ } else {
+ if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
+ stab = 2;
+ }
+ stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
+ }
+ baseDamage = this.battle.modify(baseDamage, stab);
+ }
+ let typeMod = target.runEffectiveness(move);
+ typeMod = this.battle.clampIntRange(typeMod, -6, 6);
+ target.getMoveHitData(move).typeMod = typeMod;
+ if (typeMod > 0) {
+ if (!suppressMessages) this.battle.add('-supereffective', target);
+ for (let i = 0; i < typeMod; i++) {
+ baseDamage *= 2;
+ }
+ }
+ if (typeMod < 0) {
+ if (!suppressMessages) this.battle.add('-resisted', target);
+
+ for (let i = 0; i > typeMod; i--) {
+ baseDamage = tr(baseDamage / 2);
+ }
+ }
+ if (isCrit && !suppressMessages) this.battle.add('-crit', target);
+ if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+ // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
+ if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
+ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
+ baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ baseDamage = this.battle.modify(baseDamage, 0.25);
+ this.battle.add('-zbroken', target);
+ }
+ // Generation 6-7 moves the check for minimum 1 damage after the final modifier...
+ if (this.battle.gen !== 5 && !baseDamage) return 1;
+ // ...but 16-bit truncation happens even later, and can truncate to 0
+ return tr(baseDamage, 16);
+ },
+ },
+ pokemon: {
+ // for neutralizing gas
+ ignoringAbility() {
+ if (this.battle.gen >= 5 && !this.isActive) return true;
+ if (this.getAbility().flags['notransform'] && this.transformed) return true;
+ if (this.getAbility().flags['cantsuppress']) return false;
+ if (this.volatiles['gastroacid']) return true;
+ if (this.ability === ('neutralizinggas' as ID)) return false;
+ if (this.volatiles['neutralizinggas']) return true;
+ return false;
+ },
+ },
+ init() {
+ this.modData("Learnsets", "lucario").learnset.meteormash = ["6L1"];
+ this.modData("Learnsets", "lucario").learnset.machpunch = ["6L1"];
+ this.modData("Learnsets", "houndoom").learnset.toxicspikes = ["6L1"];
+ this.modData("Learnsets", "houndoom").learnset.venoshock = ["6L1"];
+ this.modData("Learnsets", "houndoom").learnset.hex = ["6L1"];
+ this.modData("Learnsets", "audino").learnset.discharge = ["6L1"];
+ this.modData("Learnsets", "audino").learnset.voltswitch = ["6L1"];
+ this.modData("Learnsets", "audino").learnset.chargebeam = ["6L1"];
+ this.modData("Learnsets", "audino").learnset.charge = ["6L1"];
+ this.modData("Learnsets", "audino").learnset.zapcannon = ["6L1"];
+ this.modData("Learnsets", "glalie").learnset.thunderfang = ["6L1"];
+ this.modData("Learnsets", "glalie").learnset.partingshot = ["6L1"];
+ this.modData("Learnsets", "glalie").learnset.boomburst = ["6L1"];
+ this.modData("Learnsets", "banette").learnset.ironhead = ["6L1"];
+ this.modData("Learnsets", "banette").learnset.metalsound = ["6L1"];
+ this.modData("Learnsets", "banette").learnset.powder = ["6L1"];
+ this.modData("Learnsets", "banette").learnset.stealthrock = ["6L1"];
+ this.modData("Learnsets", "banette").learnset.defog = ["6L1"];
+ this.modData("Learnsets", "venusaur").learnset.psychic = ["6L1"];
+ this.modData("Learnsets", "venusaur").learnset.calmmind = ["6L1"];
+ this.modData("Learnsets", "blastoise").learnset.moonblast = ["6L1"];
+ this.modData("Learnsets", "blastoise").learnset.mistyterrain = ["6L1"];
+ this.modData("Learnsets", "blastoise").learnset.taunt = ["6L1"];
+ this.modData("Learnsets", "blastoise").learnset.drainingkiss = ["6L1"];
+ this.modData("Learnsets", "blastoise").learnset.dazzlinggleam = ["6L1"];
+ this.modData("Learnsets", "charizard").learnset.calmmind = ["6L1"];
+ this.modData("Learnsets", "charizard").learnset.hurricane = ["6L1"];
+ this.modData("Learnsets", "charizard").learnset.lavaplume = ["6L1"];
+ this.modData("Learnsets", "gengar").learnset.reflecttype = ["6L1"];
+ this.modData("Learnsets", "gengar").learnset.calmmind = ["6L1"];
+ this.modData("Learnsets", "alakazam").learnset.blizzard = ["6L1"];
+ this.modData("Learnsets", "alakazam").learnset.flashcannon = ["6L1"];
+ this.modData("Learnsets", "alakazam").learnset.icebeam = ["6L1"];
+ this.modData("Learnsets", "alakazam").learnset.hail = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.hail = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.megahorn = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.uturn = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.iceshard = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.iciclecrash = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.icebeam = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.blizzard = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.roost = ["6L1"];
+ this.modData("Learnsets", "pinsir").learnset.iciclespear = ["6L1"];
+ this.modData("Learnsets", "aerodactyl").learnset.powergem = ["6L1"];
+ this.modData("Learnsets", "aerodactyl").learnset.shadowball = ["6L1"];
+ this.modData("Learnsets", "aerodactyl").learnset.hurricane = ["6L1"];
+ this.modData("Learnsets", "steelix").learnset.heatcrash = ["6L1"];
+ this.modData("Learnsets", "steelix").learnset.rapidspin = ["6L1"];
+ this.modData("Learnsets", "steelix").learnset.smackdown = ["6L1"];
+ this.modData("Learnsets", "altaria").learnset.scald = ["6L1"];
+ this.modData("Learnsets", "altaria").learnset.hydropump = ["6L1"];
+ this.modData("Learnsets", "altaria").learnset.thunder = ["6L1"];
+ this.modData("Learnsets", "sceptile").learnset.calmmind = ["6L1"];
+ this.modData("Learnsets", "sceptile").learnset.sludgewave = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.sludgebomb = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.bulkup = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.toxicspikes = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.aquajet = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.gunkshot = ["6L1"];
+ this.modData("Learnsets", "swampert").learnset.poisonjab = ["6L1"];
+ this.modData("Learnsets", "pidgeot").learnset.focusblast = ["6L1"];
+ this.modData("Learnsets", "absol").learnset.closecombat = ["6L1"];
+ this.modData("Learnsets", "absol").learnset.moonblast = ["6L1"];
+ this.modData("Learnsets", "absol").learnset.moonlight = ["6L1"];
+ this.modData("Learnsets", "medicham").learnset.aurasphere = ["6L1"];
+ this.modData("Learnsets", "medicham").learnset.thunderbolt = ["6L1"];
+ this.modData("Learnsets", "medicham").learnset.closecombat = ["6L1"];
+ this.modData("Learnsets", "medicham").learnset.gunkshot = ["6L1"];
+ this.modData("Learnsets", "medicham").learnset.healingwish = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.earthquake = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.stoneedge = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.rockslide = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.smackdown = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.stealthrock = ["6L1"];
+ this.modData("Learnsets", "beedrill").learnset.diamondstorm = ["6L1"];
+ this.modData("Learnsets", "mawile").learnset.firepunch = ["6L1"];
+ this.modData("Learnsets", "mawile").learnset.rockslide = ["6L1"];
+ this.modData("Learnsets", "mawile").learnset.slackoff = ["6L1"];
+ this.modData("Learnsets", "camerupt").learnset.morningsun = ["6L1"];
+ this.modData("Learnsets", "abomasnow").learnset.spikyshield = ["6L1"];
+ this.modData("Learnsets", "abomasnow").learnset.earthpower = ["6L1"];
+ this.modData("Learnsets", "abomasnow").learnset.hornleech = ["6L1"];
+ this.modData("Learnsets", "gallade").learnset.sacredsword = ["6L1"];
+ this.modData("Learnsets", "gallade").learnset.machpunch = ["6L1"];
+ this.modData('Moves', 'aerialace').flags.slicing = 1;
+ this.modData('Moves', 'aircutter').flags.slicing = 1;
+ this.modData('Moves', 'airslash').flags.slicing = 1;
+ this.modData('Moves', 'behemothblade').flags.slicing = 1;
+ this.modData('Moves', 'crosspoison').flags.slicing = 1;
+ this.modData('Moves', 'cut').flags.slicing = 1;
+ this.modData('Moves', 'furycutter').flags.slicing = 1;
+ this.modData('Moves', 'nightslash').flags.slicing = 1;
+ this.modData('Moves', 'psychocut').flags.slicing = 1;
+ this.modData('Moves', 'razorleaf').flags.slicing = 1;
+ this.modData('Moves', 'razorshell').flags.slicing = 1;
+ this.modData('Moves', 'sacredsword').flags.slicing = 1;
+ this.modData('Moves', 'slash').flags.slicing = 1;
+ this.modData('Moves', 'solarblade').flags.slicing = 1;
+ this.modData('Moves', 'xscissor').flags.slicing = 1;
+ this.modData("Learnsets", "ampharos").learnset.waterpulse = ["6L1"];
+ this.modData("Learnsets", "ampharos").learnset.aurasphere = ["6L1"];
+ this.modData("Learnsets", "ampharos").learnset.darkpulse = ["6L1"];
+ this.modData("Learnsets", "ampharos").learnset.defog = ["6L1"];
+ this.modData("Learnsets", "ampharos").learnset.slackoff = ["6L1"];
+ this.modData("Learnsets", "heracross").learnset.healorder = ["6L1"];
+ this.modData("Learnsets", "heracross").learnset.circlethrow = ["6L1"];
+ this.modData("Learnsets", "heracross").learnset.spikes = ["6L1"];
+ this.modData("Learnsets", "heracross").learnset.icepunch = ["6L1"];
+ this.modData("Learnsets", "sharpedo").learnset.thunder = ["6L1"];
+ this.modData("Learnsets", "gardevoir").learnset.rapidspin = ["6L1"];
+ this.modData("Learnsets", "gardevoir").learnset.mysticalfire = ["6L1"];
+ this.modData("Learnsets", "aggron").learnset.voltswitch = ["6L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.milkdrink = ["6L1"];
+ this.modData("Learnsets", "salamence").learnset.hurricane = ["6L1"];
+ this.modData("Learnsets", "salamence").learnset.airslash = ["6L1"];
+ this.modData("Learnsets", "salamence").learnset.ironhead = ["6L1"];
+ this.modData("Learnsets", "tyranitar").learnset.wildcharge = ["6L1"];
+ this.modData("Learnsets", "tyranitar").learnset.waterfall = ["6L1"];
+ this.modData("Learnsets", "diancie").learnset.spikyshield = ["6L1"];
+ this.modData("Learnsets", "blaziken").learnset.uturn = ["6L1"];
+ this.modData("Learnsets", "blaziken").learnset.spikes = ["6L1"];
+ this.modData("Learnsets", "blaziken").learnset.roost = ["6L1"];
+ this.modData("Learnsets", "blaziken").learnset.closecombat = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.extremespeed = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.sludgewave = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.swordsdance = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.uturn = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.closecombat = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.drainpunch = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.machpunch = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.scald = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.surf = ["6L1"];
+ this.modData("Learnsets", "mewtwo").learnset.hydropump = ["6L1"];
+ this.modData("Learnsets", "rayquaza").learnset.coil = ["6L1"];
+ this.modData("Learnsets", "rayquaza").learnset.defog = ["6L1"];
+ },
+};
diff --git a/data/mods/sixbysix/formats-data.ts b/data/mods/sixbysix/formats-data.ts
deleted file mode 100644
index 40e510453d..0000000000
--- a/data/mods/sixbysix/formats-data.ts
+++ /dev/null
@@ -1,113 +0,0 @@
-export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
- kingdraclassic: {
- tier: "OU",
- },
- kingdrabrinepool: {
- tier: "OU",
- },
- kingdradruid: {
- tier: "OU",
- },
- kingdrabard: {
- tier: "OU",
- },
- kingdragourmet: {
- tier: "OU",
- },
- kingdraancient: {
- tier: "OU",
- },
- nidoqueenclassic: {
- tier: "OU",
- },
- nidoqueenerudite: {
- tier: "OU",
- },
- nidoqueenvolcanic: {
- tier: "OU",
- },
- nidoqueenrosegold: {
- tier: "OU",
- },
- nidoqueenshaman: {
- tier: "OU",
- },
- nidoqueenjasper: {
- tier: "OU",
- },
- bisharpcenturion: {
- tier: "OU",
- },
- bisharpsavage: {
- tier: "OU",
- },
- bisharpronin: {
- tier: "OU",
- },
- bisharpmantis: {
- tier: "OU",
- },
- bisharprevenant: {
- tier: "OU",
- },
- bisharpassassin: {
- tier: "OU",
- },
- corviknightthunderbird: {
- tier: "OU",
- },
- corviknightgenie: {
- tier: "OU",
- },
- corviknightyeti: {
- tier: "OU",
- },
- corviknightanalytical: {
- tier: "OU",
- },
- corviknightmartian: {
- tier: "OU",
- },
- corviknightfalcon: {
- tier: "OU",
- },
- krookodileinfernal: {
- tier: "OU",
- },
- krookodileabyssal: {
- tier: "OU",
- },
- krookodilewetlander: {
- tier: "OU",
- },
- krookodilecavedweller: {
- tier: "OU",
- },
- krookodilecliffside: {
- tier: "OU",
- },
- krookodilequantum: {
- tier: "OU",
- },
- ogerponmuerta: {
- tier: "OU",
- },
- ogerponeaster: {
- tier: "OU",
- },
- ogerponankh: {
- tier: "OU",
- },
- ogerponeid: {
- tier: "OU",
- },
- ogerponvessel: {
- tier: "OU",
- },
- ogerponkitsune: {
- tier: "OU",
- },
- ogerpontealtera: {
- tier: "Illegal",
- },
-};
diff --git a/data/mods/sixbysix/items.ts b/data/mods/sixbysix/items.ts
deleted file mode 100644
index df1a3f90c0..0000000000
--- a/data/mods/sixbysix/items.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- cornerstonemask: {
- name: "Cornerstone Mask",
- spritenum: 758,
- fling: {
- basePower: 60,
- },
- num: 2406,
- gen: 9,
- desc: "No competitive use.",
- },
- hearthflamemask: {
- name: "Hearthflame Mask",
- spritenum: 760,
- fling: {
- basePower: 60,
- },
- desc: "No competitive use.",
- num: 2408,
- gen: 9,
- },
- wellspringmask: {
- name: "Wellspring Mask",
- spritenum: 759,
- fling: {
- basePower: 60,
- },
- desc: "No competitive use.",
- num: 2407,
- gen: 9,
- },
-};
diff --git a/data/mods/sixbysix/learnsets.ts b/data/mods/sixbysix/learnsets.ts
deleted file mode 100644
index 593627bd62..0000000000
--- a/data/mods/sixbysix/learnsets.ts
+++ /dev/null
@@ -1,2580 +0,0 @@
-export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = {
- kingdraclassic: {
- learnset: {
- aquajet: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- dragonhammer: ["9L1"],
- dragontail: ["9L1"],
- facade: ["9L1"],
- flipturn: ["9L1"],
- knockoff: ["9L1"],
- liquidation: ["9L1"],
- outrage: ["9L1"],
- waterfall: ["9L1"],
- wavecrash: ["9L1"],
- breakingswipe: ["9L1"],
- dragonrush: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- scaleshot: ["9L1"],
- takedown: ["9L1"],
- blizzard: ["9L1"],
- clearsmog: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- hydropump: ["9L1"],
- icebeam: ["9L1"],
- scald: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- aurorabeam: ["9L1"],
- bubblebeam: ["9L1"],
- chillingwater: ["9L1"],
- dragonbreath: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- muddywater: ["9L1"],
- swift: ["9L1"],
- twister: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- agility: ["9L1"],
- disable: ["9L1"],
- dragondance: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- dragoncheer: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- kingdrabrinepool: {
- learnset: {
- gunkshot: ["9L1"],
- mortalspin: ["9L1"],
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- toxic: ["9L1"],
- watershuriken: ["9L1"],
- acid: ["9L1"],
- acidspray: ["9L1"],
- aquaring: ["9L1"],
- sludge: ["9L1"],
- venoshock: ["9L1"],
- aquajet: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- dragontail: ["9L1"],
- facade: ["9L1"],
- flipturn: ["9L1"],
- knockoff: ["9L1"],
- liquidation: ["9L1"],
- waterfall: ["9L1"],
- wavecrash: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- clearsmog: ["9L1"],
- hydropump: ["9L1"],
- scald: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- bubblebeam: ["9L1"],
- chillingwater: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- muddywater: ["9L1"],
- swift: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- agility: ["9L1"],
- disable: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- nidoqueenclassic: {
- learnset: {
- aquatail: ["9L1"],
- barbbarrage: ["9L1"],
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- counter: ["9L1"],
- crunch: ["9L1"],
- dragontail: ["9L1"],
- drillrun: ["9L1"],
- earthquake: ["9L1"],
- facade: ["9L1"],
- firepunch: ["9L1"],
- focuspunch: ["9L1"],
- highhorsepower: ["9L1"],
- icepunch: ["9L1"],
- outrage: ["9L1"],
- poisonjab: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- seismictoss: ["9L1"],
- shadowclaw: ["9L1"],
- smackdown: ["9L1"],
- stoneedge: ["9L1"],
- suckerpunch: ["9L1"],
- superfang: ["9L1"],
- superpower: ["9L1"],
- throatchop: ["9L1"],
- thunderpunch: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- cut: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- dynamicpunch: ["9L1"],
- fissure: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- headbutt: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- poisonfang: ["9L1"],
- poisonsting: ["9L1"],
- poisontail: ["9L1"],
- rocksmash: ["9L1"],
- rocktomb: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- blizzard: ["9L1"],
- dragonpulse: ["9L1"],
- earthpower: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- hex: ["9L1"],
- icebeam: ["9L1"],
- shadowball: ["9L1"],
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- bubblebeam: ["9L1"],
- echoedvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- incinerate: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- venoshock: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- disable: ["9L1"],
- honeclaws: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- slackoff: ["9L1"],
- sleeptalk: ["9L1"],
- spikes: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- toxicspikes: ["9L1"],
- wish: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- quash: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- swagger: ["9L1"],
- tailwhip: ["9L1"],
- torment: ["9L1"],
- },
- },
- nidoqueenerudite: {
- learnset: {
- calmmind: ["9L1"],
- chillyreception: ["9L1"],
- expandingforce: ["9L1"],
- futuresight: ["9L1"],
- psychic: ["9L1"],
- psychicnoise: ["9L1"],
- psyshock: ["9L1"],
- trickroom: ["9L1"],
- zenheadbutt: ["9L1"],
- amnesia: ["9L1"],
- confusion: ["9L1"],
- healpulse: ["9L1"],
- imprison: ["9L1"],
- magicroom: ["9L1"],
- psybeam: ["9L1"],
- psychicterrain: ["9L1"],
- skillswap: ["9L1"],
- wonderroom: ["9L1"],
- aquatail: ["9L1"],
- bodyslam: ["9L1"],
- counter: ["9L1"],
- crunch: ["9L1"],
- dragontail: ["9L1"],
- drillrun: ["9L1"],
- earthquake: ["9L1"],
- facade: ["9L1"],
- firepunch: ["9L1"],
- highhorsepower: ["9L1"],
- icepunch: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- seismictoss: ["9L1"],
- shadowclaw: ["9L1"],
- smackdown: ["9L1"],
- stoneedge: ["9L1"],
- superfang: ["9L1"],
- throatchop: ["9L1"],
- thunderpunch: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- cut: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- fissure: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- headbutt: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- rocksmash: ["9L1"],
- rocktomb: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- blizzard: ["9L1"],
- dragonpulse: ["9L1"],
- earthpower: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- icebeam: ["9L1"],
- shadowball: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- bubblebeam: ["9L1"],
- echoedvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- incinerate: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- disable: ["9L1"],
- honeclaws: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- wish: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- tailwhip: ["9L1"],
- },
- },
- bisharpcenturion: {
- learnset: {
- bodypress: ["9L1"],
- brickbreak: ["9L1"],
- bulletpunch: ["9L1"],
- drainpunch: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- hammerarm: ["9L1"],
- ironhead: ["9L1"],
- lowkick: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- shadowclaw: ["9L1"],
- superpower: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- dynamicpunch: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- headbutt: ["9L1"],
- lowsweep: ["9L1"],
- metalburst: ["9L1"],
- metalclaw: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- upperhand: ["9L1"],
- airslash: ["9L1"],
- flashcannon: ["9L1"],
- focusblast: ["9L1"],
- grassknot: ["9L1"],
- steelbeam: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- bulkup: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- irondefense: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- swordsdance: ["9L1"],
- taunt: ["9L1"],
- thunderwave: ["9L1"],
- coaching: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- metalsound: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- bisharpsavage: {
- learnset: {
- knockoff: ["9L1"],
- powerwhip: ["9L1"],
- leafblade: ["9L1"],
- bulletseed: ["9L1"],
- grassyglide: ["9L1"],
- seedbomb: ["9L1"],
- leechseed: ["9L1"],
- vinewhip: ["9L1"],
- branchpoke: ["9L1"],
- leafage: ["9L1"],
- megadrain: ["9L1"],
- absorb: ["9L1"],
- grassyterrain: ["9L1"],
- razorleaf: ["9L1"],
- bodypress: ["9L1"],
- brickbreak: ["9L1"],
- bulletpunch: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- ironhead: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- superpower: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- dynamicpunch: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- headbutt: ["9L1"],
- lowsweep: ["9L1"],
- metalburst: ["9L1"],
- metalclaw: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- flashcannon: ["9L1"],
- grassknot: ["9L1"],
- steelbeam: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- bulkup: ["9L1"],
- curse: ["9L1"],
- irondefense: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- thunderwave: ["9L1"],
- coaching: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- metalsound: ["9L1"],
- sandstorm: ["9L1"],
- sunnyday: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- corviknightthunderbird: {
- learnset: {
- acrobatics: ["9L1"],
- bodypress: ["9L1"],
- bodyslam: ["9L1"],
- bravebird: ["9L1"],
- doubleedge: ["9L1"],
- drillpeck: ["9L1"],
- facade: ["9L1"],
- supercellslam: ["9L1"],
- uturn: ["9L1"],
- aerialace: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- furyattack: ["9L1"],
- gigaimpact: ["9L1"],
- peck: ["9L1"],
- pluck: ["9L1"],
- powertrip: ["9L1"],
- skyattack: ["9L1"],
- spark: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- wildcharge: ["9L1"],
- airslash: ["9L1"],
- discharge: ["9L1"],
- heatwave: ["9L1"],
- hurricane: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- voltswitch: ["9L1"],
- aircutter: ["9L1"],
- chargebeam: ["9L1"],
- electroball: ["9L1"],
- hyperbeam: ["9L1"],
- swift: ["9L1"],
- thundershock: ["9L1"],
- zapcannon: ["9L1"],
- agility: ["9L1"],
- curse: ["9L1"],
- defog: ["9L1"],
- honeclaws: ["9L1"],
- irondefense: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roost: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- tailwind: ["9L1"],
- electricterrain: ["9L1"],
- endure: ["9L1"],
- faketears: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- sandattack: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- corviknightgenie: {
- learnset: {
- calmmind: ["9L1"],
- earthpower: ["9L1"],
- earthquake: ["9L1"],
- powergem: ["9L1"],
- sandsearstorm: ["9L1"],
- scorchingsands: ["9L1"],
- stealthrock: ["9L1"],
- dig: ["9L1"],
- sandstorm: ["9L1"],
- acrobatics: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- facade: ["9L1"],
- uturn: ["9L1"],
- aerialace: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- furyattack: ["9L1"],
- gigaimpact: ["9L1"],
- peck: ["9L1"],
- pluck: ["9L1"],
- powertrip: ["9L1"],
- skyattack: ["9L1"],
- spark: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- heatwave: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- voltswitch: ["9L1"],
- aircutter: ["9L1"],
- chargebeam: ["9L1"],
- electroball: ["9L1"],
- hyperbeam: ["9L1"],
- swift: ["9L1"],
- thundershock: ["9L1"],
- agility: ["9L1"],
- curse: ["9L1"],
- defog: ["9L1"],
- honeclaws: ["9L1"],
- irondefense: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- tailwind: ["9L1"],
- electricterrain: ["9L1"],
- endure: ["9L1"],
- faketears: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- sandattack: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- krookodileinfernal: {
- learnset: {
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- counter: ["9L1"],
- crunch: ["9L1"],
- doubleedge: ["9L1"],
- dragonclaw: ["9L1"],
- dragontail: ["9L1"],
- endeavor: ["9L1"],
- facade: ["9L1"],
- firefang: ["9L1"],
- firelash: ["9L1"],
- flamecharge: ["9L1"],
- flareblitz: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- gunkshot: ["9L1"],
- knockoff: ["9L1"],
- lashout: ["9L1"],
- outrage: ["9L1"],
- shadowclaw: ["9L1"],
- throatchop: ["9L1"],
- aerialace: ["9L1"],
- bite: ["9L1"],
- breakingswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- powertrip: ["9L1"],
- scaleshot: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- darkpulse: ["9L1"],
- dragonpulse: ["9L1"],
- eruption: ["9L1"],
- fierywrath: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- heatwave: ["9L1"],
- magmastorm: ["9L1"],
- overheat: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- burningjealousy: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- inferno: ["9L1"],
- snarl: ["9L1"],
- curse: ["9L1"],
- encore: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- willowisp: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- memento: ["9L1"],
- sunnyday: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- torment: ["9L1"],
- },
- },
- krookodileabyssal: {
- learnset: {
- dragondance: ["9L1"],
- earthquake: ["9L1"],
- hydropump: ["9L1"],
- liquidation: ["9L1"],
- stoneedge: ["9L1"],
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- counter: ["9L1"],
- crunch: ["9L1"],
- doubleedge: ["9L1"],
- dragonclaw: ["9L1"],
- dragontail: ["9L1"],
- endeavor: ["9L1"],
- facade: ["9L1"],
- flamecharge: ["9L1"],
- flareblitz: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- gunkshot: ["9L1"],
- knockoff: ["9L1"],
- lashout: ["9L1"],
- outrage: ["9L1"],
- shadowclaw: ["9L1"],
- throatchop: ["9L1"],
- aerialace: ["9L1"],
- bite: ["9L1"],
- breakingswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- powertrip: ["9L1"],
- scaleshot: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- dragonpulse: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- burningjealousy: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- inferno: ["9L1"],
- snarl: ["9L1"],
- curse: ["9L1"],
- encore: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- willowisp: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- memento: ["9L1"],
- sunnyday: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- torment: ["9L1"],
- },
- },
- ogerponmuerta: {
- learnset: {
- facade: ["9L1"],
- knockoff: ["9L1"],
- lashout: ["9L1"],
- poltergeist: ["9L1"],
- quickattack: ["9L1"],
- shadowclaw: ["9L1"],
- shadowsneak: ["9L1"],
- throatchop: ["9L1"],
- uturn: ["9L1"],
- astonish: ["9L1"],
- falseswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- phantomforce: ["9L1"],
- retaliate: ["9L1"],
- rocktomb: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- fleurcannon: ["9L1"],
- hex: ["9L1"],
- nightshade: ["9L1"],
- shadowball: ["9L1"],
- taunt: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- disarmingvoice: ["9L1"],
- icywind: ["9L1"],
- hyperbeam: ["9L1"],
- batonpass: ["9L1"],
- curse: ["9L1"],
- destinybond: ["9L1"],
- disable: ["9L1"],
- perishsong: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- thunderwave: ["9L1"],
- trick: ["9L1"],
- trickroom: ["9L1"],
- willowisp: ["9L1"],
- babydolleyes: ["9L1"],
- charm: ["9L1"],
- confuseray: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- magicroom: ["9L1"],
- metronome: ["9L1"],
- mistyterrain: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- },
- },
- ogerponeaster: {
- learnset: {
- bodyslam: ["9L1"],
- calmmind: ["9L1"],
- hypervoice: ["9L1"],
- moonblast: ["9L1"],
- mysticalfire: ["9L1"],
- playrough: ["9L1"],
- softboiled: ["9L1"],
- springtidestorm: ["9L1"],
- stealthrock: ["9L1"],
- aromaticmist: ["9L1"],
- celebrate: ["9L1"],
- confide: ["9L1"],
- covet: ["9L1"],
- decorate: ["9L1"],
- feint: ["9L1"],
- playnice: ["9L1"],
- safeguard: ["9L1"],
- snore: ["9L1"],
- stuffcheeks: ["9L1"],
- sweetkiss: ["9L1"],
- uproar: ["9L1"],
- facade: ["9L1"],
- knockoff: ["9L1"],
- quickattack: ["9L1"],
- throatchop: ["9L1"],
- uturn: ["9L1"],
- falseswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- phantomforce: ["9L1"],
- retaliate: ["9L1"],
- rocktomb: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- dazzlinggleam: ["9L1"],
- drainingkiss: ["9L1"],
- taunt: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- disarmingvoice: ["9L1"],
- icywind: ["9L1"],
- hyperbeam: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- thunderwave: ["9L1"],
- trick: ["9L1"],
- babydolleyes: ["9L1"],
- charm: ["9L1"],
- confuseray: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- metronome: ["9L1"],
- mistyterrain: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- },
- },
- ogerponankh: {
- learnset: {
- swordsdance: ["9L1"],
- earthquake: ["9L1"],
- earthpower: ["9L1"],
- darkpulse: ["9L1"],
- stoneedge: ["9L1"],
- powergem: ["9L1"],
- facade: ["9L1"],
- knockoff: ["9L1"],
- poltergeist: ["9L1"],
- shadowclaw: ["9L1"],
- throatchop: ["9L1"],
- uturn: ["9L1"],
- astonish: ["9L1"],
- falseswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- phantomforce: ["9L1"],
- retaliate: ["9L1"],
- rocktomb: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- dazzlinggleam: ["9L1"],
- hex: ["9L1"],
- shadowball: ["9L1"],
- taunt: ["9L1"],
- terablast: ["9L1"],
- disarmingvoice: ["9L1"],
- icywind: ["9L1"],
- hyperbeam: ["9L1"],
- batonpass: ["9L1"],
- destinybond: ["9L1"],
- perishsong: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- trick: ["9L1"],
- babydolleyes: ["9L1"],
- charm: ["9L1"],
- confuseray: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- magicroom: ["9L1"],
- metronome: ["9L1"],
- mistyterrain: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- },
- },
- kingdradruid: {
- learnset: {
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- dragontail: ["9L1"],
- facade: ["9L1"],
- ironhead: ["9L1"],
- outrage: ["9L1"],
- scaleshot: ["9L1"],
- smartstrike: ["9L1"],
- breakingswipe: ["9L1"],
- dragonrush: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- hardpress: ["9L1"],
- metalburst: ["9L1"],
- steelwing: ["9L1"],
- takedown: ["9L1"],
- doomdesire: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- flamethrower: ["9L1"],
- flashcannon: ["9L1"],
- hydropump: ["9L1"],
- icebeam: ["9L1"],
- steelbeam: ["9L1"],
- tachyoncutter: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- aurorabeam: ["9L1"],
- bubblebeam: ["9L1"],
- chillingwater: ["9L1"],
- dragonbreath: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- swift: ["9L1"],
- twister: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- calmmind: ["9L1"],
- disable: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- substitute: ["9L1"],
- dragoncheer: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- metalsound: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- nidoqueenvolcanic: {
- learnset: {
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- crunch: ["9L1"],
- dragontail: ["9L1"],
- drillrun: ["9L1"],
- dynamicpunch: ["9L1"],
- earthquake: ["9L1"],
- facade: ["9L1"],
- firepunch: ["9L1"],
- flareblitz: ["9L1"],
- focuspunch: ["9L1"],
- headbutt: ["9L1"],
- heatcrash: ["9L1"],
- highhorsepower: ["9L1"],
- outrage: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- seismictoss: ["9L1"],
- stoneedge: ["9L1"],
- suckerpunch: ["9L1"],
- superfang: ["9L1"],
- superpower: ["9L1"],
- temperflare: ["9L1"],
- throatchop: ["9L1"],
- thunderpunch: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- counter: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- fissure: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- poisontail: ["9L1"],
- rocksmash: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- dragonpulse: ["9L1"],
- earthpower: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- icebeam: ["9L1"],
- lavaplume: ["9L1"],
- meteorbeam: ["9L1"],
- overheat: ["9L1"],
- powergem: ["9L1"],
- shadowball: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- echoedvoice: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- curse: ["9L1"],
- disable: ["9L1"],
- honeclaws: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- stealthrock: ["9L1"],
- spikes: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- willowisp: ["9L1"],
- wish: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- quash: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sleeptalk: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- swagger: ["9L1"],
- tailwhip: ["9L1"],
- torment: ["9L1"],
- },
- },
- bisharpronin: {
- learnset: {
- barbbarrage: ["9L1"],
- bodypress: ["9L1"],
- brickbreak: ["9L1"],
- drainpunch: ["9L1"],
- dynamicpunch: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- headbutt: ["9L1"],
- lowkick: ["9L1"],
- mortalspin: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- sacredsword: ["9L1"],
- shadowclaw: ["9L1"],
- uturn: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- crosspoison: ["9L1"],
- dig: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- lowsweep: ["9L1"],
- poisonsting: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- upperhand: ["9L1"],
- airslash: ["9L1"],
- focusblast: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- acid: ["9L1"],
- acidspray: ["9L1"],
- hyperbeam: ["9L1"],
- venoshock: ["9L1"],
- detect: ["9L1"],
- encore: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- toxicspikes: ["9L1"],
- coaching: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- poisongas: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- corviknightyeti: {
- learnset: {
- acrobatics: ["9L1"],
- bravebird: ["9L1"],
- doubleedge: ["9L1"],
- drillpeck: ["9L1"],
- dualwingbeat: ["9L1"],
- facade: ["9L1"],
- iceshard: ["9L1"],
- icespinner: ["9L1"],
- iciclespear: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- furyattack: ["9L1"],
- gigaimpact: ["9L1"],
- peck: ["9L1"],
- pluck: ["9L1"],
- skyattack: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- airslash: ["9L1"],
- bleakwindstorm: ["9L1"],
- blizzard: ["9L1"],
- hurricane: ["9L1"],
- icebeam: ["9L1"],
- terablast: ["9L1"],
- voltswitch: ["9L1"],
- weatherball: ["9L1"],
- aircutter: ["9L1"],
- chillingwater: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- powdersnow: ["9L1"],
- swift: ["9L1"],
- waterpulse: ["9L1"],
- curse: ["9L1"],
- defog: ["9L1"],
- encore: ["9L1"],
- haze: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roost: ["9L1"],
- substitute: ["9L1"],
- tailwind: ["9L1"],
- endure: ["9L1"],
- faketears: ["9L1"],
- leer: ["9L1"],
- mist: ["9L1"],
- sandattack: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- sleeptalk: ["9L1"],
- snowscape: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- krookodilewetlander: {
- learnset: {
- aquajet: ["9L1"],
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- bulletseed: ["9L1"],
- crunch: ["9L1"],
- doubleedge: ["9L1"],
- dragonclaw: ["9L1"],
- dragontail: ["9L1"],
- endeavor: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- gunkshot: ["9L1"],
- knockoff: ["9L1"],
- lashout: ["9L1"],
- leafblade: ["9L1"],
- liquidation: ["9L1"],
- rapidspin: ["9L1"],
- scaleshot: ["9L1"],
- waterfall: ["9L1"],
- wavecrash: ["9L1"],
- woodhammer: ["9L1"],
- aerialace: ["9L1"],
- bite: ["9L1"],
- breakingswipe: ["9L1"],
- counter: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- dragonpulse: ["9L1"],
- gigadrain: ["9L1"],
- inferno: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- megadrain: ["9L1"],
- snarl: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- encore: ["9L1"],
- leechseed: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- strengthsap: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- synthesis: ["9L1"],
- taunt: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- torment: ["9L1"],
- },
- },
- krookodilecavedweller: {
- learnset: {
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- dragonclaw: ["9L1"],
- earthquake: ["9L1"],
- endeavor: ["9L1"],
- explosion: ["9L1"],
- facade: ["9L1"],
- firefang: ["9L1"],
- firelash: ["9L1"],
- flamecharge: ["9L1"],
- flareblitz: ["9L1"],
- knockoff: ["9L1"],
- rapidspin: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- scaleshot: ["9L1"],
- stoneedge: ["9L1"],
- aerialace: ["9L1"],
- breakingswipe: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- dragonpulse: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- heatwave: ["9L1"],
- inferno: ["9L1"],
- overheat: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- burningjealousy: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- curse: ["9L1"],
- encore: ["9L1"],
- lightscreen: ["9L1"],
- memento: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- willowisp: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- tarshot: ["9L1"],
- torment: ["9L1"],
- },
- },
- ogerponeid: {
- learnset: {
- knockoff: ["9L1"],
- liquidation: ["9L1"],
- rapidspin: ["9L1"],
- shadowclaw: ["9L1"],
- wavecrash: ["9L1"],
- astonish: ["9L1"],
- falseswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- lick: ["9L1"],
- retaliate: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- hex: ["9L1"],
- moonblast: ["9L1"],
- surf: ["9L1"],
- shadowball: ["9L1"],
- chillingwater: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- watergun: ["9L1"],
- waterpledge: ["9L1"],
- waterpulse: ["9L1"],
- batonpass: ["9L1"],
- healbell: ["9L1"],
- lunarblessing: ["9L1"],
- lunardance: ["9L1"],
- protect: ["9L1"],
- recover: ["9L1"],
- rest: ["9L1"],
- spikes: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- thunderwave: ["9L1"],
- toxic: ["9L1"],
- aquaring: ["9L1"],
- babydolleyes: ["9L1"],
- celebrate: ["9L1"],
- confuseray: ["9L1"],
- cosmicpower: ["9L1"],
- decorate: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- instruct: ["9L1"],
- lifedew: ["9L1"],
- magicroom: ["9L1"],
- metronome: ["9L1"],
- mistyterrain: ["9L1"],
- raindance: ["9L1"],
- sleeptalk: ["9L1"],
- stuffcheeks: ["9L1"],
- },
- },
- corviknightanalytical: {
- learnset: {
- acrobatics: ["9L1"],
- bodypress: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- facade: ["9L1"],
- supercellslam: ["9L1"],
- uturn: ["9L1"],
- zenheadbutt: ["9L1"],
- aerialace: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- furyattack: ["9L1"],
- gigaimpact: ["9L1"],
- peck: ["9L1"],
- pluck: ["9L1"],
- skyattack: ["9L1"],
- spark: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- wildcharge: ["9L1"],
- discharge: ["9L1"],
- heatwave: ["9L1"],
- psychic: ["9L1"],
- psyshock: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- voltswitch: ["9L1"],
- chargebeam: ["9L1"],
- electroball: ["9L1"],
- hyperbeam: ["9L1"],
- swift: ["9L1"],
- thundershock: ["9L1"],
- psybeam: ["9L1"],
- zapcannon: ["9L1"],
- agility: ["9L1"],
- calmmind: ["9L1"],
- curse: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roost: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- electricterrain: ["9L1"],
- endure: ["9L1"],
- faketears: ["9L1"],
- leer: ["9L1"],
- psychicterrain: ["9L1"],
- raindance: ["9L1"],
- sandattack: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- bisharpmantis: {
- learnset: {
- ceaselessedge: ["9L1"],
- facade: ["9L1"],
- bitterblade: ["9L1"],
- firstimpression: ["9L1"],
- foulplay: ["9L1"],
- leechlife: ["9L1"],
- lowkick: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- shadowclaw: ["9L1"],
- suckerpunch: ["9L1"],
- knockoff: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- solarblade: ["9L1"],
- darkpulse: ["9L1"],
- bugbuzz: ["9L1"],
- snarl: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- agility: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- swordsdance: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- stringshot: ["9L1"],
- sunnyday: ["9L1"],
- scaryface: ["9L1"],
- spite: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- nidoqueenrosegold: {
- learnset: {
- aquatail: ["9L1"],
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- crunch: ["9L1"],
- dragontail: ["9L1"],
- drillrun: ["9L1"],
- dynamicpunch: ["9L1"],
- facade: ["9L1"],
- firepunch: ["9L1"],
- focuspunch: ["9L1"],
- headbutt: ["9L1"],
- icepunch: ["9L1"],
- poisonjab: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- seismictoss: ["9L1"],
- shadowclaw: ["9L1"],
- stoneedge: ["9L1"],
- suckerpunch: ["9L1"],
- superfang: ["9L1"],
- superpower: ["9L1"],
- throatchop: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- counter: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- poisonfang: ["9L1"],
- poisonsting: ["9L1"],
- poisontail: ["9L1"],
- rocksmash: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- blizzard: ["9L1"],
- dragonpulse: ["9L1"],
- energyball: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- gigadrain: ["9L1"],
- hex: ["9L1"],
- leafstorm: ["9L1"],
- shadowball: ["9L1"],
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- earthpower: ["9L1"],
- absorb: ["9L1"],
- bubblebeam: ["9L1"],
- echoedvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- incinerate: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- venoshock: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- disable: ["9L1"],
- honeclaws: ["9L1"],
- leechseed: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- slackoff: ["9L1"],
- spikes: ["9L1"],
- spikyshield: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- toxicspikes: ["9L1"],
- wish: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- quash: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sleeptalk: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- swagger: ["9L1"],
- tailwhip: ["9L1"],
- torment: ["9L1"],
- },
- },
- kingdrabard: {
- learnset: {
- aquajet: ["9L1"],
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- facade: ["9L1"],
- flipturn: ["9L1"],
- knockoff: ["9L1"],
- waterfall: ["9L1"],
- liquidation: ["9L1"],
- spiritbreak: ["9L1"],
- breakingswipe: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- alluringvoice: ["9L1"],
- blizzard: ["9L1"],
- clearsmog: ["9L1"],
- hydropump: ["9L1"],
- icebeam: ["9L1"],
- moonblast: ["9L1"],
- psychicnoise: ["9L1"],
- scald: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- aurorabeam: ["9L1"],
- bubblebeam: ["9L1"],
- chillingwater: ["9L1"],
- dragonbreath: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- muddywater: ["9L1"],
- swift: ["9L1"],
- twister: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- agility: ["9L1"],
- disable: ["9L1"],
- moonlight: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- substitute: ["9L1"],
- dragoncheer: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- kingdragourmet: {
- learnset: {
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- dragontail: ["9L1"],
- facade: ["9L1"],
- fakeout: ["9L1"],
- flipturn: ["9L1"],
- knockoff: ["9L1"],
- orderup: ["9L1"],
- outrage: ["9L1"],
- rapidspin: ["9L1"],
- scaleshot: ["9L1"],
- breakingswipe: ["9L1"],
- dragonrush: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- clearsmog: ["9L1"],
- dracometeor: ["9L1"],
- terablast: ["9L1"],
- chillingwater: ["9L1"],
- dragonbreath: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- swift: ["9L1"],
- twister: ["9L1"],
- whirlpool: ["9L1"],
- banefulbunker: ["9L1"],
- defog: ["9L1"],
- disable: ["9L1"],
- glare: ["9L1"],
- healbell: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- substitute: ["9L1"],
- toxic: ["9L1"],
- whirlwind: ["9L1"],
- wish: ["9L1"],
- dragoncheer: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- nidoqueenshaman: {
- learnset: {
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- drillrun: ["9L1"],
- dynamicpunch: ["9L1"],
- earthquake: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- headbutt: ["9L1"],
- poisonjab: ["9L1"],
- poltergeist: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- seismictoss: ["9L1"],
- shadowclaw: ["9L1"],
- shadowsneak: ["9L1"],
- superfang: ["9L1"],
- superpower: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- fissure: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- lick: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- poisonfang: ["9L1"],
- poisonsting: ["9L1"],
- poisontail: ["9L1"],
- rocksmash: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- earthpower: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- hex: ["9L1"],
- icebeam: ["9L1"],
- shadowball: ["9L1"],
- sludgebomb: ["9L1"],
- sludgewave: ["9L1"],
- surf: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- bubblebeam: ["9L1"],
- echoedvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- incinerate: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- venoshock: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- disable: ["9L1"],
- honeclaws: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- slackoff: ["9L1"],
- spikes: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- toxicspikes: ["9L1"],
- willowisp: ["9L1"],
- wish: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- quash: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sleeptalk: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- swagger: ["9L1"],
- tailwhip: ["9L1"],
- torment: ["9L1"],
- },
- },
- bisharprevenant: {
- learnset: {
- behemothblade: ["9L1"],
- brickbreak: ["9L1"],
- drainpunch: ["9L1"],
- facade: ["9L1"],
- foulplay: ["9L1"],
- headbutt: ["9L1"],
- ironhead: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- poltergeist: ["9L1"],
- sacredsword: ["9L1"],
- shadowclaw: ["9L1"],
- shadowsneak: ["9L1"],
- superpower: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- lowsweep: ["9L1"],
- metalburst: ["9L1"],
- metalclaw: ["9L1"],
- phantomforce: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- upperhand: ["9L1"],
- flashcannon: ["9L1"],
- focusblast: ["9L1"],
- hex: ["9L1"],
- nightshade: ["9L1"],
- shadowball: ["9L1"],
- steelbeam: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- irondefense: ["9L1"],
- protect: ["9L1"],
- recover: ["9L1"],
- rest: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- swordsdance: ["9L1"],
- thunderwave: ["9L1"],
- coaching: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- metalsound: ["9L1"],
- sandstorm: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- corviknightmartian: {
- learnset: {
- bodypress: ["9L1"],
- bodyslam: ["9L1"],
- ironhead: ["9L1"],
- zenheadbutt: ["9L1"],
- aerialace: ["9L1"],
- dualwingbeat: ["9L1"],
- fly: ["9L1"],
- gigaimpact: ["9L1"],
- gyroball: ["9L1"],
- hardpress: ["9L1"],
- psychocut: ["9L1"],
- takedown: ["9L1"],
- thunderbolt: ["9L1"],
- psychic: ["9L1"],
- doomdesire: ["9L1"],
- flashcannon: ["9L1"],
- psychicnoise: ["9L1"],
- steelbeam: ["9L1"],
- storedpower: ["9L1"],
- chargebeam: ["9L1"],
- hyperbeam: ["9L1"],
- swift: ["9L1"],
- psybeam: ["9L1"],
- calmmind: ["9L1"],
- defog: ["9L1"],
- irondefense: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- sleeptalk: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- teleport: ["9L1"],
- trickroom: ["9L1"],
- electricterrain: ["9L1"],
- endure: ["9L1"],
- gravity: ["9L1"],
- leer: ["9L1"],
- psychicterrain: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- skillswap: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- krookodilecliffside: {
- learnset: {
- bodyslam: ["9L1"],
- crunch: ["9L1"],
- doubleedge: ["9L1"],
- dragonclaw: ["9L1"],
- dragontail: ["9L1"],
- endeavor: ["9L1"],
- facade: ["9L1"],
- firefang: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- gunkshot: ["9L1"],
- knockoff: ["9L1"],
- powertrip: ["9L1"],
- scaleshot: ["9L1"],
- throatchop: ["9L1"],
- aerialace: ["9L1"],
- bite: ["9L1"],
- breakingswipe: ["9L1"],
- counter: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- darkpulse: ["9L1"],
- dracometeor: ["9L1"],
- dragonpulse: ["9L1"],
- flamethrower: ["9L1"],
- flashcannon: ["9L1"],
- focusblast: ["9L1"],
- inferno: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- burningjealousy: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- snarl: ["9L1"],
- curse: ["9L1"],
- defog: ["9L1"],
- encore: ["9L1"],
- memento: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- roost: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- torment: ["9L1"],
- },
- },
- ogerponvessel: {
- learnset: {
- axekick: ["9L1"],
- explosion: ["9L1"],
- knockoff: ["9L1"],
- leechlife: ["9L1"],
- lunge: ["9L1"],
- rocktomb: ["9L1"],
- sacredsword: ["9L1"],
- thunderouskick: ["9L1"],
- uturn: ["9L1"],
- gigaimpact: ["9L1"],
- highjumpkick: ["9L1"],
- retaliate: ["9L1"],
- skittersmack: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- terablast: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- defog: ["9L1"],
- destinybond: ["9L1"],
- disable: ["9L1"],
- encore: ["9L1"],
- lightscreen: ["9L1"],
- perishsong: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- spikes: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- trick: ["9L1"],
- endure: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- metronome: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- topsyturvy: ["9L1"],
- },
- },
- kingdraancient: {
- learnset: {
- bodyslam: ["9L1"],
- doubleedge: ["9L1"],
- facade: ["9L1"],
- flareblitz: ["9L1"],
- flipturn: ["9L1"],
- knockoff: ["9L1"],
- liquidation: ["9L1"],
- outrage: ["9L1"],
- scaleshot: ["9L1"],
- seedbomb: ["9L1"],
- breakingswipe: ["9L1"],
- dragonrush: ["9L1"],
- flail: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- clearsmog: ["9L1"],
- energyball: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- gigadrain: ["9L1"],
- hydropump: ["9L1"],
- leafstorm: ["9L1"],
- overheat: ["9L1"],
- scald: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- aurorabeam: ["9L1"],
- bubblebeam: ["9L1"],
- chillingwater: ["9L1"],
- dragonbreath: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- muddywater: ["9L1"],
- swift: ["9L1"],
- twister: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- agility: ["9L1"],
- disable: ["9L1"],
- leechseed: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- substitute: ["9L1"],
- synthesis: ["9L1"],
- dragoncheer: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- smokescreen: ["9L1"],
- snowscape: ["9L1"],
- splash: ["9L1"],
- yawn: ["9L1"],
- },
- },
- nidoqueenjasper: {
- learnset: {
- accelerock: ["9L1"],
- aquatail: ["9L1"],
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- crunch: ["9L1"],
- dragontail: ["9L1"],
- drillrun: ["9L1"],
- dynamicpunch: ["9L1"],
- earthquake: ["9L1"],
- facade: ["9L1"],
- firepunch: ["9L1"],
- focuspunch: ["9L1"],
- gunkshot: ["9L1"],
- headbutt: ["9L1"],
- highhorsepower: ["9L1"],
- icepunch: ["9L1"],
- outrage: ["9L1"],
- poisonjab: ["9L1"],
- rockblast: ["9L1"],
- rockslide: ["9L1"],
- rocktomb: ["9L1"],
- saltcure: ["9L1"],
- seismictoss: ["9L1"],
- shadowclaw: ["9L1"],
- stoneedge: ["9L1"],
- superfang: ["9L1"],
- superpower: ["9L1"],
- throatchop: ["9L1"],
- thunderpunch: ["9L1"],
- aerialace: ["9L1"],
- beatup: ["9L1"],
- bite: ["9L1"],
- bulldoze: ["9L1"],
- counter: ["9L1"],
- dig: ["9L1"],
- doublekick: ["9L1"],
- fissure: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- furyswipes: ["9L1"],
- gigaimpact: ["9L1"],
- horndrill: ["9L1"],
- irontail: ["9L1"],
- megakick: ["9L1"],
- payday: ["9L1"],
- poisonfang: ["9L1"],
- poisonsting: ["9L1"],
- poisontail: ["9L1"],
- rocksmash: ["9L1"],
- sandtomb: ["9L1"],
- scratch: ["9L1"],
- stompingtantrum: ["9L1"],
- strength: ["9L1"],
- tackle: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- blizzard: ["9L1"],
- dragonpulse: ["9L1"],
- earthpower: ["9L1"],
- fireblast: ["9L1"],
- flamethrower: ["9L1"],
- focusblast: ["9L1"],
- icebeam: ["9L1"],
- shadowball: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- thunder: ["9L1"],
- thunderbolt: ["9L1"],
- bubblebeam: ["9L1"],
- echoedvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- incinerate: ["9L1"],
- mudshot: ["9L1"],
- mudslap: ["9L1"],
- round: ["9L1"],
- shockwave: ["9L1"],
- snore: ["9L1"],
- uproar: ["9L1"],
- venoshock: ["9L1"],
- watergun: ["9L1"],
- waterpulse: ["9L1"],
- whirlpool: ["9L1"],
- curse: ["9L1"],
- disable: ["9L1"],
- glare: ["9L1"],
- honeclaws: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roar: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- toxic: ["9L1"],
- attract: ["9L1"],
- charm: ["9L1"],
- confide: ["9L1"],
- defensecurl: ["9L1"],
- doubleteam: ["9L1"],
- endure: ["9L1"],
- flatter: ["9L1"],
- focusenergy: ["9L1"],
- growl: ["9L1"],
- helpinghand: ["9L1"],
- mimic: ["9L1"],
- quash: ["9L1"],
- raindance: ["9L1"],
- sandstorm: ["9L1"],
- sleeptalk: ["9L1"],
- sunnyday: ["9L1"],
- supersonic: ["9L1"],
- swagger: ["9L1"],
- tailwhip: ["9L1"],
- torment: ["9L1"],
- },
- },
- bisharpassassin: {
- learnset: {
- bodypress: ["9L1"],
- brickbreak: ["9L1"],
- drainpunch: ["9L1"],
- dynamicpunch: ["9L1"],
- facade: ["9L1"],
- focuspunch: ["9L1"],
- foulplay: ["9L1"],
- hammerarm: ["9L1"],
- headbutt: ["9L1"],
- iceshard: ["9L1"],
- icespinner: ["9L1"],
- lowkick: ["9L1"],
- machpunch: ["9L1"],
- nightslash: ["9L1"],
- poisonjab: ["9L1"],
- sacredsword: ["9L1"],
- shadowclaw: ["9L1"],
- tripleaxel: ["9L1"],
- xscissor: ["9L1"],
- bulldoze: ["9L1"],
- dig: ["9L1"],
- falseswipe: ["9L1"],
- feint: ["9L1"],
- fling: ["9L1"],
- furycutter: ["9L1"],
- gigaimpact: ["9L1"],
- guillotine: ["9L1"],
- lowsweep: ["9L1"],
- metalburst: ["9L1"],
- metalclaw: ["9L1"],
- retaliate: ["9L1"],
- reversal: ["9L1"],
- scratch: ["9L1"],
- slash: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- upperhand: ["9L1"],
- blizzard: ["9L1"],
- focusblast: ["9L1"],
- grassknot: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- hyperbeam: ["9L1"],
- auroraveil: ["9L1"],
- curse: ["9L1"],
- detect: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- taunt: ["9L1"],
- coaching: ["9L1"],
- endure: ["9L1"],
- leer: ["9L1"],
- meanlook: ["9L1"],
- metalsound: ["9L1"],
- sandstorm: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- torment: ["9L1"],
- wideguard: ["9L1"],
- },
- },
- corviknightfalcon: {
- learnset: {
- acrobatics: ["9L1"],
- bodypress: ["9L1"],
- bodyslam: ["9L1"],
- bravebird: ["9L1"],
- closecombat: ["9L1"],
- doubleedge: ["9L1"],
- drillpeck: ["9L1"],
- dualwingbeat: ["9L1"],
- facade: ["9L1"],
- knockoff: ["9L1"],
- lowkick: ["9L1"],
- powertrip: ["9L1"],
- uturn: ["9L1"],
- wildcharge: ["9L1"],
- aerialace: ["9L1"],
- fly: ["9L1"],
- flyingpress: ["9L1"],
- furyattack: ["9L1"],
- gigaimpact: ["9L1"],
- highjumpkick: ["9L1"],
- peck: ["9L1"],
- pluck: ["9L1"],
- skyattack: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- airslash: ["9L1"],
- focusblast: ["9L1"],
- heatwave: ["9L1"],
- hurricane: ["9L1"],
- terablast: ["9L1"],
- aircutter: ["9L1"],
- hyperbeam: ["9L1"],
- swift: ["9L1"],
- agility: ["9L1"],
- curse: ["9L1"],
- defog: ["9L1"],
- lightscreen: ["9L1"],
- protect: ["9L1"],
- reflect: ["9L1"],
- rest: ["9L1"],
- roost: ["9L1"],
- substitute: ["9L1"],
- tailwind: ["9L1"],
- taunt: ["9L1"],
- endure: ["9L1"],
- faketears: ["9L1"],
- leer: ["9L1"],
- raindance: ["9L1"],
- sandattack: ["9L1"],
- scaryface: ["9L1"],
- screech: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- swagger: ["9L1"],
- },
- },
- krookodilequantum: {
- learnset: {
- bodyslam: ["9L1"],
- brickbreak: ["9L1"],
- doubleshock: ["9L1"],
- doubleedge: ["9L1"],
- dragontail: ["9L1"],
- earthquake: ["9L1"],
- endeavor: ["9L1"],
- facade: ["9L1"],
- flamecharge: ["9L1"],
- focuspunch: ["9L1"],
- headsmash: ["9L1"],
- knockoff: ["9L1"],
- powertrip: ["9L1"],
- rockblast: ["9L1"],
- scaleshot: ["9L1"],
- stoneedge: ["9L1"],
- volttackle: ["9L1"],
- aerialace: ["9L1"],
- bite: ["9L1"],
- breakingswipe: ["9L1"],
- counter: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- takedown: ["9L1"],
- thief: ["9L1"],
- thrash: ["9L1"],
- discharge: ["9L1"],
- dragonpulse: ["9L1"],
- electroshot: ["9L1"],
- flamethrower: ["9L1"],
- inferno: ["9L1"],
- meteorbeam: ["9L1"],
- powergem: ["9L1"],
- sludgebomb: ["9L1"],
- terablast: ["9L1"],
- thunderbolt: ["9L1"],
- voltswitch: ["9L1"],
- weatherball: ["9L1"],
- burningjealousy: ["9L1"],
- electroball: ["9L1"],
- ember: ["9L1"],
- firespin: ["9L1"],
- hyperbeam: ["9L1"],
- incinerate: ["9L1"],
- snarl: ["9L1"],
- curse: ["9L1"],
- encore: ["9L1"],
- memento: ["9L1"],
- partingshot: ["9L1"],
- protect: ["9L1"],
- recover: ["9L1"],
- rest: ["9L1"],
- stealthrock: ["9L1"],
- substitute: ["9L1"],
- switcheroo: ["9L1"],
- taunt: ["9L1"],
- thunderwave: ["9L1"],
- charge: ["9L1"],
- conversion: ["9L1"],
- conversion2: ["9L1"],
- eerieimpulse: ["9L1"],
- electricterrain: ["9L1"],
- endure: ["9L1"],
- helpinghand: ["9L1"],
- leer: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- sunnyday: ["9L1"],
- swagger: ["9L1"],
- torment: ["9L1"],
- },
- },
- ogerponkitsune: {
- learnset: {
- aquastep: ["9L1"],
- blazekick: ["9L1"],
- facade: ["9L1"],
- knockoff: ["9L1"],
- powerwhip: ["9L1"],
- rocktomb: ["9L1"],
- shadowsneak: ["9L1"],
- uturn: ["9L1"],
- zingzap: ["9L1"],
- astonish: ["9L1"],
- falseswipe: ["9L1"],
- fling: ["9L1"],
- gigaimpact: ["9L1"],
- phantomforce: ["9L1"],
- retaliate: ["9L1"],
- slam: ["9L1"],
- takedown: ["9L1"],
- aurasphere: ["9L1"],
- dazzlinggleam: ["9L1"],
- earthpower: ["9L1"],
- flashcannon: ["9L1"],
- powergem: ["9L1"],
- shadowball: ["9L1"],
- terablast: ["9L1"],
- weatherball: ["9L1"],
- disarmingvoice: ["9L1"],
- hyperbeam: ["9L1"],
- icywind: ["9L1"],
- protect: ["9L1"],
- rest: ["9L1"],
- substitute: ["9L1"],
- transform: ["9L1"],
- trickroom: ["9L1"],
- babydolleyes: ["9L1"],
- charm: ["9L1"],
- confuseray: ["9L1"],
- endure: ["9L1"],
- focusenergy: ["9L1"],
- followme: ["9L1"],
- gravity: ["9L1"],
- growth: ["9L1"],
- helpinghand: ["9L1"],
- imprison: ["9L1"],
- magicroom: ["9L1"],
- metronome: ["9L1"],
- mistyterrain: ["9L1"],
- scaryface: ["9L1"],
- sleeptalk: ["9L1"],
- spite: ["9L1"],
- },
- },
-};
diff --git a/data/mods/sixbysix/pokedex.ts b/data/mods/sixbysix/pokedex.ts
deleted file mode 100644
index a06fef7146..0000000000
--- a/data/mods/sixbysix/pokedex.ts
+++ /dev/null
@@ -1,542 +0,0 @@
-export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
- kingdra: {
- inherit: true,
- otherFormes: ["Kingdra-Classic", "Kingdra-Brinepool", "Kingdra-Druid", "Kingdra-Bard", "Kingdra-Gourmet", "Kingdra-Ancient"],
- formeOrder: ["Kingdra", "Kingdra-Classic", "Kingdra-Brinepool", "Kingdra-Druid", "Kingdra-Bard", "Kingdra-Gourmet", "Kingdra-Ancient"],
- },
- kingdraclassic: {
- num: 230,
- name: "Kingdra-Classic",
- baseSpecies: "Kingdra",
- forme: "Classic",
- types: ["Water", "Dragon"],
- baseStats: { hp: 90, atk: 70, def: 80, spa: 130, spd: 90, spe: 90 },
- abilities: { 0: "Berserk", 1: "Heatproof", H: "Dry Skin" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- kingdrabrinepool: {
- num: 230,
- name: "Kingdra-Brinepool",
- baseSpecies: "Kingdra",
- forme: "Brinepool",
- types: ["Water", "Poison"],
- baseStats: { hp: 130, atk: 35, def: 105, spa: 130, spd: 85, spe: 65 },
- abilities: { 0: "Storm Drain", 1: "Purifying Salt", H: "Dry Skin" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- kingdradruid: {
- num: 230,
- name: "Kingdra-Druid",
- baseSpecies: "Kingdra",
- forme: "Druid",
- types: ["Steel", "Dragon"],
- baseStats: { hp: 105, atk: 65, def: 90, spa: 120, spd: 120, spe: 50 },
- abilities: { 0: "Berserk", 1: "Heatproof", H: "Water Absorb" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- kingdrabard: {
- num: 230,
- name: "Kingdra-Bard",
- baseSpecies: "Kingdra",
- forme: "Bard",
- types: ["Water", "Fairy"],
- baseStats: { hp: 90, atk: 70, def: 80, spa: 130, spd: 100, spe: 80 },
- abilities: { 0: "Punk Rock", 1: "Cute Charm", H: "Dancer" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- kingdragourmet: {
- num: 230,
- name: "Kingdra-Gourmet",
- baseSpecies: "Kingdra",
- forme: "Gourmet",
- types: ["Normal", "Dragon"],
- baseStats: { hp: 110, atk: 110, def: 80, spa: 90, spd: 100, spe: 60 },
- abilities: { 0: "Emergency Exit", 1: "Thick Fat", H: "Poison Heal" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- kingdraancient: {
- num: 230,
- name: "Kingdra-Ancient",
- baseSpecies: "Kingdra",
- forme: "Ancient",
- types: ["Fire", "Grass"],
- baseStats: { hp: 89, atk: 89, def: 91, spa: 111, spd: 91, spe: 79 },
- abilities: { 0: "Competitive", 1: "Heatproof", H: "Protosynthesis" },
- heightm: 1.8,
- weightkg: 152,
- color: "Blue",
- prevo: '',
- eggGroups: ["Water 1", "Dragon"],
- },
- nidoqueen: {
- inherit: true,
- otherFormes: ["Nidoqueen-Classic", "Nidoqueen-Erudite", "Nidoqueen-Volcanic", "Nidoqueen-Rosegold", "Nidoqueen-Shaman", "Nidoqueen-Jasper"],
- formeOrder: ["Nidoqueen", "Nidoqueen-Classic", "Nidoqueen-Erudite", "Nidoqueen-Volcanic", "Nidoqueen-Rosegold", "Nidoqueen-Shaman", "Nidoqueen-Jasper"],
- },
- nidoqueenclassic: {
- num: 31,
- name: "Nidoqueen-Classic",
- baseSpecies: "Nidoqueen",
- forme: "Classic",
- types: ["Poison", "Ground"],
- gender: "F",
- baseStats: { hp: 135, atk: 115, def: 60, spa: 90, spd: 85, spe: 55 },
- abilities: { 0: "Poison Point", 1: "Cheek Pouch", H: "Serene Grace" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- nidoqueenerudite: {
- num: 31,
- name: "Nidoqueen-Erudite",
- baseSpecies: "Nidoqueen",
- forme: "Erudite",
- types: ["Psychic", "Ground"],
- gender: "F",
- baseStats: { hp: 95, atk: 100, def: 80, spa: 115, spd: 110, spe: 40 },
- abilities: { 0: "Cute Charm", 1: "Regenerator", H: "Serene Grace" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- nidoqueenvolcanic: {
- num: 31,
- name: "Nidoqueen-Volcanic",
- baseSpecies: "Nidoqueen",
- forme: "Volcanic",
- types: ["Fire", "Ground"],
- gender: "F",
- baseStats: { hp: 125, atk: 75, def: 100, spa: 110, spd: 75, spe: 55 },
- abilities: { 0: "Flame Body", 1: "Cheek Pouch", H: "Sheer Force" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- nidoqueenrosegold: {
- num: 31,
- name: "Nidoqueen-Rosegold",
- baseSpecies: "Nidoqueen",
- forme: "Rosegold",
- types: ["Poison", "Grass"],
- gender: "F",
- baseStats: { hp: 125, atk: 70, def: 100, spa: 100, spd: 85, spe: 60 },
- abilities: { 0: "Rough Skin", 1: "Cheek Pouch", H: "Shield Dust" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- nidoqueenshaman: {
- num: 31,
- name: "Nidoqueen-Shaman",
- baseSpecies: "Nidoqueen",
- forme: "Shaman",
- types: ["Poison", "Ghost"],
- gender: "F",
- baseStats: { hp: 95, atk: 120, def: 60, spa: 90, spd: 80, spe: 95 },
- abilities: { 0: "Toxic Chain", 1: "Regenerator", H: "Sheer Force" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- nidoqueenjasper: {
- num: 31,
- name: "Nidoqueen-Jasper",
- baseSpecies: "Nidoqueen",
- forme: "Jasper",
- types: ["Poison", "Rock"],
- gender: "F",
- baseStats: { hp: 135, atk: 125, def: 70, spa: 80, spd: 85, spe: 45 },
- abilities: { 0: "Clear Body", 1: "Earth Eater", H: "Sand Stream" },
- heightm: 1.3,
- weightkg: 60,
- color: "Blue",
- prevo: '',
- eggGroups: ["Undiscovered"],
- },
- bisharp: {
- inherit: true,
- otherFormes: ["Bisharp-Centurion", "Bisharp-Savage", "Bisharp-Ronin", "Bisharp-Mantis", "Bisharp-Revenant", "Bisharp-Assassin"],
- formeOrder: ["Bisharp", "Bisharp-Centurion", "Bisharp-Savage", "Bisharp-Ronin", "Bisharp-Mantis", "Bisharp-Revenant", "Bisharp-Assassin"],
- },
- bisharpcenturion: {
- num: 625,
- name: "Bisharp-Centurion",
- baseSpecies: "Bisharp",
- forme: "Centurion",
- types: ["Fighting", "Steel"],
- baseStats: { hp: 70, atk: 140, def: 115, spa: 55, spd: 70, spe: 70 },
- abilities: { 0: "Overcoat", 1: "Technician", H: "Solar Power" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- bisharpsavage: {
- num: 625,
- name: "Bisharp-Savage",
- baseSpecies: "Bisharp",
- forme: "Savage",
- types: ["Grass", "Steel"],
- baseStats: { hp: 90, atk: 110, def: 135, spa: 40, spd: 80, spe: 65 },
- abilities: { 0: "Bulletproof", 1: "Technician", H: "Leaf Guard" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- bisharpronin: {
- num: 625,
- name: "Bisharp-Ronin",
- baseSpecies: "Bisharp",
- forme: "Ronin",
- types: ["Fighting", "Poison"],
- baseStats: { hp: 70, atk: 115, def: 110, spa: 45, spd: 70, spe: 110 },
- abilities: { 0: "Overcoat", 1: "Technician", H: "Dry Skin" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- bisharpmantis: {
- num: 625,
- name: "Bisharp-Mantis",
- baseSpecies: "Bisharp",
- forme: "Mantis",
- types: ["Dark", "Bug"],
- baseStats: { hp: 80, atk: 120, def: 105, spa: 45, spd: 85, spe: 85 },
- abilities: { 0: "Overcoat", 1: "Sharpness", H: "Orichalcum Pulse" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- bisharprevenant: {
- num: 625,
- name: "Bisharp-Revenant",
- baseSpecies: "Bisharp",
- forme: "Revenant",
- types: ["Ghost", "Steel"],
- baseStats: { hp: 80, atk: 135, def: 120, spa: 45, spd: 70, spe: 70 },
- abilities: { 0: "Magic Bounce", 1: "Mirror Armor", H: "Justified" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- bisharpassassin: {
- num: 625,
- name: "Bisharp-Assassin",
- baseSpecies: "Bisharp",
- forme: "Assassin",
- types: ["Fighting", "Ice"],
- baseStats: { hp: 80, atk: 130, def: 110, spa: 55, spd: 70, spe: 75 },
- abilities: { 0: "Dazzling", 1: "No Guard", H: "Slush Rush" },
- heightm: 1.6,
- weightkg: 70,
- color: "Red",
- prevo: '',
- eggGroups: ["Human-Like"],
- },
- corviknight: {
- inherit: true,
- otherFormes: ["Corviknight-Thunderbird", "Corviknight-Genie", "Corviknight-Yeti", "Corviknight-Analytical", "Corviknight-Martian", "Corviknight-Falcon"],
- formeOrder: ["Corviknight", "Corviknight-Thunderbird", "Corviknight-Genie", "Corviknight-Yeti", "Corviknight-Analytical", "Corviknight-Martian", "Corviknight-Falcon"],
- },
- corviknightthunderbird: {
- num: 823,
- name: "Corviknight-Thunderbird",
- baseSpecies: "Corviknight",
- forme: "Thunderbird",
- types: ["Flying", "Electric"],
- baseStats: { hp: 85, atk: 55, def: 105, spa: 115, spd: 85, spe: 85 },
- abilities: { 0: "Pickpocket", 1: "Quick Feet", H: "Drizzle" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- corviknightgenie: {
- num: 823,
- name: "Corviknight-Genie",
- baseSpecies: "Corviknight",
- forme: "Genie",
- types: ["Flying", "Ground"],
- baseStats: { hp: 89, atk: 45, def: 95, spa: 120, spd: 90, spe: 91 },
- abilities: { 0: "Intimidate", 1: "Sand Force", H: "Prankster" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- corviknightyeti: {
- num: 823,
- name: "Corviknight-Yeti",
- baseSpecies: "Corviknight",
- forme: "Yeti",
- types: ["Flying", "Ice"],
- baseStats: { hp: 85, atk: 55, def: 80, spa: 95, spd: 110, spe: 110 },
- abilities: { 0: "Mummy", 1: "Quick Feet", H: "Snow Warning" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- corviknightanalytical: {
- num: 823,
- name: "Corviknight-Analytical",
- baseSpecies: "Corviknight",
- forme: "Analytical",
- types: ["Psychic", "Electric"],
- baseStats: { hp: 85, atk: 55, def: 80, spa: 110, spd: 85, spe: 115 },
- abilities: { 0: "Pickpocket", 1: "Flare Boost", H: "Psychic Surge" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- corviknightmartian: {
- num: 823,
- name: "Corviknight-Martian",
- baseSpecies: "Corviknight",
- forme: "Martian",
- types: ["Psychic", "Steel"],
- baseStats: { hp: 95, atk: 45, def: 120, spa: 100, spd: 105, spe: 65 },
- abilities: { 0: "Iron Barbs", 1: "Quick Feet", H: "Hadron Engine" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- corviknightfalcon: {
- num: 823,
- name: "Corviknight-Falcon",
- baseSpecies: "Corviknight",
- forme: "Falcon",
- types: ["Flying", "Fighting"],
- baseStats: { hp: 86, atk: 95, def: 75, spa: 75, spd: 85, spe: 114 },
- abilities: { 0: "Pickpocket", 1: "Guts", H: "Delta Stream" },
- heightm: 2.2,
- weightkg: 75,
- color: "Purple",
- prevo: '',
- eggGroups: ["Flying"],
- },
- krookodile: {
- inherit: true,
- otherFormes: ["Krookodile-Infernal", "Krookodile-Abyssal", "Krookodile-Wetlander", "Krookodile-Cave Dweller", "Krookodile-Cliffside", "Krookodile-Quantum"],
- formeOrder: ["Krookodile", "Krookodile-Infernal", "Krookodile-Abyssal", "Krookodile-Wetlander", "Krookodile-Cave Dweller", "Krookodile-Cliffside", "Krookodile-Quantum"],
- },
- krookodileinfernal: {
- num: 553,
- name: "Krookodile-Infernal",
- baseSpecies: "Krookodile",
- forme: "Infernal",
- types: ["Fire", "Dark"],
- baseStats: { hp: 90, atk: 80, def: 85, spa: 105, spd: 90, spe: 100 },
- abilities: { 0: "Magic Guard", 1: "Wonder Skin", H: "Sturdy" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- krookodileabyssal: {
- num: 553,
- name: "Krookodile-Abyssal",
- baseSpecies: "Krookodile",
- forme: "Abyssal",
- types: ["Ground", "Dark"],
- baseStats: { hp: 90, atk: 120, def: 85, spa: 75, spd: 90, spe: 90 },
- abilities: { 0: "Rock Head", 1: "Wonder Skin", H: "Multiscale" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- krookodilewetlander: {
- num: 553,
- name: "Krookodile-Wetlander",
- baseSpecies: "Krookodile",
- forme: "Wetlander",
- types: ["Grass", "Water"],
- baseStats: { hp: 100, atk: 100, def: 75, spa: 85, spd: 110, spe: 80 },
- abilities: { 0: "Rock Head", 1: "Wonder Skin", H: "Wind Rider" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- krookodilecavedweller: {
- num: 553,
- name: "Krookodile-Cave Dweller",
- baseSpecies: "Krookodile",
- forme: "Cave Dweller",
- types: ["Fire", "Rock"],
- baseStats: { hp: 80, atk: 110, def: 75, spa: 85, spd: 80, spe: 120 },
- abilities: { 0: "Magic Guard", 1: "Wonder Skin", H: "Sturdy" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- krookodilecliffside: {
- num: 553,
- name: "Krookodile-Cliffside",
- baseSpecies: "Krookodile",
- forme: "Cliffside",
- types: ["Dragon", "Dark"],
- baseStats: { hp: 90, atk: 70, def: 85, spa: 115, spd: 80, spe: 110 },
- abilities: { 0: "Intimidate", 1: "Merciless", H: "Mold Breaker" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- krookodilequantum: {
- num: 553,
- name: "Krookodile-Quantum",
- baseSpecies: "Krookodile",
- forme: "Quantum",
- types: ["Electric", "Rock"],
- baseStats: { hp: 95, atk: 100, def: 85, spa: 85, spd: 85, spe: 100 },
- abilities: { 0: "Rock Head", 1: "Prankster", H: "Sturdy" },
- heightm: 1.5,
- weightkg: 96.3,
- color: "Red",
- prevo: '',
- eggGroups: ["Field"],
- },
- ogerpon: {
- inherit: true,
- otherFormes: ["Ogerpon-Muerta", "Ogerpon-Easter", "Ogerpon-Ankh", "Ogerpon-Eid", "Ogerpon-Vessel", "Ogerpon-Kitsune"],
- formeOrder: ["Ogerpon", "Ogerpon-Muerta", "Ogerpon-Easter", "Ogerpon-Ankh", "Ogerpon-Eid", "Ogerpon-Vessel", "Ogerpon-Kitsune"],
- },
- ogerponmuerta: {
- num: 1017,
- name: "Ogerpon-Muerta",
- baseSpecies: "Ogerpon",
- forme: "Muerta",
- types: ["Fairy", "Ghost"],
- gender: "F",
- baseStats: { hp: 90, atk: 120, def: 70, spa: 100, spd: 90, spe: 130 },
- abilities: { 0: "Wandering Spirit" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
- ogerponeaster: {
- num: 1017,
- name: "Ogerpon-Easter",
- baseSpecies: "Ogerpon",
- forme: "Easter",
- types: ["Fairy", "Normal"],
- gender: "F",
- baseStats: { hp: 105, atk: 95, def: 95, spa: 110, spd: 80, spe: 115 },
- abilities: { 0: "Pickpocket" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
- ogerponankh: {
- num: 1017,
- name: "Ogerpon-Ankh",
- baseSpecies: "Ogerpon",
- forme: "Ankh",
- types: ["Ghost"],
- gender: "F",
- baseStats: { hp: 85, atk: 130, def: 70, spa: 130, spd: 90, spe: 95 },
- abilities: { 0: "Mummy", H: "Good as Gold" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
- ogerponeid: {
- num: 1017,
- name: "Ogerpon-Eid",
- baseSpecies: "Ogerpon",
- forme: "Eid",
- types: ["Water", "Ghost"],
- gender: "F",
- baseStats: { hp: 95, atk: 98, def: 100, spa: 105, spd: 110, spe: 92 },
- abilities: { 0: "Tangling Hair" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
- ogerponvessel: {
- num: 1017,
- name: "Ogerpon-Vessel",
- baseSpecies: "Ogerpon",
- forme: "Vessel",
- types: ["Bug", "Fighting"],
- gender: "F",
- baseStats: { hp: 95, atk: 115, def: 80, spa: 80, spd: 80, spe: 150 },
- abilities: { 0: "Trace" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
- ogerponkitsune: {
- num: 1017,
- name: "Ogerpon-Kitsune",
- baseSpecies: "Ogerpon",
- forme: "Kitsune",
- types: ["Fairy"],
- gender: "F",
- baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 100 },
- abilities: { 0: "Protean" },
- heightm: 1.2,
- weightkg: 39.8,
- color: "Green",
- eggGroups: ["Undiscovered"],
- },
-};
diff --git a/data/mods/sixbysix/rulesets.ts b/data/mods/sixbysix/rulesets.ts
deleted file mode 100644
index 6b2be5e210..0000000000
--- a/data/mods/sixbysix/rulesets.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
- spriteviewer: {
- effectType: 'ValidatorRule',
- name: 'Sprite Viewer',
- desc: "Displays a fakemon's sprite in chat when it is switched in for the first time",
- onBegin() {
- this.add('rule', 'Sprite Viewer: Displays sprites in chat');
- },
- onSwitchIn(pokemon) {
- if (!this.effectState[pokemon.species.id]) {
- this.add('-message', `${pokemon.species.name}'s Sprite:`);
- this.add(`raw|
`);
- this.effectState[pokemon.species.id] = true;
- }
- },
- },
-};
diff --git a/data/mods/sixbysix/scripts.ts b/data/mods/sixbysix/scripts.ts
deleted file mode 100644
index 4346dd0db2..0000000000
--- a/data/mods/sixbysix/scripts.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 9,
-};
diff --git a/data/random-battles/gen6megasrevisited/factory-sets.json b/data/random-battles/gen6megasrevisited/factory-sets.json
new file mode 100644
index 0000000000..12918022ce
--- /dev/null
+++ b/data/random-battles/gen6megasrevisited/factory-sets.json
@@ -0,0 +1,10319 @@
+{
+ "Uber": {
+ "klefki": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Klefki",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Spikes"], ["Thunder Wave"], ["Toxic"], ["Play Rough"]]
+ }
+ ]
+ },
+ "zekrom": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zekrom",
+ "item": "Choice Band",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bolt Strike"], ["Outrage"], ["Dragon Claw"], ["Volt Switch"]]
+ },
+ {
+ "species": "Zekrom",
+ "item": "Choice Scarf",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Lonely",
+ "moves": [["Bolt Strike"], ["Volt Switch"], ["Draco Meteor"], ["Outrage"]]
+ },
+ {
+ "species": "Zekrom",
+ "item": "Choice Scarf",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bolt Strike"], ["Volt Switch"], ["Sleep Talk"], ["Outrage"]]
+ },
+ {
+ "species": "Zekrom",
+ "item": "Life Orb",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Lonely",
+ "moves": [["Bolt Strike"], ["Draco Meteor"], ["Dragon Claw"], ["Tailwind"]]
+ },
+ {
+ "species": "Zekrom",
+ "item": "Shuca Berry",
+ "ability": "Teravolt",
+ "evs": {"hp": 132, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 124},
+ "nature": "Adamant",
+ "moves": [["Substitute", "Outrage"], ["Hone Claws"], ["Bolt Strike"], ["Dragon Claw"]]
+ }
+ ]
+ },
+ "yveltal": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Yveltal",
+ "item": "Choice Scarf",
+ "ability": "Dark Aura",
+ "evs": {"hp": 0, "atk": 32, "def": 4, "spa": 248, "spd": 0, "spe": 224},
+ "nature": "Modest",
+ "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Foul Play"], ["U-turn"]]
+ },
+ {
+ "species": "Yveltal",
+ "item": "Life Orb",
+ "ability": "Dark Aura",
+ "evs": {"hp": 132, "atk": 28, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Rash",
+ "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Sucker Punch"], ["Heat Wave"]]
+ },
+ {
+ "species": "Yveltal",
+ "item": "Leftovers",
+ "ability": "Dark Aura",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Foul Play"], ["Taunt"], ["Sucker Punch"], ["Roost"]]
+ },
+ {
+ "species": "Yveltal",
+ "item": "Leftovers",
+ "ability": "Dark Aura",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Foul Play"], ["Taunt"], ["Toxic"], ["Roost"]]
+ }
+ ]
+ },
+ "xerneas": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Xerneas",
+ "item": "Life Orb",
+ "ability": "Fairy Aura",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Mild",
+ "moves": [["Moonblast"], ["Close Combat"], ["Rock Slide"], ["Aromatherapy"]]
+ },
+ {
+ "species": "Xerneas",
+ "item": "Choice Scarf",
+ "ability": "Fairy Aura",
+ "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 248, "spd": 0, "spe": 184},
+ "nature": "Rash",
+ "moves": [["Moonblast"], ["Sleep Talk"], ["Close Combat"], ["Rock Slide"]]
+ },
+ {
+ "species": "Xerneas",
+ "item": "Leftovers",
+ "ability": "Fairy Aura",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Aromatherapy"], ["Rest"], ["Sleep Talk"], ["Moonblast"]]
+ },
+ {
+ "species": "Xerneas",
+ "item": "Power Herb",
+ "ability": "Fairy Aura",
+ "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44},
+ "nature": "Modest",
+ "moves": [["Geomancy"], ["Moonblast"], ["Focus Blast"], ["Thunder"]]
+ },
+ {
+ "species": "Xerneas",
+ "item": "Power Herb",
+ "ability": "Fairy Aura",
+ "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44},
+ "nature": "Modest",
+ "moves": [["Geomancy"], ["Moonblast"], ["Hidden Power Ground"], ["Thunder"]]
+ }
+ ]
+ },
+ "tyranitar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tyranitar",
+ "item": "Leftovers",
+ "ability": "Sand Stream",
+ "evs": {"hp": 248, "atk": 0, "def": 96, "spa": 0, "spd": 164, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
+ },
+ {
+ "species": "Tyranitar",
+ "item": "Shuca Berry",
+ "ability": "Sand Stream",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
+ },
+ {
+ "species": "Tyranitar",
+ "item": "Shuca Berry",
+ "ability": "Sand Stream",
+ "evs": {"hp": 248, "atk": 72, "def": 0, "spa": 0, "spd": 188, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Stealth Rock"], ["Low Kick"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
+ }
+ ]
+ },
+ "shayminsky": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Shaymin-Sky",
+ "item": "Life Orb",
+ "ability": "Serene Grace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Seed Flare"], ["Air Slash"], ["Earth Power"], ["Healing Wish"]]
+ },
+ {
+ "species": "Shaymin-Sky",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]]
+ }
+ ]
+ },
+ "salamence": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Salamence",
+ "item": "Salamencite",
+ "ability": "Intimidate",
+ "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Adamant",
+ "moves": [["Double-Edge"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]]
+ },
+ {
+ "species": "Salamence",
+ "item": "Salamencite",
+ "ability": "Intimidate",
+ "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Adamant",
+ "moves": [["Return"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]],
+ "happiness": 255
+ },
+ {
+ "species": "Salamence",
+ "item": "Salamencite",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Return"], ["Earthquake"], ["Roost"], ["Dragon Dance"]],
+ "happiness": 255
+ },
+ {
+ "species": "Salamence",
+ "item": "Salamencite",
+ "ability": "Intimidate",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124},
+ "nature": "Impish",
+ "moves": [["Return"], ["Refresh"], ["Roost"], ["Dragon Dance"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "sableye": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Sableye",
+ "item": "Sablenite",
+ "ability": "Prankster",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Foul Play"], ["Protect", "Fake Out"], ["Will-O-Wisp"], ["Recover"]]
+ }
+ ]
+ },
+ "reshiram": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Reshiram",
+ "item": "Choice Scarf",
+ "ability": "Turboblaze",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Blue Flare"], ["Draco Meteor"], ["Sleep Talk"], ["Stone Edge"]]
+ },
+ {
+ "species": "Reshiram",
+ "item": "Life Orb",
+ "ability": "Turboblaze",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Flame Charge"], ["Blue Flare"], ["Draco Meteor"], ["Stone Edge"]]
+ },
+ {
+ "species": "Reshiram",
+ "item": "Leftovers",
+ "ability": "Turboblaze",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Blue Flare"], ["Draco Meteor"], ["Toxic"], ["Roost"]]
+ }
+ ]
+ },
+ "rayquaza": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rayquaza",
+ "item": "Life Orb",
+ "ability": "Air Lock",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]]
+ },
+ {
+ "species": "Rayquaza",
+ "item": "Life Orb",
+ "ability": "Air Lock",
+ "evs": {"hp": 0, "atk": 40, "def": 0, "spa": 252, "spd": 0, "spe": 216},
+ "nature": "Rash",
+ "moves": [["Draco Meteor"], ["Dragon Ascent"], ["Extreme Speed"], ["Earthquake"]]
+ },
+ {
+ "species": "Rayquaza",
+ "item": "Life Orb",
+ "ability": "Air Lock",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]]
+ }
+ ]
+ },
+ "palkia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Palkia",
+ "item": "Choice Specs",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Draco Meteor"], ["Spacial Rend"], ["Fire Blast"]]
+ },
+ {
+ "species": "Palkia",
+ "item": "Lustrous Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Spacial Rend"], ["Fire Blast"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Palkia",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Surf"], ["Toxic"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Palkia",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 60, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Rest"], ["Toxic"], ["Hydro Pump"], ["Spacial Rend"]]
+ }
+ ]
+ },
+ "mewtwo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mewtwo",
+ "item": "Mewtwonite X",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Ice Beam"], ["Low Kick"], ["Earthquake"], ["Rock Slide"]]
+ },
+ {
+ "species": "Mewtwo",
+ "item": "Mewtwonite X",
+ "ability": "Pressure",
+ "evs": {"hp": 176, "atk": 80, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Low Kick"], ["Taunt"], ["Earthquake"], ["Ice Beam"]]
+ },
+ {
+ "species": "Mewtwo",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]]
+ },
+ {
+ "species": "Mewtwo",
+ "item": "Mewtwonite Y",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "mawile": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Mawile",
+ "item": "Mawilite",
+ "ability": "Intimidate",
+ "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Iron Head"], ["Play Rough"], ["Sucker Punch"], ["Baton Pass"]]
+ }
+ ]
+ },
+ "lugia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Lugia",
+ "item": "Leftovers",
+ "ability": "Multiscale",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Bold",
+ "moves": [["Roost"], ["Ice Beam"], ["Whirlwind"], ["Toxic"]]
+ }
+ ]
+ },
+ "lucario": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Lucario",
+ "item": "Lucarionite",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["Bullet Punch"], ["Stone Edge"], ["Iron Tail"]]
+ }
+ ]
+ },
+ "latios": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Latios",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Memento", "Recover"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Memento", "Recover"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Hidden Power Fire"]]
+ }
+ ]
+ },
+ "latias": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Latias",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 212, "atk": 0, "def": 0, "spa": 120, "spd": 0, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Recover", "Healing Wish"]]
+ },
+ {
+ "species": "Latias",
+ "item": "Soul Dew",
+ "ability": "Levitate",
+ "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Draco Meteor"], ["Psyshock"], ["Recover"]]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kyurem-White",
+ "item": "Choice Specs",
+ "ability": "Turboblaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Earth Power"]]
+ },
+ {
+ "species": "Kyurem-White",
+ "item": "Life Orb",
+ "ability": "Turboblaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Stone Edge"]]
+ }
+ ]
+ },
+ "kyogre": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kyogre",
+ "item": "Blue Orb",
+ "ability": "Drizzle",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Origin Pulse"], ["Thunder"], ["Ice Beam"], ["Calm Mind"]]
+ },
+ {
+ "species": "Kyogre",
+ "item": "Blue Orb",
+ "ability": "Drizzle",
+ "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12},
+ "nature": "Bold",
+ "moves": [["Rest"], ["Sleep Talk"], ["Scald"], ["Ice Beam", "Roar"]]
+ },
+ {
+ "species": "Kyogre",
+ "item": "Blue Orb",
+ "ability": "Drizzle",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 12},
+ "nature": "Modest",
+ "moves": [["Origin Pulse"], ["Thunder", "Rest", "Substitute"], ["Ice Beam"], ["Calm Mind"]]
+ },
+ {
+ "species": "Kyogre",
+ "item": "Choice Specs",
+ "ability": "Drizzle",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Water Spout"], ["Origin Pulse", "Scald"], ["Ice Beam"], ["Thunder"]]
+ },
+ {
+ "species": "Kyogre",
+ "item": "Choice Scarf",
+ "ability": "Drizzle",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Water Spout"], ["Ice Beam"], ["Origin Pulse"], ["Thunder", "Sleep Talk"]]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Kangaskhan",
+ "item": "Kangaskhanite",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Return"], ["Fake Out"], ["Power-Up Punch"], ["Crunch"]],
+ "happiness": 255
+ },
+ {
+ "species": "Kangaskhan",
+ "item": "Kangaskhanite",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Double-Edge"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]]
+ },
+ {
+ "species": "Kangaskhan",
+ "item": "Kangaskhanite",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Return"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "hooh": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ho-Oh",
+ "item": "Choice Band",
+ "ability": "Regenerator",
+ "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Brave Bird"], ["Sacred Fire"], ["Earthquake"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Ho-Oh",
+ "item": "Life Orb",
+ "ability": "Regenerator",
+ "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Brave Bird"], ["Sacred Fire"], ["Recover"], ["Thunder Wave", "Earthquake", "Substitute"]]
+ }
+ ]
+ },
+ "groudon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Groudon",
+ "item": "Red Orb",
+ "ability": "Drought",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 200, "spe": 56},
+ "nature": "Adamant",
+ "moves": [["Rock Polish"], ["Precipice Blades", "Earthquake"], ["Stone Edge"], ["Swords Dance", "Dragon Claw"]]
+ },
+ {
+ "species": "Groudon",
+ "item": "Red Orb",
+ "ability": "Drought",
+ "evs": {"hp": 248, "atk": 0, "def": 56, "spa": 0, "spd": 192, "spe": 12},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Precipice Blades", "Earthquake"], ["Lava Plume", "Stone Edge"], ["Thunder Wave", "Roar"]]
+ },
+ {
+ "species": "Groudon",
+ "item": "Red Orb",
+ "ability": "Drought",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Lava Plume"], ["Roar"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Groudon",
+ "item": "Leftovers",
+ "ability": "Drought",
+ "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12},
+ "nature": "Impish",
+ "moves": [["Precipice Blades"], ["Stealth Rock"], ["Stone Edge"], ["Dragon Tail", "Roar"]]
+ }
+ ]
+ },
+ "greninja": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Greninja",
+ "item": "Focus Sash",
+ "ability": "Protean",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Toxic Spikes"], ["Spikes"], ["Taunt"], ["Shadow Sneak"]]
+ },
+ {
+ "species": "Greninja",
+ "item": "Focus Sash",
+ "ability": "Protean",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Toxic Spikes"], ["Scald"], ["Taunt"], ["Shadow Sneak"]]
+ }
+ ]
+ },
+ "giratina": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Giratina",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]]
+ },
+ {
+ "species": "Giratina",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Giratina-Origin",
+ "item": "Griseous Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 180, "def": 0, "spa": 252, "spd": 0, "spe": 76},
+ "nature": "Rash",
+ "moves": [["Draco Meteor"], ["Shadow Sneak"], ["Dragon Tail"], ["Defog"]]
+ },
+ {
+ "species": "Giratina-Origin",
+ "item": "Griseous Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 244, "def": 252, "spa": 0, "spd": 0, "spe": 12},
+ "nature": "Adamant",
+ "moves": [["Defog"], ["Shadow Sneak"], ["Dragon Tail"], ["Shadow Force"]]
+ }
+ ]
+ },
+ "gengar": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Gengar",
+ "item": "Gengarite",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Taunt"], ["Destiny Bond"], ["Sludge Wave"], ["Focus Blast"]]
+ },
+ {
+ "species": "Gengar",
+ "item": "Gengarite",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 84, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Perish Song"], ["Taunt"], ["Protect"], ["Disable"]]
+ }
+ ]
+ },
+ "genesect": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Genesect",
+ "item": "Choice Scarf",
+ "ability": "Download",
+ "evs": {"hp": 0, "atk": 248, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["U-turn"], ["Iron Head"], ["Explosion"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ferrothorn",
+ "item": "Leftovers",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Leech Seed"], ["Spikes"], ["Power Whip", "Gyro Ball"], ["Protect"]]
+ },
+ {
+ "species": "Ferrothorn",
+ "item": "Leftovers",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Leech Seed"], ["Spikes"], ["Power Whip"], ["Protect", "Gyro Ball"]]
+ }
+ ]
+ },
+ "excadrill": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Excadrill",
+ "item": "Life Orb",
+ "ability": "Sand Rush",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Iron Head"], ["Earthquake"], ["Rock Slide"], ["Rapid Spin"]]
+ },
+ {
+ "species": "Excadrill",
+ "item": "Air Balloon",
+ "ability": "Sand Rush",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Iron Head"], ["Earthquake"], ["Swords Dance"], ["Rapid Spin"]]
+ }
+ ]
+ },
+ "dialga": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dialga",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Stealth Rock"], ["Toxic"], ["Draco Meteor"], ["Fire Blast"]]
+ },
+ {
+ "species": "Dialga",
+ "item": "Shuca Berry",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Flash Cannon"], ["Fire Blast"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "deoxys": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Deoxys",
+ "item": "Focus Sash",
+ "ability": "Pressure",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psycho Boost"], ["Stealth Rock"], ["Spikes"], ["Taunt"]]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Deoxys-Attack",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Psycho Boost"], ["Low Kick"], ["Ice Beam"], ["Extreme Speed"]]
+ },
+ {
+ "species": "Deoxys-Attack",
+ "item": "Focus Sash",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Spikes"], ["Psycho Boost"], ["Knock Off"], ["Extreme Speed"]]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Deoxys-Defense",
+ "item": "Mental Herb",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Recover"], ["Spikes"], ["Skill Swap"], ["Toxic"]]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Deoxys-Speed",
+ "item": "Focus Sash",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Spikes"], ["Knock Off"]]
+ },
+ {
+ "species": "Deoxys-Speed",
+ "item": "Light Clay",
+ "ability": "Pressure",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Reflect"], ["Light Screen"]]
+ }
+ ]
+ },
+ "darkrai": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Darkrai",
+ "item": "Life Orb",
+ "ability": "Bad Dreams",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Dark Void"], ["Dark Pulse"], ["Nasty Plot", "Taunt"], ["Sludge Bomb", "Thunder", "Focus Blast"]]
+ }
+ ]
+ },
+ "blissey": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Blissey",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Ice Beam"], ["Toxic"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]]
+ },
+ {
+ "species": "Blissey",
+ "item": "Shed Shell",
+ "ability": "Natural Cure",
+ "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Toxic"], ["Seismic Toss", "Snatch"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]]
+ }
+ ]
+ },
+ "blaziken": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Blaziken",
+ "item": "Leftovers",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Baton Pass"], ["Protect"], ["Swords Dance"], ["Flare Blitz"]]
+ },
+ {
+ "species": "Blaziken",
+ "item": "Blazikenite",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]]
+ },
+ {
+ "species": "Blaziken",
+ "item": "Blazikenite",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Blaziken",
+ "item": "Life Orb",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Blaziken",
+ "item": "Life Orb",
+ "ability": "Speed Boost",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]]
+ }
+ ]
+ },
+ "arceuswater": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Water",
+ "item": "Splash Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Bold",
+ "moves": [["Ice Beam", "Judgment"], ["Defog"], ["Recover"], ["Toxic"]]
+ }
+ ]
+ },
+ "arceussteel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Steel",
+ "item": "Iron Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Earth Power", "Thunder"]]
+ },
+ {
+ "species": "Arceus-Steel",
+ "item": "Iron Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Iron Head"], ["Earthquake"], ["Stone Edge", "Recover", "Extreme Speed"]]
+ }
+ ]
+ },
+ "arceusfire": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Fire",
+ "item": "Flame Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
+ "nature": "Modest",
+ "moves": [["Overheat", "Fire Blast"], ["Calm Mind"], ["Thunder"], ["Earth Power"]]
+ }
+ ]
+ },
+ "arceusflying": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Flying",
+ "item": "Sky Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 200, "spd": 0, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Refresh", "Earth Power", "Substitute"]]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Psychic",
+ "item": "Mind Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Bold",
+ "moves": [["Fire Blast", "Payback"], ["Ice Beam"], ["Recover"], ["Toxic"]]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Poison",
+ "item": "Toxic Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Impish",
+ "moves": [["Defog"], ["Poison Jab"], ["Thunder Wave"], ["Recover"]]
+ }
+ ]
+ },
+ "arceusbug": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Bug",
+ "item": "Insect Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["X-Scissor"], ["Stone Edge"], ["Earthquake"]]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Fighting",
+ "item": "Fist Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 0, "def": 40, "spa": 252, "spd": 0, "spe": 216},
+ "nature": "Modest",
+ "moves": [["Judgment"], ["Thunder Wave"], ["Recover"], ["Ice Beam", "Stone Edge"]]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Fairy",
+ "item": "Pixie Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Bold",
+ "moves": [["Judgment"], ["Recover"], ["Defog"], ["Toxic"]]
+ },
+ {
+ "species": "Arceus-Fairy",
+ "item": "Pixie Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Earth Power", "Thunder"]]
+ }
+ ]
+ },
+ "arceusice": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Ice",
+ "item": "Icicle Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Judgment"], ["Recover"], ["Calm Mind"], ["Thunder", "Fire Blast"]]
+ }
+ ]
+ },
+ "arceusrock": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Rock",
+ "item": "Stone Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Judgment"], ["Defog"], ["Recover"], ["Will-O-Wisp"]]
+ }
+ ]
+ },
+ "arceusghost": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Ghost",
+ "item": "Spooky Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Will-O-Wisp"]]
+ },
+ {
+ "species": "Arceus-Ghost",
+ "item": "Spooky Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw", "Brick Break"], ["Extreme Speed"]]
+ },
+ {
+ "species": "Arceus-Ghost",
+ "item": "Spooky Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw"], ["Brick Break"]]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Dragon",
+ "item": "Draco Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Bold",
+ "moves": [["Judgment"], ["Defog"], ["Recover"], ["Toxic"]]
+ },
+ {
+ "species": "Arceus-Dragon",
+ "item": "Draco Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Judgment"], ["Fire Blast"], ["Recover"]]
+ }
+ ]
+ },
+ "arceus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus",
+ "item": "Life Orb",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake"], ["Stone Edge", "Shadow Claw"]]
+ },
+ {
+ "species": "Arceus",
+ "item": "Silk Scarf",
+ "ability": "Multitype",
+ "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake", "Shadow Force"], ["Refresh"]]
+ }
+ ]
+ },
+ "arceusdark": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Dark",
+ "item": "Dread Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 144, "spe": 112},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Refresh"]]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Grass",
+ "item": "Meadow Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 148, "spe": 112},
+ "nature": "Timid",
+ "moves": [["Grass Knot"], ["Recover"], ["Ice Beam"], ["Defog"]]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Electric",
+ "item": "Zap Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Judgment"], ["Ice Beam"], ["Recover"]]
+ }
+ ]
+ },
+ "arceusground": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arceus-Ground",
+ "item": "Earth Plate",
+ "ability": "Multitype",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Recover", "Extreme Speed"]]
+ }
+ ]
+ },
+ "aegislash": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aegislash",
+ "item": "Leftovers",
+ "ability": "Stance Change",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["King's Shield"], ["Toxic"], ["Gyro Ball"], ["Pursuit"]]
+ }
+ ]
+ },
+ "scizor": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Scizor",
+ "item": "Scizorite",
+ "ability": "Technician",
+ "evs": {"hp": 212, "atk": 60, "def": 152, "spa": 0, "spd": 84, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Toxic"], ["Roost"], ["Defog"], ["Bullet Punch"]]
+ }
+ ]
+ },
+ "diancie": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Diancie",
+ "item": "Diancite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power", "Protect"], ["Stealth Rock"]]
+ },
+ {
+ "species": "Diancie",
+ "item": "Diancite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]]
+ }
+ ]
+ },
+ "landorus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Landorus",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Sludge Wave"]]
+ },
+ {
+ "species": "Landorus",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Hidden Power Ice"]]
+ }
+ ]
+ }
+ },
+ "OU": {
+ "diancie": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Diancie",
+ "item": "Diancite",
+ "ability": "Clear Body",
+ "evs": {"hp": 44, "atk": 32, "def": 0, "spa": 252, "spd": 0, "spe": 180},
+ "nature": "Rash",
+ "moves": [["Moonblast"], ["Diamond Storm"], ["Earth Power"], ["Rock Polish"]]
+ },
+ {
+ "species": "Diancie",
+ "item": "Diancite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Moonblast"], ["Earth Power"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Diancie",
+ "item": "Diancite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]]
+ }
+ ]
+ },
+ "hippowdon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hippowdon",
+ "gender": "M",
+ "item": "Leftovers",
+ "ability": "Sand Stream",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]]
+ },
+ {
+ "species": "Hippowdon",
+ "gender": "M",
+ "item": "Leftovers",
+ "ability": "Sand Stream",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]]
+ },
+ {
+ "species": "Hippowdon",
+ "gender": "M",
+ "item": "Leftovers",
+ "ability": "Sand Stream",
+ "evs": {"hp": 252, "atk": 0, "def": 144, "spa": 0, "spd": 112, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Slack Off"], ["Stealth Rock"], ["Whirlwind"], ["Earthquake"]]
+ }
+ ]
+ },
+ "jirachi": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Jirachi",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 160, "def": 0, "spa": 0, "spd": 0, "spe": 96},
+ "nature": "Jolly",
+ "moves": [["Iron Head"], ["Fire Punch"], ["Substitute"], ["Toxic"]]
+ },
+ {
+ "species": "Jirachi",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 224, "spe": 32},
+ "nature": "Careful",
+ "moves": [["Wish"], ["Protect"], ["Iron Head"], ["Body Slam"]]
+ },
+ {
+ "species": "Jirachi",
+ "item": "Choice Scarf",
+ "ability": "Serene Grace",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["U-turn"], ["Iron Head"], ["Ice Punch"], ["Fire Punch"]]
+ }
+ ]
+ },
+ "celebi": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Celebi",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
+ "nature": "Bold",
+ "moves": [["Earth Power"], ["Nasty Plot"], ["Giga Drain"], ["Recover"]]
+ },
+ {
+ "species": "Celebi",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 84, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Thunder Wave"], ["Recover"], ["Giga Drain"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "zygarde": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zygarde",
+ "item": "Life Orb",
+ "ability": "Aura Break",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Earthquake"], ["Outrage"], ["Extreme Speed"]]
+ },
+ {
+ "species": "Zygarde",
+ "item": "Leftovers",
+ "ability": "Aura Break",
+ "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 56},
+ "nature": "Careful",
+ "moves": [["Substitute"], ["Coil"], ["Earthquake"], ["Dragon Tail"]]
+ }
+ ]
+ },
+ "weavile": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Weavile",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Ice Punch"], ["Knock Off"], ["Ice Shard"], ["Low Kick"]]
+ },
+ {
+ "species": "Weavile",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Pursuit"], ["Knock Off"], ["Ice Shard"], ["Icicle Crash"]]
+ }
+ ]
+ },
+ "volcarona": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Volcarona",
+ "item": "Leftovers",
+ "ability": "Flame Body",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124},
+ "nature": "Bold",
+ "moves": [["Quiver Dance"], ["Fiery Dance"], ["Giga Drain"], ["Roost"]]
+ },
+ {
+ "species": "Volcarona",
+ "item": "Lum Berry",
+ "ability": "Flame Body",
+ "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
+ "nature": "Modest",
+ "moves": [["Quiver Dance"], ["Fire Blast"], ["Giga Drain"], ["Bug Buzz"]]
+ }
+ ]
+ },
+ "victini": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Victini",
+ "item": "Choice Band",
+ "ability": "Victory Star",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["V-create"], ["Bolt Strike"], ["Brick Break"], ["U-turn"]]
+ },
+ {
+ "species": "Victini",
+ "item": "Choice Scarf",
+ "ability": "Victory Star",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Final Gambit"]]
+ },
+ {
+ "species": "Victini",
+ "item": "Expert Belt",
+ "ability": "Victory Star",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Blue Flare"], ["Thunder"], ["Glaciate"], ["Focus Blast"]]
+ },
+ {
+ "species": "Victini",
+ "item": "Leftovers",
+ "ability": "Victory Star",
+ "evs": {"hp": 248, "atk": 32, "def": 68, "spa": 0, "spd": 0, "spe": 160},
+ "nature": "Adamant",
+ "moves": [["Taunt"], ["V-create"], ["Will-O-Wisp"], ["Bolt Strike"]]
+ },
+ {
+ "species": "Victini",
+ "item": "Leftovers",
+ "ability": "Victory Star",
+ "evs": {"hp": 96, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 160},
+ "nature": "Adamant",
+ "moves": [["Substitute"], ["V-create"], ["Bolt Strike"], ["Power-Up Punch"]]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tornadus-Therian",
+ "item": "Assault Vest",
+ "ability": "Regenerator",
+ "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 216},
+ "nature": "Timid",
+ "moves": [["Hurricane"], ["Focus Blast"], ["Knock Off"], ["U-turn"]]
+ },
+ {
+ "species": "Tornadus-Therian",
+ "item": "Life Orb",
+ "ability": "Regenerator",
+ "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 216, "spd": 0, "spe": 216},
+ "nature": "Naive",
+ "moves": [["Hurricane"], ["Superpower"], ["U-turn"], ["Taunt"]]
+ }
+ ]
+ },
+ "togekiss": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Togekiss",
+ "item": "Lum Berry",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Nasty Plot"], ["Air Slash"], ["Aura Sphere"], ["Roost"]]
+ },
+ {
+ "species": "Togekiss",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Thunder Wave"], ["Air Slash"], ["Defog"], ["Roost"]]
+ }
+ ]
+ },
+ "staraptor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Staraptor",
+ "item": "Choice Band",
+ "ability": "Reckless",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Close Combat"], ["U-turn"], ["Double-Edge"]]
+ },
+ {
+ "species": "Staraptor",
+ "item": "Choice Scarf",
+ "ability": "Reckless",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Double-Edge"], ["Close Combat"], ["U-turn"]]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Thundurus-Therian",
+ "item": "Leftovers",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
+ },
+ {
+ "species": "Thundurus-Therian",
+ "item": "Choice Scarf",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"], ["U-turn"]]
+ },
+ {
+ "species": "Thundurus-Therian",
+ "item": "Leftovers",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128},
+ "nature": "Modest",
+ "moves": [["Agility"], ["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "scolipede": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Scolipede",
+ "item": "Life Orb",
+ "ability": "Speed Boost",
+ "evs": {"hp": 16, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 236},
+ "nature": "Adamant",
+ "moves": [["Megahorn"], ["Earthquake"], ["Poison Jab"], ["Protect"]]
+ }
+ ]
+ },
+ "medicham": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Medicham",
+ "item": "Medichamite",
+ "ability": "Pure Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Fake Out"], ["Ice Punch"]]
+ }
+ ]
+ },
+ "manaphy": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Manaphy",
+ "item": "Leftovers",
+ "ability": "Hydration",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Rest"], ["Rain Dance"], ["Scald"]]
+ },
+ {
+ "species": "Manaphy",
+ "item": "Leftovers",
+ "ability": "Hydration",
+ "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
+ "nature": "Timid",
+ "moves": [["Tail Glow"], ["Surf"], ["Ice Beam"], ["Energy Ball"]]
+ },
+ {
+ "species": "Manaphy",
+ "item": "Leftovers",
+ "ability": "Hydration",
+ "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
+ "nature": "Timid",
+ "moves": [["Tail Glow"], ["Rain Dance"], ["Scald"], ["Psychic"]]
+ }
+ ]
+ },
+ "klefki": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Klefki",
+ "item": "Light Clay",
+ "ability": "Prankster",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Reflect"], ["Light Screen"], ["Spikes"], ["Foul Play"]]
+ },
+ {
+ "species": "Klefki",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Thunder Wave"], ["Magnet Rise"], ["Spikes"], ["Play Rough"]]
+ }
+ ]
+ },
+ "hawlucha": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hawlucha",
+ "item": "Sitrus Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244},
+ "nature": "Jolly",
+ "moves": [["Substitute"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]]
+ },
+ {
+ "species": "Hawlucha",
+ "item": "Power Herb",
+ "ability": "Unburden",
+ "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244},
+ "nature": "Jolly",
+ "moves": [["Sky Attack"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]]
+ }
+ ]
+ },
+ "diggersby": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Diggersby",
+ "item": "Choice Scarf",
+ "ability": "Huge Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Return"], ["Earthquake"], ["Fire Punch"], ["U-turn"]],
+ "happiness": 255
+ },
+ {
+ "species": "Diggersby",
+ "item": "Focus Sash",
+ "ability": "Huge Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]],
+ "happiness": 255
+ },
+ {
+ "species": "Diggersby",
+ "item": "Life Orb",
+ "ability": "Huge Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]],
+ "happiness": 255
+ },
+ {
+ "species": "Diggersby",
+ "item": "Focus Sash",
+ "ability": "Huge Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Fire Punch"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "crawdaunt": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Crawdaunt",
+ "item": "Life Orb",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]]
+ },
+ {
+ "species": "Crawdaunt",
+ "item": "Choice Band",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Crunch"]]
+ }
+ ]
+ },
+ "alakazam": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Alakazam",
+ "item": "Focus Sash",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball"], ["Hidden Power Ice"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Alakazam",
+ "item": "Life Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]]
+ },
+ {
+ "species": "Alakazam",
+ "item": "Life Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Alakazam",
+ "item": "Alakazite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]]
+ }
+ ]
+ },
+ "zapdos": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zapdos",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 68, "spd": 0, "spe": 20},
+ "nature": "Bold",
+ "moves": [["Thunderbolt"], ["Roost"], ["Defog"], ["Heat Wave"]]
+ }
+ ]
+ },
+ "venusaur": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Venusaur",
+ "item": "Venusaurite",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Leech Seed"]]
+ },
+ {
+ "species": "Venusaur",
+ "item": "Venusaurite",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 232, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 20},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]]
+ }
+ ]
+ },
+ "tyranitar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tyranitar",
+ "item": "Choice Scarf",
+ "ability": "Sand Stream",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]]
+ },
+ {
+ "species": "Tyranitar",
+ "item": "Tyranitarite",
+ "ability": "Sand Stream",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Stone Edge"], ["Superpower"], ["Ice Punch"]]
+ },
+ {
+ "species": "Tyranitar",
+ "item": "Leftovers",
+ "ability": "Sand Stream",
+ "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 180, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Stealth Rock"], ["Stone Edge"], ["Ice Beam"], ["Pursuit"]]
+ },
+ {
+ "species": "Tyranitar",
+ "item": "Choice Band",
+ "ability": "Sand Stream",
+ "evs": {"hp": 100, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 156},
+ "nature": "Adamant",
+ "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]]
+ }
+ ]
+ },
+ "thundurus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Thundurus",
+ "item": "Life Orb",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 180, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Thunderbolt"], ["Knock Off"], ["Superpower"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Thundurus",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
+ },
+ {
+ "species": "Thundurus",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunder Wave"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "terrakion": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Terrakion",
+ "item": "Choice Scarf",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["Stone Edge"], ["X-Scissor"], ["Rock Slide"]]
+ },
+ {
+ "species": "Terrakion",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Close Combat"], ["Stone Edge"], ["Swords Dance"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Terrakion",
+ "item": "Focus Sash",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Close Combat"], ["Stone Edge"], ["Taunt"]]
+ },
+ {
+ "species": "Terrakion",
+ "item": "Lum Berry",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Rock Polish"], ["Stone Edge"], ["Close Combat"]]
+ }
+ ]
+ },
+ "talonflame": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Talonflame",
+ "ability": "Gale Wings",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Bulk Up"], ["Acrobatics"], ["Roost"], ["Taunt"]]
+ },
+ {
+ "species": "Talonflame",
+ "item": "Choice Band",
+ "ability": "Gale Wings",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Brave Bird"], ["Flare Blitz"], ["U-turn"], ["Steel Wing"]]
+ },
+ {
+ "species": "Talonflame",
+ "ability": "Gale Wings",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Acrobatics"], ["Taunt"], ["Roost"], ["Will-O-Wisp"]]
+ },
+ {
+ "species": "Talonflame",
+ "item": "Sharp Beak",
+ "ability": "Gale Wings",
+ "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Brave Bird"], ["Flare Blitz"], ["Roost"]]
+ },
+ {
+ "species": "Talonflame",
+ "item": "Liechi Berry",
+ "ability": "Gale Wings",
+ "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Natural Gift"], ["Brave Bird"], ["Flare Blitz"]]
+ },
+ {
+ "species": "Talonflame",
+ "ability": "Gale Wings",
+ "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Acrobatics"], ["Will-O-Wisp"], ["Roost"]]
+ }
+ ]
+ },
+ "sylveon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sylveon",
+ "item": "Choice Specs",
+ "ability": "Pixilate",
+ "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 12},
+ "nature": "Modest",
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Ground"]]
+ }
+ ]
+ },
+ "slowbro": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Slowbro",
+ "item": "Slowbronite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 80, "spa": 0, "spd": 176, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Calm Mind"], ["Slack Off"], ["Psyshock"]]
+ },
+ {
+ "species": "Slowbro",
+ "item": "Slowbronite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Fire Blast"], ["Scald"], ["Psyshock"], ["Slack Off"]]
+ },
+ {
+ "species": "Slowbro",
+ "item": "Leftovers",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 24, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Psyshock"], ["Thunder Wave"], ["Slack Off"]]
+ }
+ ]
+ },
+ "skarmory": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Skarmory",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Iron Head"], ["Spikes"], ["Roost"], ["Whirlwind"]]
+ },
+ {
+ "species": "Skarmory",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Roost"], ["Defog"], ["Brave Bird"], ["Whirlwind"]]
+ },
+ {
+ "species": "Skarmory",
+ "gender": "F",
+ "item": "Custap Berry",
+ "ability": "Sturdy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Spikes"], ["Taunt"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "scizor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Scizor",
+ "item": "Scizorite",
+ "ability": "Light Metal",
+ "evs": {"hp": 248, "atk": 84, "def": 0, "spa": 0, "spd": 176, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Swords Dance"], ["Roost"], ["Bullet Punch"], ["Knock Off"]]
+ },
+ {
+ "species": "Scizor",
+ "item": "Choice Band",
+ "ability": "Technician",
+ "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["U-turn"], ["Bullet Punch"], ["Knock Off"], ["Superpower"]]
+ },
+ {
+ "species": "Scizor",
+ "item": "Scizorite",
+ "ability": "Light Metal",
+ "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Defog"], ["Roost"], ["Bullet Punch"], ["Knock Off"]]
+ },
+ {
+ "species": "Scizor",
+ "item": "Scizorite",
+ "ability": "Light Metal",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["Bug Bite"], ["Superpower"]]
+ }
+ ]
+ },
+ "rotomwash": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom-Wash",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44},
+ "nature": "Bold",
+ "moves": [["Volt Switch"], ["Hydro Pump"], ["Will-O-Wisp"], ["Pain Split"]]
+ }
+ ]
+ },
+ "pinsir": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Pinsir",
+ "item": "Pinsirite",
+ "ability": "Hyper Cutter",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Return"], ["Close Combat"], ["Quick Attack"]],
+ "happiness": 255
+ },
+ {
+ "species": "Pinsir",
+ "item": "Pinsirite",
+ "ability": "Hyper Cutter",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Return"], ["Earthquake"], ["Quick Attack"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "mew": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mew",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152},
+ "nature": "Impish",
+ "moves": [["Defog"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]]
+ },
+ {
+ "species": "Mew",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152},
+ "nature": "Impish",
+ "moves": [["Taunt"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]]
+ }
+ ]
+ },
+ "metagross": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Metagross",
+ "item": "Metagrossite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Grass Knot"]]
+ },
+ {
+ "species": "Metagross",
+ "item": "Metagrossite",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Pursuit"]]
+ },
+ {
+ "species": "Metagross",
+ "item": "Metagrossite",
+ "ability": "Clear Body",
+ "evs": {"hp": 80, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 176},
+ "nature": "Adamant",
+ "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Earthquake"], ["Agility"]]
+ }
+ ]
+ },
+ "manectric": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Manectric",
+ "item": "Manectite",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Overheat"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Manectric",
+ "item": "Manectite",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Flamethrower"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mandibuzz",
+ "item": "Leftovers",
+ "ability": "Overcoat",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 108, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Foul Play"], ["Roost"], ["Taunt"], ["Defog"]]
+ }
+ ]
+ },
+ "mamoswine": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mamoswine",
+ "item": "Focus Sash",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Endeavor"], ["Ice Shard"], ["Earthquake"]]
+ },
+ {
+ "species": "Mamoswine",
+ "item": "Life Orb",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 16, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Earthquake"], ["Ice Shard"], ["Icicle Crash"], ["Freeze-Dry"]]
+ }
+ ]
+ },
+ "magnezone": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Magnezone",
+ "item": "Choice Scarf",
+ "ability": "Magnet Pull",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]]
+ },
+ {
+ "species": "Magnezone",
+ "item": "Choice Specs",
+ "ability": "Magnet Pull",
+ "evs": {"hp": 172, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 84},
+ "nature": "Modest",
+ "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]]
+ }
+ ]
+ },
+ "lopunny": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Lopunny",
+ "item": "Lopunnite",
+ "ability": "Limber",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Ice Punch"]],
+ "happiness": 255
+ },
+ {
+ "species": "Lopunny",
+ "item": "Lopunnite",
+ "ability": "Limber",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Power-Up Punch"]],
+ "happiness": 255
+ },
+ {
+ "species": "Lopunny",
+ "item": "Lopunnite",
+ "ability": "Limber",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Return"], ["Substitute"], ["Encore"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "latios": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Latios",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Trick"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Earthquake"], ["Defog"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Roost"], ["Defog"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Hidden Power Fire"], ["Defog"]]
+ },
+ {
+ "species": "Latios",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Roost"]]
+ },
+ {
+ "species": "Latios",
+ "gender": "M",
+ "item": "Latiosite",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Psyshock"], ["Draco Meteor"], ["Earthquake"], ["Hidden Power Fire"]]
+ }
+ ]
+ },
+ "latias": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Latias",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Healing Wish"]]
+ },
+ {
+ "species": "Latias",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 72, "atk": 0, "def": 0, "spa": 184, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Roost"]]
+ },
+ {
+ "species": "Latias",
+ "gender": "F",
+ "item": "Latiasite",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 100, "spa": 0, "spd": 0, "spe": 160},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Roost"], ["Substitute"], ["Calm Mind"], ["Stored Power"]]
+ },
+ {
+ "species": "Latias",
+ "gender": "F",
+ "item": "Latiasite",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 68, "spa": 0, "spd": 0, "spe": 192},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Thunder Wave"], ["Roar"], ["Recover"], ["Dragon Pulse"]]
+ }
+ ]
+ },
+ "landorustherian": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Landorus-Therian",
+ "item": "Choice Scarf",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 24, "spa": 0, "spd": 0, "spe": 232},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["U-turn"], ["Explosion"], ["Stone Edge"]]
+ },
+ {
+ "species": "Landorus-Therian",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 8, "spe": 8},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["U-turn"], ["Stone Edge"]]
+ },
+ {
+ "species": "Landorus-Therian",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 56, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 232},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Rock Polish"], ["Earthquake"], ["Stone Edge"]]
+ },
+ {
+ "species": "Landorus-Therian",
+ "item": "Earth Plate",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Stone Edge"], ["U-turn"]]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kyurem-Black",
+ "item": "Choice Scarf",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 32, "spd": 0, "spe": 224},
+ "nature": "Naive",
+ "moves": [["Outrage"], ["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"]]
+ },
+ {
+ "species": "Kyurem-Black",
+ "item": "Life Orb",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 56, "spd": 0, "spe": 200},
+ "nature": "Lonely",
+ "moves": [["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"], ["Iron Head"]]
+ },
+ {
+ "species": "Kyurem-Black",
+ "item": "Life Orb",
+ "ability": "Teravolt",
+ "evs": {"hp": 0, "atk": 56, "def": 0, "spa": 252, "spd": 0, "spe": 200},
+ "nature": "Mild",
+ "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage"]]
+ },
+ {
+ "species": "Kyurem-Black",
+ "item": "Leftovers",
+ "ability": "Teravolt",
+ "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200},
+ "nature": "Mild",
+ "moves": [["Substitute"], ["Ice Beam"], ["Fusion Bolt"], ["Earth Power"]]
+ }
+ ]
+ },
+ "keldeo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Keldeo",
+ "item": "Choice Specs",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Icy Wind"]]
+ },
+ {
+ "species": "Keldeo",
+ "item": "Choice Scarf",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Hidden Power Electric"]]
+ },
+ {
+ "species": "Keldeo",
+ "item": "Leftovers",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Scald"], ["Secret Sword"], ["Substitute"], ["Calm Mind"]]
+ },
+ {
+ "species": "Keldeo",
+ "item": "Salac Berry",
+ "ability": "Justified",
+ "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Endeavor"], ["Substitute"], ["Hydro Pump"], ["Secret Sword"]]
+ }
+ ]
+ },
+ "heracross": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Heracross",
+ "item": "Heracronite",
+ "ability": "Guts",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["Pin Missile"], ["Rock Blast"], ["Swords Dance"]]
+ },
+ {
+ "species": "Heracross",
+ "item": "Toxic Orb",
+ "ability": "Guts",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["Megahorn"], ["Facade"], ["Swords Dance"]]
+ }
+ ]
+ },
+ "heatran": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Heatran",
+ "item": "Choice Scarf",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Overheat"], ["Flash Cannon"], ["Earth Power"], ["Stone Edge"]]
+ },
+ {
+ "species": "Heatran",
+ "item": "Air Balloon",
+ "ability": "Flash Fire",
+ "evs": {"hp": 12, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 244},
+ "nature": "Timid",
+ "moves": [["Stealth Rock"], ["Fire Blast"], ["Taunt"], ["Earth Power"]]
+ },
+ {
+ "species": "Heatran",
+ "item": "Leftovers",
+ "ability": "Flash Fire",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 68},
+ "nature": "Calm",
+ "moves": [["Lava Plume"], ["Toxic"], ["Taunt"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "gyarados": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gyarados",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 88, "atk": 192, "def": 4, "spa": 0, "spd": 0, "spe": 224},
+ "nature": "Adamant",
+ "moves": [["Substitute"], ["Dragon Dance"], ["Waterfall"], ["Bounce"]]
+ },
+ {
+ "species": "Gyarados",
+ "item": "Gyaradosite",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Crunch"], ["Earthquake"]]
+ }
+ ]
+ },
+ "gallade": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Gallade",
+ "item": "Galladite",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Close Combat"], ["Knock Off"], ["Zen Headbutt"]]
+ },
+ {
+ "species": "Gallade",
+ "item": "Galladite",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Close Combat"], ["Ice Punch"], ["Zen Headbutt"]]
+ }
+ ]
+ },
+ "gliscor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gliscor",
+ "item": "Toxic Orb",
+ "ability": "Poison Heal",
+ "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
+ "nature": "Careful",
+ "moves": [["Swords Dance"], ["Roost"], ["Knock Off"], ["Earthquake"]]
+ },
+ {
+ "species": "Gliscor",
+ "item": "Toxic Orb",
+ "ability": "Poison Heal",
+ "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
+ "nature": "Careful",
+ "moves": [["Taunt"], ["Roost"], ["Knock Off"], ["Earthquake"]]
+ },
+ {
+ "species": "Gliscor",
+ "item": "Toxic Orb",
+ "ability": "Poison Heal",
+ "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
+ "nature": "Careful",
+ "moves": [["Taunt"], ["Roost"], ["Toxic"], ["Earthquake"]]
+ },
+ {
+ "species": "Gliscor",
+ "item": "Toxic Orb",
+ "ability": "Poison Heal",
+ "evs": {"hp": 244, "atk": 0, "def": 28, "spa": 0, "spd": 0, "spe": 236},
+ "nature": "Impish",
+ "moves": [["Substitute"], ["Toxic"], ["Protect"], ["Earthquake"]]
+ }
+ ]
+ },
+ "gengar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gengar",
+ "item": "Black Sludge",
+ "ability": "Levitate",
+ "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hex"], ["Taunt"], ["Will-O-Wisp"], ["Sludge Wave"]]
+ },
+ {
+ "species": "Gengar",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Taunt"]]
+ },
+ {
+ "species": "Gengar",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Pain Split"], ["Shadow Ball"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "gardevoir": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Gardevoir",
+ "item": "Gardevoirite",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Calm Mind"], ["Hyper Voice"], ["Psyshock"], ["Focus Blast"]]
+ },
+ {
+ "species": "Gardevoir",
+ "item": "Gardevoirite",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Taunt"]]
+ },
+ {
+ "species": "Gardevoir",
+ "item": "Gardevoirite",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Will-O-Wisp"]]
+ }
+ ]
+ },
+ "garchomp": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Garchomp",
+ "item": "Rocky Helmet",
+ "ability": "Rough Skin",
+ "evs": {"hp": 252, "atk": 0, "def": 164, "spa": 0, "spd": 76, "spe": 16},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Tail"], ["Fire Blast"]]
+ },
+ {
+ "species": "Garchomp",
+ "item": "Focus Sash",
+ "ability": "Rough Skin",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Claw"], ["Fire Blast"]]
+ },
+ {
+ "species": "Garchomp",
+ "item": "Lum Berry",
+ "ability": "Rough Skin",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Outrage"], ["Swords Dance"]]
+ },
+ {
+ "species": "Garchomp",
+ "item": "Garchompite",
+ "ability": "Rough Skin",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Draco Meteor"], ["Earthquake"], ["Fire Blast"], ["Stone Edge"]]
+ },
+ {
+ "species": "Garchomp",
+ "item": "Choice Scarf",
+ "ability": "Rough Skin",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Dragon Claw"]]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ferrothorn",
+ "item": "Leftovers",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Power Whip"]]
+ },
+ {
+ "species": "Ferrothorn",
+ "item": "Shed Shell",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Protect"]]
+ },
+ {
+ "species": "Ferrothorn",
+ "item": "Leftovers",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Protect"], ["Leech Seed"], ["Gyro Ball"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "excadrill": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Excadrill",
+ "item": "Choice Scarf",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]]
+ },
+ {
+ "species": "Excadrill",
+ "item": "Air Balloon",
+ "ability": "Sand Rush",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Swords Dance"]]
+ },
+ {
+ "species": "Excadrill",
+ "item": "Life Orb",
+ "ability": "Sand Rush",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]]
+ },
+ {
+ "species": "Excadrill",
+ "item": "Leftovers",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Earthquake"], ["Iron Head"], ["Rapid Spin"], ["Toxic"]]
+ }
+ ]
+ },
+ "dragonite": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dragonite",
+ "item": "Choice Band",
+ "ability": "Multiscale",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Outrage"], ["Extreme Speed"], ["Thunder Punch"], ["Superpower"]]
+ },
+ {
+ "species": "Dragonite",
+ "item": "Lum Berry",
+ "ability": "Multiscale",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Earthquake"]]
+ },
+ {
+ "species": "Dragonite",
+ "item": "Lum Berry",
+ "ability": "Multiscale",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Fire Punch"]]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Conkeldurr",
+ "item": "Assault Vest",
+ "ability": "Guts",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 236, "spe": 20},
+ "nature": "Adamant",
+ "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Poison Jab"]]
+ },
+ {
+ "species": "Conkeldurr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 48, "atk": 252, "def": 0, "spa": 0, "spd": 208, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Thunder Punch"]]
+ }
+ ]
+ },
+ "clefable": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Clefable",
+ "item": "Leftovers",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Calm Mind"], ["Moonblast"], ["Soft-Boiled"], ["Flamethrower"]]
+ },
+ {
+ "species": "Clefable",
+ "item": "Leftovers",
+ "ability": "Unaware",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Heal Bell"]]
+ },
+ {
+ "species": "Clefable",
+ "item": "Leftovers",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Stealth Rock"], ["Moonblast"], ["Thunder Wave"], ["Soft-Boiled"]]
+ }
+ ]
+ },
+ "charizard": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Charizard",
+ "item": "Charizardite X",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Roost"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Charizardite X",
+ "ability": "Blaze",
+ "evs": {"hp": 248, "atk": 24, "def": 0, "spa": 0, "spd": 180, "spe": 56},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Dragon Claw"], ["Will-O-Wisp"], ["Roost"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Charizardite X",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Earthquake"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Charizardite X",
+ "ability": "Blaze",
+ "evs": {"hp": 144, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 112},
+ "nature": "Adamant",
+ "moves": [["Tailwind"], ["Outrage"], ["Flare Blitz"], ["Swords Dance"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Charizardite Y",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Solar Beam"], ["Focus Blast"], ["Roost"]]
+ }
+ ]
+ },
+ "chansey": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Chansey",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Soft-Boiled"], ["Heal Bell"], ["Stealth Rock"], ["Seismic Toss"]]
+ },
+ {
+ "species": "Chansey",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Wish"], ["Soft-Boiled"], ["Seismic Toss"], ["Toxic"]]
+ }
+ ]
+ },
+ "breloom": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Breloom",
+ "item": "Toxic Orb",
+ "ability": "Poison Heal",
+ "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Superpower"], ["Seed Bomb"], ["Facade"]]
+ },
+ {
+ "species": "Breloom",
+ "item": "Focus Sash",
+ "ability": "Technician",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Rock Tomb"]]
+ },
+ {
+ "species": "Breloom",
+ "item": "Life Orb",
+ "ability": "Technician",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Swords Dance"]]
+ }
+ ]
+ },
+ "bisharp": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Bisharp",
+ "item": "Black Glasses",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 52, "spe": 204},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Pursuit"]]
+ },
+ {
+ "species": "Bisharp",
+ "item": "Life Orb",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]]
+ },
+ {
+ "species": "Bisharp",
+ "item": "Life Orb",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]]
+ },
+ {
+ "species": "Bisharp",
+ "item": "Black Glasses",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]]
+ }
+ ]
+ },
+ "azumarill": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Azumarill",
+ "item": "Assault Vest",
+ "ability": "Huge Power",
+ "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 16, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Knock Off"]]
+ },
+ {
+ "species": "Azumarill",
+ "item": "Sitrus Berry",
+ "ability": "Huge Power",
+ "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164},
+ "nature": "Adamant",
+ "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]]
+ },
+ {
+ "species": "Azumarill",
+ "item": "Choice Band",
+ "ability": "Huge Power",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Superpower"]]
+ }
+ ]
+ },
+ "altaria": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Cloud Nine",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Earthquake"]],
+ "happiness": 255
+ },
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Cloud Nine",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28},
+ "nature": "Impish",
+ "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Substitute"]],
+ "happiness": 255
+ },
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Cloud Nine",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28},
+ "nature": "Impish",
+ "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Heal Bell"]],
+ "happiness": 255
+ },
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Cloud Nine",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 168, "spd": 0, "spe": 92},
+ "nature": "Modest",
+ "moves": [["Hyper Voice"], ["Fire Blast"], ["Roost"], ["Earthquake"]]
+ },
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 104, "spa": 0, "spd": 156, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Hyper Voice"], ["Roost"], ["Heal Bell"], ["Flamethrower"]]
+ },
+ {
+ "species": "Altaria",
+ "item": "Altarianite",
+ "ability": "Cloud Nine",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Return"], ["Earthquake"], ["Fire Blast"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "serperior": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Serperior",
+ "item": "Life Orb",
+ "ability": "Contrary",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Glare"]]
+ },
+ {
+ "species": "Serperior",
+ "item": "Meadow Plate",
+ "ability": "Contrary",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Taunt"]]
+ },
+ {
+ "species": "Serperior",
+ "item": "Leftovers",
+ "ability": "Contrary",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Ground"], ["Substitute"]]
+ },
+ {
+ "species": "Serperior",
+ "item": "Life Orb",
+ "ability": "Contrary",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Giga Drain"]]
+ }
+ ]
+ },
+ "feraligatr": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]]
+ },
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]]
+ }
+ ]
+ },
+ "raikou": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Raikou",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Raikou",
+ "item": "Choice Specs",
+ "ability": "Pressure",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Raikou",
+ "item": "Assault Vest",
+ "ability": "Pressure",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]]
+ }
+ ]
+ }
+ },
+ "UU": {
+ "gardevoir": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gardevoir",
+ "item": "Choice Specs",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Trick"]]
+ },
+ {
+ "species": "Gardevoir",
+ "item": "Choice Specs",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Gardevoir",
+ "item": "Choice Specs",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Moonblast"], ["Psyshock"], ["Shadow Ball"], ["Trick"]]
+ },
+ {
+ "species": "Gardevoir",
+ "item": "Leftovers",
+ "ability": "Trace",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Moonblast"], ["Psyshock"], ["Focus Blast", "Substitute"]]
+ }
+ ]
+ },
+ "sableye": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sableye",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Recover"], ["Will-O-Wisp"], ["Taunt"], ["Knock Off"]]
+ }
+ ]
+ },
+ "diancie": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Diancie",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0},
+ "nature": "Quiet",
+ "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Earth Power", "Protect"]]
+ }
+ ]
+ },
+ "metagross": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Metagross",
+ "item": "Shuca Berry",
+ "ability": "Clear Body",
+ "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Earthquake", "Ice Punch", "Thunder Punch"], ["Zen Headbutt"], ["Bullet Punch"]]
+ }
+ ]
+ },
+ "gyarados": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gyarados",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Bounce"], ["Substitute", "Earthquake", "Stone Edge"]]
+ },
+ {
+ "species": "Gyarados",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 216, "atk": 60, "def": 184, "spa": 0, "spd": 0, "spe": 48},
+ "nature": "Impish",
+ "moves": [["Rest"], ["Sleep Talk"], ["Waterfall"], ["Toxic", "Roar"]]
+ }
+ ]
+ },
+ "hoopa": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Trick Room"], ["Shadow Ball"], ["Psyshock", "Psychic"], ["Focus Blast"]]
+ },
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Substitute"]]
+ },
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Nasty Plot"]]
+ },
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Focus Blast"], ["Nasty Plot"], ["Substitute"]]
+ }
+ ]
+ },
+ "crobat": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Crobat",
+ "item": "Choice Band",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Sleep Talk"], ["Brave Bird"], ["Cross Poison"], ["U-turn"]]
+ },
+ {
+ "species": "Crobat",
+ "item": "Black Sludge",
+ "ability": "Infiltrator",
+ "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 4, "spe": 176},
+ "nature": "Jolly",
+ "moves": [["Roost"], ["Defog"], ["Taunt"], ["Brave Bird"]]
+ }
+ ]
+ },
+ "entei": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Entei",
+ "item": "Choice Band",
+ "ability": "Pressure",
+ "shiny": true,
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
+ },
+ {
+ "species": "Entei",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "shiny": true,
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
+ },
+ {
+ "species": "Entei",
+ "item": "Assault Vest",
+ "ability": "Pressure",
+ "shiny": true,
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 240, "spe": 16},
+ "nature": "Adamant",
+ "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
+ }
+ ]
+ },
+ "suicune": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Suicune",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Rest"], ["Sleep Talk"], ["Calm Mind"], ["Scald"]]
+ },
+ {
+ "species": "Suicune",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Rest"], ["Sleep Talk"], ["Roar"], ["Scald"]]
+ },
+ {
+ "species": "Suicune",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 64},
+ "nature": "Modest",
+ "moves": [["Substitute"], ["Calm Mind"], ["Hydro Pump"], ["Ice Beam"]]
+ },
+ {
+ "species": "Suicune",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Aerodactyl",
+ "item": "Aerodactylite",
+ "ability": "Pressure",
+ "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
+ "nature": "Jolly",
+ "moves": [["Hone Claws"], ["Stone Edge"], ["Aerial Ace"], ["Aqua Tail"]]
+ },
+ {
+ "species": "Aerodactyl",
+ "item": "Aerodactylite",
+ "ability": "Pressure",
+ "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
+ "nature": "Jolly",
+ "moves": [["Roost"], ["Taunt"], ["Stone Edge"], ["Aerial Ace"]]
+ }
+ ]
+ },
+ "hydreigon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hydreigon",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Roost"], ["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"]]
+ },
+ {
+ "species": "Hydreigon",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Roost"], ["Draco Meteor"], ["Fire Blast"], ["Superpower"]]
+ },
+ {
+ "species": "Hydreigon",
+ "item": "Choice Specs",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"], ["Flash Cannon"]]
+ },
+ {
+ "species": "Hydreigon",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["U-turn"], ["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "machamp": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Machamp",
+ "item": "Assault Vest",
+ "ability": "No Guard",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]]
+ },
+ {
+ "species": "Machamp",
+ "item": "Choice Band",
+ "ability": "No Guard",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]]
+ },
+ {
+ "species": "Machamp",
+ "item": "Leftovers",
+ "ability": "No Guard",
+ "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Adamant",
+ "moves": [["Rest"], ["Sleep Talk"], ["Dynamic Punch"], ["Knock Off"]]
+ },
+ {
+ "species": "Machamp",
+ "item": "Leftovers",
+ "ability": "No Guard",
+ "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
+ "nature": "Adamant",
+ "moves": [["Bulk Up"], ["Dynamic Punch"], ["Stone Edge"], ["Ice Punch"]]
+ }
+ ]
+ },
+ "mienshao": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mienshao",
+ "item": "Life Orb",
+ "ability": "Regenerator",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Fake Out"], ["High Jump Kick"], ["Knock Off"], ["U-turn"]]
+ },
+ {
+ "species": "Mienshao",
+ "item": "Choice Scarf",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Knock Off"], ["Poison Jab"], ["U-turn"]]
+ }
+ ]
+ },
+ "absol": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Absol",
+ "item": "Absolite",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Sucker Punch"], ["Knock Off"], ["Superpower"]]
+ },
+ {
+ "species": "Absol",
+ "item": "Absolite",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 44, "spd": 0, "spe": 224},
+ "nature": "Naive",
+ "moves": [["Sucker Punch"], ["Knock Off"], ["Ice Beam"], ["Fire Blast"]]
+ }
+ ]
+ },
+ "aggron": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Aggron",
+ "item": "Aggronite",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 16, "spa": 0, "spd": 244, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Rest"], ["Sleep Talk"], ["Heavy Slam"], ["Earthquake"]]
+ },
+ {
+ "species": "Aggron",
+ "item": "Aggronite",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 124, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Roar"], ["Heavy Slam"], ["Earthquake"]]
+ }
+ ]
+ },
+ "beedrill": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Beedrill",
+ "item": "Beedrillite",
+ "ability": "Swarm",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Protect"], ["U-turn"], ["Poison Jab"], ["Drill Run"]]
+ }
+ ]
+ },
+ "blastoise": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Blastoise",
+ "item": "Blastoisinite",
+ "ability": "Rain Dish",
+ "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Aura Sphere"], ["Dark Pulse"]]
+ },
+ {
+ "species": "Blastoise",
+ "item": "Blastoisinite",
+ "ability": "Torrent",
+ "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 44, "spd": 64, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Rapid Spin"], ["Scald"], ["Ice Beam"], ["Dark Pulse"]]
+ }
+ ]
+ },
+ "empoleon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Empoleon",
+ "item": "Leftovers",
+ "ability": "Torrent",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Stealth Rock"], ["Defog"], ["Roar"], ["Scald"]]
+ },
+ {
+ "species": "Empoleon",
+ "item": "Choice Specs",
+ "ability": "Torrent",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Flash Cannon"], ["Ice Beam"], ["Grass Knot"]]
+ },
+ {
+ "species": "Empoleon",
+ "item": "Petaya Berry",
+ "ability": "Torrent",
+ "evs": {"hp": 12, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 240},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Agility"], ["Substitute"], ["Surf"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "krookodile": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Krookodile",
+ "item": "Choice Band",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Pursuit"], ["Earthquake"], ["Knock Off"], ["Superpower"]]
+ },
+ {
+ "species": "Krookodile",
+ "item": "Choice Scarf",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Superpower"]]
+ },
+ {
+ "species": "Krookodile",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Earthquake"], ["Knock Off"]]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Nidoqueen",
+ "gender": "F",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Stealth Rock"], ["Sludge Wave"], ["Earth Power"], ["Ice Beam"]]
+ },
+ {
+ "species": "Nidoqueen",
+ "gender": "F",
+ "item": "Black Sludge",
+ "ability": "Sheer Force",
+ "evs": {"hp": 248, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 20},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Roar"], ["Earth Power"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "shaymin": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Shaymin",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]]
+ },
+ {
+ "species": "Shaymin",
+ "item": "Life Orb",
+ "ability": "Natural Cure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Rest"], ["Seed Flare"], ["Earth Power"], ["Air Slash"]]
+ }
+ ]
+ },
+ "swampert": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Swampert",
+ "item": "Leftovers",
+ "ability": "Torrent",
+ "evs": {"hp": 240, "atk": 16, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Stealth Rock"], ["Roar"], ["Earthquake"], ["Scald"]]
+ },
+ {
+ "species": "Swampert",
+ "item": "Choice Band",
+ "ability": "Torrent",
+ "evs": {"hp": 204, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 52},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Earthquake"], ["Ice Beam"], ["Superpower"]]
+ },
+ {
+ "species": "Swampert",
+ "item": "Chesto Berry",
+ "ability": "Torrent",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Curse"], ["Earthquake"], ["Ice Beam"]]
+ },
+ {
+ "species": "Swampert",
+ "item": "Swampertite",
+ "ability": "Torrent",
+ "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152},
+ "nature": "Adamant",
+ "moves": [["Rain Dance"], ["Waterfall"], ["Earthquake"], ["Ice Punch"]]
+ }
+ ]
+ },
+ "ampharos": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Ampharos",
+ "item": "Ampharosite",
+ "ability": "Static",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Agility"], ["Dragon Pulse"], ["Thunderbolt"], ["Focus Blast"]]
+ },
+ {
+ "species": "Ampharos",
+ "gender": "M",
+ "item": "Ampharosite",
+ "ability": "Static",
+ "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124},
+ "nature": "Modest",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Dragon Pulse"], ["Focus Blast"]]
+ },
+ {
+ "species": "Ampharos",
+ "item": "Ampharosite",
+ "ability": "Static",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 8, "spd": 0, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]]
+ },
+ {
+ "species": "Ampharos",
+ "item": "Ampharosite",
+ "ability": "Static",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]]
+ }
+ ]
+ },
+ "arcanine": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arcanine",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Morning Sun"], ["Will-O-Wisp"], ["Extreme Speed"], ["Flare Blitz"]]
+ },
+ {
+ "species": "Arcanine",
+ "item": "Life Orb",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]]
+ },
+ {
+ "species": "Arcanine",
+ "item": "Choice Band",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]]
+ }
+ ]
+ },
+ "blissey": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Blissey",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Soft-Boiled"], ["Wish"], ["Toxic"], ["Seismic Toss"]]
+ },
+ {
+ "species": "Blissey",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Soft-Boiled"], ["Heal Bell"], ["Toxic"], ["Seismic Toss"]]
+ },
+ {
+ "species": "Blissey",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Seismic Toss"]]
+ }
+ ]
+ },
+ "chandelure": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Chandelure",
+ "item": "Choice Scarf",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Fire Blast"], ["Shadow Ball"], ["Energy Ball"]]
+ },
+ {
+ "species": "Chandelure",
+ "item": "Choice Specs",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Overheat"], ["Shadow Ball"], ["Energy Ball"]]
+ },
+ {
+ "species": "Chandelure",
+ "item": "Leftovers",
+ "ability": "Flash Fire",
+ "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 140, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Substitute"], ["Flamethrower"], ["Shadow Ball"]]
+ }
+ ]
+ },
+ "chesnaught": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Chesnaught",
+ "item": "Leftovers",
+ "ability": "Bulletproof",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]]
+ },
+ {
+ "species": "Chesnaught",
+ "item": "Leftovers",
+ "ability": "Bulletproof",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]]
+ }
+ ]
+ },
+ "cloyster": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cloyster",
+ "item": "Focus Sash",
+ "ability": "Skill Link",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]]
+ },
+ {
+ "species": "Cloyster",
+ "item": "Focus Sash",
+ "ability": "Skill Link",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Rapid Spin"], ["Spikes"], ["Icicle Spear"], ["Explosion"]]
+ }
+ ]
+ },
+ "darmanitan": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Darmanitan",
+ "item": "Choice Band",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
+ },
+ {
+ "species": "Darmanitan",
+ "item": "Choice Scarf",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
+ },
+ {
+ "species": "Darmanitan",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
+ }
+ ]
+ },
+ "donphan": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Donphan",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Rapid Spin"], ["Ice Shard"], ["Earthquake"]]
+ },
+ {
+ "species": "Donphan",
+ "item": "Assault Vest",
+ "ability": "Sturdy",
+ "evs": {"hp": 176, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 80},
+ "nature": "Adamant",
+ "moves": [["Rapid Spin"], ["Ice Shard"], ["Earthquake"], ["Knock Off"]]
+ }
+ ]
+ },
+ "espeon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Espeon",
+ "item": "Light Clay",
+ "ability": "Magic Bounce",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Morning Sun"], ["Reflect"], ["Light Screen"], ["Psyshock"]]
+ },
+ {
+ "species": "Espeon",
+ "item": "Choice Specs",
+ "ability": "Magic Bounce",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Fighting"]]
+ }
+ ]
+ },
+ "florges": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Florges",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Flower Veil",
+ "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 24, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
+ },
+ {
+ "species": "Florges",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Flower Veil",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Synthesis"], ["Aromatherapy"], ["Calm Mind"], ["Moonblast"]]
+ }
+ ]
+ },
+ "flygon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Flygon",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Defog"], ["Outrage"], ["Earthquake"], ["U-turn"]]
+ },
+ {
+ "species": "Flygon",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Roost"], ["Defog"], ["Earthquake"], ["U-turn"]]
+ }
+ ]
+ },
+ "forretress": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Forretress",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Spikes"], ["Rapid Spin"], ["Gyro Ball"], ["Volt Switch"]]
+ }
+ ]
+ },
+ "galvantula": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Galvantula",
+ "item": "Focus Sash",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Sticky Web"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
+ },
+ {
+ "species": "Galvantula",
+ "gender": "M",
+ "item": "Life Orb",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
+ },
+ {
+ "species": "Galvantula",
+ "gender": "M",
+ "item": "Choice Specs",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
+ }
+ ]
+ },
+ "goodra": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Goodra",
+ "item": "Assault Vest",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Dragon Tail"]]
+ },
+ {
+ "species": "Goodra",
+ "item": "Life Orb",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "haxorus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Haxorus",
+ "item": "Choice Band",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Sleep Talk"], ["Outrage"], ["Earthquake"], ["Poison Jab"]]
+ },
+ {
+ "species": "Haxorus",
+ "item": "Life Orb",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]]
+ },
+ {
+ "species": "Haxorus",
+ "gender": "M",
+ "item": "Lum Berry",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Outrage"], ["Earthquake"], ["Poison Jab"]]
+ },
+ {
+ "species": "Haxorus",
+ "item": "Life Orb",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]]
+ }
+ ]
+ },
+ "heliolisk": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Heliolisk",
+ "item": "Choice Specs",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Heliolisk",
+ "item": "Life Orb",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "honchkrow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Honchkrow",
+ "item": "Life Orb",
+ "ability": "Moxie",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Roost"], ["Sucker Punch"], ["Brave Bird"], ["Superpower"]]
+ },
+ {
+ "species": "Honchkrow",
+ "item": "Choice Scarf",
+ "ability": "Moxie",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Brave Bird"], ["Night Slash"], ["Superpower"], ["Heat Wave"]]
+ }
+ ]
+ },
+ "infernape": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Infernape",
+ "item": "Focus Sash",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Fake Out"], ["Stealth Rock"], ["Close Combat"], ["Overheat"]]
+ },
+ {
+ "species": "Infernape",
+ "item": "Choice Scarf",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]]
+ },
+ {
+ "species": "Infernape",
+ "item": "Choice Band",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]]
+ },
+ {
+ "species": "Infernape",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Fire Blast"], ["Grass Knot"]]
+ }
+ ]
+ },
+ "kingdra": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kingdra",
+ "item": "Lum Berry",
+ "ability": "Sniper",
+ "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232},
+ "nature": "Adamant",
+ "moves": [["Dragon Dance"], ["Outrage"], ["Waterfall"], ["Iron Head"]]
+ },
+ {
+ "species": "Kingdra",
+ "item": "Leftovers",
+ "ability": "Sniper",
+ "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232},
+ "nature": "Adamant",
+ "moves": [["Iron Head"], ["Dragon Dance"], ["Outrage"], ["Waterfall"]]
+ },
+ {
+ "species": "Kingdra",
+ "item": "Scope Lens",
+ "ability": "Sniper",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Rash",
+ "moves": [["Agility"], ["Focus Energy"], ["Draco Meteor"], ["Waterfall"]]
+ },
+ {
+ "species": "Kingdra",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 60, "def": 0, "spa": 252, "spd": 0, "spe": 196},
+ "nature": "Mild",
+ "moves": [["Rain Dance"], ["Hydro Pump"], ["Draco Meteor"], ["Waterfall"]]
+ }
+ ]
+ },
+ "lucario": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Lucario",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Crunch"]]
+ },
+ {
+ "species": "Lucario",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Ice Punch"]]
+ },
+ {
+ "species": "Lucario",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Ice Punch"]]
+ },
+ {
+ "species": "Lucario",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Crunch"]]
+ },
+ {
+ "species": "Lucario",
+ "item": "Life Orb",
+ "ability": "Steadfast",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Aura Sphere"], ["Flash Cannon"]]
+ }
+ ]
+ },
+ "milotic": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Milotic",
+ "item": "Life Orb",
+ "ability": "Competitive",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Recover"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Milotic",
+ "item": "Leftovers",
+ "ability": "Marvel Scale",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]]
+ },
+ {
+ "species": "Milotic",
+ "item": "Leftovers",
+ "ability": "Marvel Scale",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "noivern": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Noivern",
+ "item": "Choice Specs",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Switcheroo"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]]
+ },
+ {
+ "species": "Noivern",
+ "item": "Life Orb",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Roost"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]]
+ },
+ {
+ "species": "Noivern",
+ "item": "Leftovers",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Roost"], ["Taunt"], ["Draco Meteor"], ["Air Slash"]]
+ }
+ ]
+ },
+ "porygonz": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Porygon-Z",
+ "item": "Life Orb",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Tri Attack"], ["Dark Pulse"], ["Hidden Power Fighting"]]
+ },
+ {
+ "species": "Porygon-Z",
+ "item": "Choice Specs",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]]
+ },
+ {
+ "species": "Porygon-Z",
+ "item": "Choice Scarf",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "porygon2": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Porygon2",
+ "item": "Eviolite",
+ "ability": "Trace",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]]
+ },
+ {
+ "species": "Porygon2",
+ "item": "Eviolite",
+ "ability": "Trace",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "rotomheat": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom-Heat",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Rotom-Heat",
+ "item": "Choice Specs",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Rotom-Heat",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Pain Split"], ["Will-O-Wisp"], ["Overheat"], ["Volt Switch"]]
+ }
+ ]
+ },
+ "scrafty": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Scrafty",
+ "item": "Leftovers",
+ "ability": "Shed Skin",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Bulk Up"], ["Drain Punch"], ["Knock Off"]]
+ },
+ {
+ "species": "Scrafty",
+ "item": "Life Orb",
+ "ability": "Moxie",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Zen Headbutt"]]
+ }
+ ]
+ },
+ "snorlax": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Snorlax",
+ "item": "Choice Band",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 252, "def": 56, "spa": 0, "spd": 200, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Punch"]]
+ },
+ {
+ "species": "Snorlax",
+ "item": "Assault Vest",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 252, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Blast"]]
+ },
+ {
+ "species": "Snorlax",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 144, "atk": 0, "def": 188, "spa": 0, "spd": 176, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Sleep Talk"], ["Curse"], ["Body Slam"]]
+ }
+ ]
+ },
+ "tentacruel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tentacruel",
+ "item": "Black Sludge",
+ "ability": "Liquid Ooze",
+ "evs": {"hp": 240, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 24},
+ "nature": "Bold",
+ "moves": [["Toxic Spikes"], ["Rapid Spin"], ["Scald"], ["Knock Off"]]
+ }
+ ]
+ },
+ "toxicroak": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Toxicroak",
+ "item": "Life Orb",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Sucker Punch"], ["Gunk Shot"], ["Drain Punch"]]
+ },
+ {
+ "species": "Toxicroak",
+ "item": "Black Sludge",
+ "ability": "Dry Skin",
+ "evs": {"hp": 248, "atk": 132, "def": 116, "spa": 0, "spd": 0, "spe": 12},
+ "nature": "Adamant",
+ "moves": [["Substitute"], ["Bulk Up"], ["Sucker Punch"], ["Drain Punch"]]
+ }
+ ]
+ },
+ "umbreon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Umbreon",
+ "gender": "M",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]]
+ },
+ {
+ "species": "Umbreon",
+ "gender": "M",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]]
+ }
+ ]
+ },
+ "vaporeon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vaporeon",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Scald"]]
+ }
+ ]
+ },
+ "froslass": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Froslass",
+ "gender": "F",
+ "item": "Focus Sash",
+ "ability": "Cursed Body",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Destiny Bond"], ["Spikes"], ["Taunt"], ["Icy Wind"]]
+ }
+ ]
+ },
+ "houndoom": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Houndoom",
+ "item": "Houndoominite",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Taunt"], ["Fire Blast"], ["Dark Pulse"]]
+ },
+ {
+ "species": "Houndoom",
+ "item": "Houndoominite",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Sunny Day"], ["Fire Blast"], ["Dark Pulse"], ["Solar Beam"]]
+ }
+ ]
+ },
+ "kyurem": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kyurem",
+ "item": "Choice Scarf",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Outrage"]]
+ },
+ {
+ "species": "Kyurem",
+ "item": "Choice Specs",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Flash Cannon"]]
+ },
+ {
+ "species": "Kyurem",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Roost"], ["Draco Meteor"], ["Ice Beam"], ["Earth Power"]]
+ },
+ {
+ "species": "Kyurem",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 236, "spd": 0, "spe": 216},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Roost"], ["Substitute"], ["Ice Beam"], ["Earth Power"]]
+ }
+ ]
+ },
+ "shuckle": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Shuckle",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Stealth Rock"], ["Sticky Web"], ["Encore"], ["Knock Off"]]
+ }
+ ]
+ },
+ "tornadus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tornadus",
+ "gender": "M",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Acrobatics"], ["Knock Off"], ["Superpower"], ["U-turn"]]
+ },
+ {
+ "species": "Tornadus",
+ "gender": "M",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Tailwind"], ["Hurricane"], ["Heat Wave"], ["Grass Knot"]]
+ }
+ ]
+ },
+ "yanmega": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Yanmega",
+ "item": "Choice Specs",
+ "ability": "Tinted Lens",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Sleep Talk"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]]
+ },
+ {
+ "species": "Yanmega",
+ "item": "Life Orb",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Protect"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]]
+ }
+ ]
+ },
+ "zoroark": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zoroark",
+ "item": "Choice Specs",
+ "ability": "Illusion",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Trick"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]]
+ },
+ {
+ "species": "Zoroark",
+ "item": "Life Orb",
+ "ability": "Illusion",
+ "evs": {"hp": 0, "atk": 196, "def": 0, "spa": 96, "spd": 0, "spe": 216},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Naive",
+ "moves": [["Sucker Punch"], ["Knock Off"], ["Flamethrower"], ["Grass Knot"]]
+ },
+ {
+ "species": "Zoroark",
+ "item": "Life Orb",
+ "ability": "Illusion",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]]
+ }
+ ]
+ },
+ "cresselia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cresselia",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Moonlight"], ["Thunder Wave"], ["Psyshock"], ["Moonblast"]]
+ },
+ {
+ "species": "Cresselia",
+ "gender": "F",
+ "item": "Light Clay",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Lunar Dance"], ["Reflect"], ["Light Screen"], ["Moonblast"]]
+ },
+ {
+ "species": "Cresselia",
+ "gender": "F",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Moonlight"], ["Substitute"], ["Calm Mind"], ["Psyshock"]]
+ },
+ {
+ "species": "Cresselia",
+ "item": "Light Clay",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Reflect"], ["Light Screen"], ["Lunar Dance"], ["Psyshock"]]
+ },
+ {
+ "species": "Cresselia",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 120},
+ "nature": "Bold",
+ "moves": [["Substitute"], ["Calm Mind"], ["Moonblast"], ["Moonlight"]]
+ },
+ {
+ "species": "Cresselia",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144},
+ "nature": "Bold",
+ "moves": [["Substitute"], ["Calm Mind"], ["Psyshock"], ["Moonblast"]]
+ }
+ ]
+ },
+ "gligar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gligar",
+ "item": "Eviolite",
+ "ability": "Hyper Cutter",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]]
+ },
+ {
+ "species": "Gligar",
+ "item": "Eviolite",
+ "ability": "Hyper Cutter",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Roost"], ["Defog"], ["Stealth Rock"], ["Earthquake"]]
+ },
+ {
+ "species": "Gligar",
+ "item": "Eviolite",
+ "ability": "Hyper Cutter",
+ "evs": {"hp": 248, "atk": 0, "def": 20, "spa": 0, "spd": 240, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]]
+ }
+ ]
+ },
+ "aromatisse": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aromatisse",
+ "item": "Leftovers",
+ "ability": "Aroma Veil",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
+ },
+ {
+ "species": "Aromatisse",
+ "item": "Leftovers",
+ "ability": "Aroma Veil",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
+ }
+ ]
+ },
+ "roserade": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Roserade",
+ "item": "Life Orb",
+ "ability": "Natural Cure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Spikes"], ["Giga Drain"], ["Sludge Bomb"], ["Synthesis"]]
+ },
+ {
+ "species": "Roserade",
+ "item": "Black Sludge",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 244, "spe": 16},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Rest"], ["Spikes"], ["Giga Drain"], ["Sludge Bomb"]]
+ }
+ ]
+ },
+ "cobalion": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cobalion",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Calm Mind"], ["Focus Blast"], ["Flash Cannon"], ["Hidden Power Ghost"]]
+ },
+ {
+ "species": "Cobalion",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Close Combat"], ["Iron Head"], ["Stone Edge"]]
+ },
+ {
+ "species": "Cobalion",
+ "item": "Leftovers",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Close Combat"], ["Iron Head"]]
+ }
+ ]
+ },
+ "dragalge": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dragalge",
+ "item": "Choice Specs",
+ "ability": "Adaptability",
+ "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Sludge Wave"], ["Hidden Power Fire"], ["Focus Blast"]]
+ },
+ {
+ "species": "Dragalge",
+ "item": "Choice Specs",
+ "ability": "Adaptability",
+ "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Sludge Wave"], ["Scald"], ["Focus Blast"]]
+ },
+ {
+ "species": "Dragalge",
+ "item": "Black Sludge",
+ "ability": "Adaptability",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Toxic Spikes"], ["Dragon Tail"], ["Sludge Bomb"], ["Scald"]]
+ },
+ {
+ "species": "Dragalge",
+ "item": "Dragon Fang",
+ "ability": "Adaptability",
+ "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Focus Blast"], ["Dragon Pulse"]]
+ },
+ {
+ "species": "Dragalge",
+ "item": "Choice Specs",
+ "ability": "Adaptability",
+ "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Dragon Pulse"], ["Sludge Wave"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "reuniclus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Reuniclus",
+ "item": "Leftovers",
+ "ability": "Magic Guard",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]]
+ },
+ {
+ "species": "Reuniclus",
+ "item": "Life Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "whimsicott": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Whimsicott",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Encore"], ["Giga Drain"], ["Moonblast"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Whimsicott",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Encore"], ["Taunt"], ["Leech Seed"], ["Moonblast"]]
+ },
+ {
+ "species": "Whimsicott",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Moonblast"], ["Giga Drain"], ["Hidden Power Fire"], ["Encore"]]
+ },
+ {
+ "species": "Whimsicott",
+ "item": "Leftovers",
+ "ability": "Prankster",
+ "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 0, "spe": 24},
+ "nature": "Bold",
+ "moves": [["Encore"], ["U-turn"], ["Stun Spore"], ["Moonblast"]]
+ }
+ ]
+ },
+ "sharpedo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sharpedo",
+ "item": "Sharpedonite",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Protect"], ["Waterfall"], ["Crunch"], ["Ice Fang"]]
+ },
+ {
+ "species": "Sharpedo",
+ "item": "Sharpedonite",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naughty",
+ "moves": [["Protect"], ["Crunch"], ["Ice Fang"], ["Hydro Pump"]]
+ },
+ {
+ "species": "Sharpedo",
+ "item": "Sharpedonite",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]]
+ },
+ {
+ "species": "Sharpedo",
+ "item": "Life Orb",
+ "ability": "Speed Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]]
+ }
+ ]
+ },
+ "sceptile": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Substitute"]]
+ },
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Giga Drain"], ["Dragon Pulse"], ["Focus Blast"], ["Leaf Storm"]]
+ },
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Leaf Blade"], ["Outrage"], ["Earthquake"]]
+ },
+ {
+ "species": "Sceptile",
+ "item": "Sceptilite",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Hidden Power Fire"]]
+ }
+ ]
+ },
+ "rhyperior": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rhyperior",
+ "item": "Choice Band",
+ "ability": "Solid Rock",
+ "evs": {"hp": 168, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 92},
+ "nature": "Adamant",
+ "moves": [["Stone Edge"], ["Earthquake"], ["Megahorn"], ["Aqua Tail"]]
+ },
+ {
+ "species": "Rhyperior",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 248, "atk": 16, "def": 244, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
+ },
+ {
+ "species": "Rhyperior",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
+ }
+ ]
+ },
+ "bronzong": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Bronzong",
+ "item": "Light Clay",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Reflect"], ["Light Screen"], ["Explosion"]]
+ },
+ {
+ "species": "Bronzong",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]]
+ },
+ {
+ "species": "Bronzong",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]]
+ }
+ ]
+ },
+ "feraligatr": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 32, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 228},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Waterfall"], ["Ice Punch"], ["Crunch"]]
+ },
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Torrent",
+ "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Aqua Jet"], ["Waterfall"], ["Crunch"]]
+ },
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Superpower"], ["Aqua Jet"], ["Swords Dance"]]
+ },
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]]
+ },
+ {
+ "species": "Feraligatr",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]]
+ }
+ ]
+ },
+ "slurpuff": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Slurpuff",
+ "item": "Sitrus Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Belly Drum"], ["Play Rough"], ["Drain Punch"], ["Return"]],
+ "happiness": 255
+ },
+ {
+ "species": "Slurpuff",
+ "item": "Chesto Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Rest"], ["Calm Mind"], ["Draining Kiss"], ["Flamethrower"]]
+ },
+ {
+ "species": "Slurpuff",
+ "item": "Sitrus Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204},
+ "nature": "Adamant",
+ "moves": [["Belly Drum"], ["Play Rough"], ["Return"], ["Aromatherapy"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "pangoro": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pangoro",
+ "item": "Choice Band",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["Superpower"], ["Gunk Shot"], ["Ice Punch"]]
+ },
+ {
+ "species": "Pangoro",
+ "item": "Life Orb",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]]
+ },
+ {
+ "species": "Pangoro",
+ "item": "Lum Berry",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]]
+ }
+ ]
+ },
+ "abomasnow": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Abomasnow",
+ "item": "Abomasite",
+ "ability": "Soundproof",
+ "evs": {"hp": 0, "atk": 128, "def": 0, "spa": 252, "spd": 0, "spe": 128},
+ "nature": "Mild",
+ "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]]
+ },
+ {
+ "species": "Abomasnow",
+ "item": "Abomasite",
+ "ability": "Soundproof",
+ "evs": {"hp": 128, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 128},
+ "nature": "Adamant",
+ "moves": [["Ice Shard"], ["Wood Hammer"], ["Earthquake"], ["Swords Dance"]]
+ }
+ ]
+ }
+ },
+ "RU": {
+ "venusaur": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Venusaur",
+ "item": "Life Orb",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Venusaur",
+ "item": "Black Sludge",
+ "ability": "Overgrow",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 92, "spd": 0, "spe": 164},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]]
+ }
+ ]
+ },
+ "diancie": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Diancie",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["Stealth Rock"], ["Heal Bell"], ["Moonblast"], ["Diamond Storm"]]
+ },
+ {
+ "species": "Diancie",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Rest"], ["Sleep Talk"], ["Moonblast"]]
+ },
+ {
+ "species": "Diancie",
+ "item": "Life Orb",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 0},
+ "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
+ "nature": "Quiet",
+ "moves": [["Trick Room"], ["Moonblast"], ["Earth Power"], ["Psychic", "Diamond Storm", "Explosion"]]
+ }
+ ]
+ },
+ "manectric": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Manectric",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Flamethrower", "Overheat"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Manectric",
+ "item": "Choice Scarf",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Hidden Power Ice"], ["Overheat", "Switcheroo"]]
+ }
+ ]
+ },
+ "hoopa": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute", "Nasty Plot"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]]
+ },
+ {
+ "species": "Hoopa",
+ "item": "Life Orb",
+ "ability": "Magician",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Mild",
+ "moves": [["Knock Off"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]]
+ },
+ {
+ "species": "Hoopa",
+ "item": "Leftovers",
+ "ability": "Magician",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Nasty Plot"], ["Shadow Ball"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "banette": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Banette",
+ "item": "Banettite",
+ "ability": "Insomnia",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Destiny Bond", "Gunk Shot"], ["Knock Off"], ["Sucker Punch"], ["Will-O-Wisp", "Taunt", "Thunder Wave"]]
+ }
+ ]
+ },
+ "jellicent": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Jellicent",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 252, "atk": 0, "def": 212, "spa": 0, "spd": 0, "spe": 44},
+ "nature": "Bold",
+ "moves": [["Scald", "Hex"], ["Will-O-Wisp"], ["Recover"], ["Taunt"]]
+ }
+ ]
+ },
+ "sigilyph": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sigilyph",
+ "item": "Life Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Air Slash"], ["Heat Wave"], ["Roost"], ["Psychic"]]
+ },
+ {
+ "species": "Sigilyph",
+ "item": "Flame Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Roost"], ["Psycho Shift"], ["Air Slash"]]
+ }
+ ]
+ },
+ "gastrodon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gastrodon",
+ "item": "Leftovers",
+ "ability": "Storm Drain",
+ "evs": {"hp": 252, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 12},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Recover"], ["Toxic"], ["Earth Power"]]
+ }
+ ]
+ },
+ "delphox": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Delphox",
+ "item": "Choice Scarf",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Psyshock"], ["Dazzling Gleam"], ["Trick", "Overheat"]]
+ },
+ {
+ "species": "Delphox",
+ "item": "Choice Specs",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Flamethrower"]]
+ },
+ {
+ "species": "Delphox",
+ "item": "Choice Specs",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Hidden Power Water"]]
+ },
+ {
+ "species": "Delphox",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Grass Knot"]]
+ },
+ {
+ "species": "Delphox",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Hidden Power Water"]]
+ },
+ {
+ "species": "Delphox",
+ "item": "Leftovers",
+ "ability": "Blaze",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Calm Mind"], ["Flamethrower"], ["Psyshock"]]
+ }
+ ]
+ },
+ "clawitzer": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Clawitzer",
+ "item": "Life Orb",
+ "ability": "Mega Launcher",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Scald"], ["Dark Pulse"], ["Ice Beam"], ["Aura Sphere"]]
+ }
+ ]
+ },
+ "rotommow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom-Mow",
+ "item": "Choice Specs",
+ "ability": "Levitate",
+ "evs": {"hp": 48, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 208},
+ "nature": "Timid",
+ "moves": [["Leaf Storm"], ["Volt Switch"], ["Thunderbolt"], ["Trick"]]
+ }
+ ]
+ },
+ "rotom": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 124, "atk": 0, "def": 0, "spa": 132, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Will-O-Wisp"], ["Discharge"], ["Hex"]]
+ }
+ ]
+ },
+ "hitmontop": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hitmontop",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Rapid Spin"], ["Close Combat"], ["Foresight"], ["Toxic"]]
+ }
+ ]
+ },
+ "braviary": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Braviary",
+ "item": "Choice Scarf",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["U-turn"]],
+ "happiness": 255
+ },
+ {
+ "species": "Braviary",
+ "item": "Life Orb",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["Roost"]],
+ "happiness": 255
+ },
+ {
+ "species": "Braviary",
+ "item": "Leftovers",
+ "ability": "Defiant",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 212, "spe": 44},
+ "nature": "Careful",
+ "moves": [["Substitute"], ["Bulk Up"], ["Roost"], ["Brave Bird"]]
+ }
+ ]
+ },
+ "registeel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Registeel",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Curse"], ["Iron Head"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Registeel",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Seismic Toss"], ["Protect"], ["Thunder Wave", "Toxic"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "omastar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Omastar",
+ "item": "Focus Sash",
+ "ability": "Weak Armor",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]]
+ },
+ {
+ "species": "Omastar",
+ "item": "Choice Specs",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Scald"], ["Hidden Power Grass"]]
+ }
+ ]
+ },
+ "magneton": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Magneton",
+ "item": "Eviolite",
+ "ability": "Magnet Pull",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Magnet Rise"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Water"]]
+ },
+ {
+ "species": "Magneton",
+ "item": "Choice Specs",
+ "ability": "Analytic",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Magneton",
+ "item": "Eviolite",
+ "ability": "Analytic",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Flash Cannon"], ["Hidden Power Grass"]]
+ }
+ ]
+ },
+ "jolteon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Jolteon",
+ "item": "Choice Specs",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Choice Specs",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Choice Specs",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Life Orb",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Life Orb",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Life Orb",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Expert Belt",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Expert Belt",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
+ },
+ {
+ "species": "Jolteon",
+ "item": "Expert Belt",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
+ }
+ ]
+ },
+ "golbat": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Golbat",
+ "item": "Eviolite",
+ "ability": "Infiltrator",
+ "evs": {"hp": 248, "atk": 0, "def": 180, "spa": 0, "spd": 0, "spe": 80},
+ "nature": "Impish",
+ "moves": [["Taunt"], ["Roost"], ["Brave Bird"], ["Super Fang", "Toxic"]]
+ }
+ ]
+ },
+ "exploud": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Exploud",
+ "item": "Choice Specs",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Boomburst"], ["Fire Blast"], ["Sleep Talk"], ["Focus Blast"]]
+ },
+ {
+ "species": "Exploud",
+ "item": "Life Orb",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Boomburst"], ["Fire Blast"], ["Surf"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "eelektross": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Eelektross",
+ "item": "Assault Vest",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Volt Switch"], ["Giga Drain"], ["Flamethrower"], ["Knock Off"]]
+ }
+ ]
+ },
+ "druddigon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Druddigon",
+ "item": "Rocky Helmet",
+ "ability": "Rough Skin",
+ "evs": {"hp": 236, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 20},
+ "nature": "Impish",
+ "moves": [["Dragon Tail"], ["Stealth Rock"], ["Fire Punch"], ["Glare", "Gunk Shot"]]
+ },
+ {
+ "species": "Druddigon",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 236, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 20},
+ "nature": "Adamant",
+ "moves": [["Outrage", "Dragon Claw"], ["Sucker Punch"], ["Fire Punch"], ["Gunk Shot"]]
+ }
+ ]
+ },
+ "accelgor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Accelgor",
+ "item": "Focus Sash",
+ "ability": "Sticky Hold",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Spikes"], ["Final Gambit"], ["Encore"], ["Bug Buzz"]]
+ },
+ {
+ "species": "Accelgor",
+ "item": "Life Orb",
+ "ability": "Sticky Hold",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Sludge Bomb"]]
+ },
+ {
+ "species": "Accelgor",
+ "item": "Life Orb",
+ "ability": "Sticky Hold",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "spiritomb": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Spiritomb",
+ "item": "Leftovers",
+ "ability": "Infiltrator",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Dark Pulse"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Spiritomb",
+ "item": "Leftovers",
+ "ability": "Infiltrator",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Will-O-Wisp"], ["Foul Play"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Spiritomb",
+ "item": "Black Glasses",
+ "ability": "Infiltrator",
+ "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
+ "nature": "Adamant",
+ "moves": [["Sucker Punch"], ["Pursuit"], ["Will-O-Wisp"], ["Foul Play", "Taunt"]]
+ }
+ ]
+ },
+ "drapion": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Drapion",
+ "item": "Black Sludge",
+ "ability": "Battle Armor",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 216, "spe": 44},
+ "nature": "Careful",
+ "moves": [["Knock Off"], ["Taunt"], ["Toxic Spikes"], ["Poison Jab"]]
+ },
+ {
+ "species": "Drapion",
+ "item": "Shuca Berry",
+ "ability": "Battle Armor",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Knock Off"], ["Pursuit"], ["Poison Jab"]]
+ },
+ {
+ "species": "Drapion",
+ "item": "Shuca Berry",
+ "ability": "Battle Armor",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Knock Off"], ["Aqua Tail"], ["Poison Jab"]]
+ }
+ ]
+ },
+ "camerupt": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Camerupt",
+ "item": "Cameruptite",
+ "ability": "Solid Rock",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Fire Blast", "Flamethrower"], ["Earth Power"], ["Hidden Power Ice"], ["Toxic"]]
+ }
+ ]
+ },
+ "bronzong": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Bronzong",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Brave",
+ "moves": [["Trick Room"], ["Stealth Rock"], ["Earthquake"], ["Explosion"]]
+ },
+ {
+ "species": "Bronzong",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["Hidden Power Fire"], ["Gyro Ball"], ["Earthquake"], ["Toxic"]]
+ },
+ {
+ "species": "Bronzong",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["Stealth Rock"], ["Gyro Ball"], ["Psywave"], ["Toxic"]]
+ }
+ ]
+ },
+ "rhyperior": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rhyperior",
+ "item": "Choice Band",
+ "ability": "Solid Rock",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Stone Edge"], ["Ice Punch"], ["Megahorn"]]
+ },
+ {
+ "species": "Rhyperior",
+ "item": "Life Orb",
+ "ability": "Solid Rock",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Rock Polish"], ["Earthquake"], ["Stone Edge"], ["Ice Punch", "Swords Dance"]]
+ },
+ {
+ "species": "Rhyperior",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Ice Punch", "Megahorn"]]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hitmonlee",
+ "item": "Choice Scarf",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Knock Off"], ["Rapid Spin"], ["Close Combat"]]
+ },
+ {
+ "species": "Hitmonlee",
+ "item": "Life Orb",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["High Jump Kick"], ["Knock Off"], ["Mach Punch"], ["Rapid Spin"]]
+ },
+ {
+ "species": "Hitmonlee",
+ "item": "Liechi Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Endure"], ["Reversal"], ["Knock Off"], ["Mach Punch"]]
+ }
+ ]
+ },
+ "glalie": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Glalie",
+ "item": "Glalitite",
+ "ability": "Inner Focus",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Spikes"], ["Double-Edge"], ["Explosion"], ["Ice Shard"]]
+ },
+ {
+ "species": "Glalie",
+ "item": "Glalitite",
+ "ability": "Inner Focus",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Double-Edge"], ["Freeze-Dry"], ["Earthquake"], ["Explosion"]]
+ }
+ ]
+ },
+ "fletchinder": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Fletchinder",
+ "ability": "Gale Wings",
+ "evs": {"hp": 160, "atk": 252, "def": 72, "spa": 0, "spd": 24, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Acrobatics"], ["Swords Dance"], ["Will-O-Wisp"], ["Roost"]]
+ }
+ ]
+ },
+ "escavalier": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Escavalier",
+ "item": "Assault Vest",
+ "ability": "Overcoat",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run", "Pursuit"]]
+ },
+ {
+ "species": "Escavalier",
+ "item": "Choice Band",
+ "ability": "Overcoat",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run"]]
+ }
+ ]
+ },
+ "aromatisse": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aromatisse",
+ "item": "Leftovers",
+ "ability": "Aroma Veil",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Wish"], ["Protect"], ["Moonblast"], ["Aromatherapy"]]
+ }
+ ]
+ },
+ "meloetta": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Meloetta",
+ "item": "Assault Vest",
+ "ability": "Serene Grace",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psyshock"], ["Hyper Voice"], ["Focus Blast"], ["Shadow Ball", "Grass Knot", "Dazzling Gleam"]]
+ },
+ {
+ "species": "Meloetta",
+ "item": "Choice Scarf",
+ "ability": "Serene Grace",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Dazzling Gleam", "Shadow Ball", "Trick", "U-turn"]]
+ },
+ {
+ "species": "Meloetta",
+ "item": "Choice Specs",
+ "ability": "Serene Grace",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hyper Voice"], ["Psychic"], ["Focus Blast"], ["U-turn", "Dazzling Gleam", "Shadow Ball"]]
+ },
+ {
+ "species": "Meloetta",
+ "item": "Life Orb",
+ "ability": "Serene Grace",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Relic Song"], ["Return"], ["Close Combat"], ["Knock Off"]],
+ "happiness": 255
+ },
+ {
+ "species": "Meloetta",
+ "item": "Colbur Berry",
+ "ability": "Serene Grace",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Hyper Voice", "Psychic"], ["Shadow Ball"], ["Focus Blast"]]
+ },
+ {
+ "species": "Meloetta",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Perish Song"], ["Knock Off"], ["Heal Bell"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Meloetta",
+ "item": "Leftovers",
+ "ability": "Serene Grace",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Modest",
+ "moves": [["Substitute"], ["Calm Mind"], ["Hyper Voice"], ["Shadow Ball"]]
+ }
+ ]
+ },
+ "alomomola": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Alomomola",
+ "item": "Leftovers",
+ "ability": "Regenerator",
+ "evs": {"hp": 120, "atk": 0, "def": 136, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Scald"], ["Wish"], ["Protect"], ["Toxic"]]
+ }
+ ]
+ },
+ "emboar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Emboar",
+ "item": "Choice Band",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]]
+ },
+ {
+ "species": "Emboar",
+ "item": "Expert Belt",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]]
+ },
+ {
+ "species": "Emboar",
+ "item": "Choice Scarf",
+ "ability": "Reckless",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Toxic"]]
+ }
+ ]
+ },
+ "seismitoad": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Seismitoad",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Stealth Rock"], ["Scald"], ["Earthquake"], ["Knock Off"]]
+ },
+ {
+ "species": "Seismitoad",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Rain Dance"], ["Hydro Pump"], ["Earth Power"], ["Sludge Bomb"]]
+ },
+ {
+ "species": "Seismitoad",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 164, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 92},
+ "nature": "Modest",
+ "moves": [["Stealth Rock"], ["Hydro Pump"], ["Earth Power"], ["Grass Knot"]]
+ }
+ ]
+ },
+ "qwilfish": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Qwilfish",
+ "item": "Black Sludge",
+ "ability": "Intimidate",
+ "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24},
+ "nature": "Bold",
+ "moves": [["Spikes"], ["Pain Split"], ["Scald"], ["Taunt"]]
+ },
+ {
+ "species": "Qwilfish",
+ "item": "Focus Sash",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Spikes"], ["Taunt"], ["Toxic Spikes"], ["Explosion"]]
+ }
+ ]
+ },
+ "granbull": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Granbull",
+ "item": "Leftovers",
+ "ability": "Intimidate",
+ "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24},
+ "nature": "Impish",
+ "moves": [["Play Rough"], ["Earthquake"], ["Heal Bell"], ["Roar"]]
+ },
+ {
+ "species": "Granbull",
+ "item": "Choice Band",
+ "ability": "Intimidate",
+ "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
+ "nature": "Adamant",
+ "moves": [["Play Rough"], ["Fire Punch"], ["Thunder Punch"], ["Close Combat"]]
+ }
+ ]
+ },
+ "medicham": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Medicham",
+ "item": "Life Orb",
+ "ability": "Pure Power",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Thunder Punch"], ["Drain Punch"]]
+ },
+ {
+ "species": "Medicham",
+ "item": "Choice Scarf",
+ "ability": "Pure Power",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Rock Slide", "Poison Jab"], ["Drain Punch", "Trick"]]
+ }
+ ]
+ },
+ "smeargle": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Smeargle",
+ "item": "Focus Sash",
+ "ability": "Own Tempo",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Spore", "Dark Void"], ["Sticky Web"], ["Stealth Rock"], ["Explosion"]]
+ }
+ ]
+ },
+ "absol": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Absol",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Iron Tail", "Pursuit"]]
+ },
+ {
+ "species": "Absol",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Swords Dance"]]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aerodactyl",
+ "item": "Life Orb",
+ "ability": "Unnerve",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stone Edge"], ["Fire Fang", "Earthquake"], ["Aerial Ace"], ["Roost"]]
+ }
+ ]
+ },
+ "aggron": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aggron",
+ "item": "Choice Band",
+ "ability": "Rock Head",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Head Smash"], ["Heavy Slam"], ["Sleep Talk", "Fire Punch"], ["Low Kick"]]
+ }
+ ]
+ },
+ "blastoise": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Blastoise",
+ "item": "Leftovers",
+ "ability": "Torrent",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Rapid Spin"], ["Toxic"], ["Foresight", "Refresh"]]
+ }
+ ]
+ },
+ "slowking": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Slowking",
+ "item": "Leftovers",
+ "ability": "Regenerator",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Psyshock"], ["Calm Mind", "Thunder Wave"], ["Slack Off"]]
+ },
+ {
+ "species": "Slowking",
+ "item": "Choice Specs",
+ "ability": "Regenerator",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "nature": "Modest",
+ "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Trick"]]
+ },
+ {
+ "species": "Slowking",
+ "item": "Colbur Berry",
+ "ability": "Regenerator",
+ "evs": {"hp": 160, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 96},
+ "nature": "Bold",
+ "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Thunder Wave"]]
+ }
+ ]
+ },
+ "abomasnow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Abomasnow",
+ "item": "Life Orb",
+ "ability": "Snow Warning",
+ "evs": {"hp": 0, "atk": 132, "def": 0, "spa": 252, "spd": 0, "spe": 124},
+ "nature": "Mild",
+ "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "flygon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Flygon",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Fire Blast"]]
+ },
+ {
+ "species": "Flygon",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Defog"]]
+ },
+ {
+ "species": "Flygon",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 116, "spa": 0, "spd": 116, "spe": 24},
+ "nature": "Careful",
+ "moves": [["Defog"], ["Roost"], ["Earthquake"], ["U-turn"]]
+ },
+ {
+ "species": "Flygon",
+ "item": "Choice Band",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Outrage"], ["Earthquake"], ["U-turn"], ["Iron Tail"]]
+ }
+ ]
+ },
+ "scrafty": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Scrafty",
+ "item": "Choice Band",
+ "ability": "Intimidate",
+ "evs": {"hp": 152, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 104},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["High Jump Kick"], ["Drain Punch"], ["Poison Jab"]]
+ },
+ {
+ "species": "Scrafty",
+ "item": "Chople Berry",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["High Jump Kick"], ["Poison Jab", "Iron Head"], ["Dragon Dance"]]
+ },
+ {
+ "species": "Scrafty",
+ "item": "Coba Berry",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["High Jump Kick"], ["Head Smash"], ["Dragon Dance"]]
+ }
+ ]
+ },
+ "houndoom": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Houndoom",
+ "item": "Life Orb",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Fire Blast"], ["Dark Pulse"], ["Sucker Punch"], ["Nasty Plot"]]
+ },
+ {
+ "species": "Houndoom",
+ "item": "Life Orb",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 220, "def": 0, "spa": 36, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Fire Blast"], ["Crunch"], ["Sucker Punch"], ["Pursuit"]]
+ }
+ ]
+ },
+ "togetic": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Togetic",
+ "item": "Eviolite",
+ "ability": "Serene Grace",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Bold",
+ "moves": [["Dazzling Gleam"], ["Roost"], ["Flamethrower"], ["Thunder Wave"]]
+ }
+ ]
+ },
+ "gallade": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gallade",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Swords Dance"]]
+ },
+ {
+ "species": "Gallade",
+ "item": "Choice Band",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Drain Punch"]]
+ }
+ ]
+ },
+ "virizion": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Virizion",
+ "item": "Lum Berry",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Leaf Blade"], ["Close Combat"], ["Stone Edge", "Zen Headbutt"], ["Swords Dance"]]
+ },
+ {
+ "species": "Virizion",
+ "item": "Life Orb",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Giga Drain"], ["Focus Blast"], ["Hidden Power Ice"], ["Calm Mind"]]
+ },
+ {
+ "species": "Virizion",
+ "item": "Leftovers",
+ "ability": "Justified",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Giga Drain"], ["Focus Blast"], ["Substitute"], ["Calm Mind"]]
+ }
+ ]
+ },
+ "uxie": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Uxie",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 64, "spa": 0, "spd": 0, "spe": 192},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Psyshock"], ["Thunder Wave"], ["U-turn"]]
+ }
+ ]
+ },
+ "sneasel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sneasel",
+ "item": "Life Orb",
+ "ability": "Pickpocket",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["Icicle Crash"], ["Ice Shard"], ["Low Kick", "Pursuit"]]
+ }
+ ]
+ },
+ "samurott": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Samurott",
+ "item": "Lum Berry",
+ "ability": "Shell Armor",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Waterfall"], ["Megahorn"], ["Aqua Jet"]]
+ }
+ ]
+ },
+ "gurdurr": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gurdurr",
+ "item": "Eviolite",
+ "ability": "Guts",
+ "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Mach Punch"]]
+ }
+ ]
+ },
+ "poliwrath": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Poliwrath",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Scald"], ["Circle Throw"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Poliwrath",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "nature": "Modest",
+ "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
+ },
+ {
+ "species": "Poliwrath",
+ "item": "Life Orb",
+ "ability": "Water Absorb",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "nature": "Modest",
+ "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
+ },
+ {
+ "species": "Poliwrath",
+ "item": "Choice Specs",
+ "ability": "Water Absorb",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "nature": "Modest",
+ "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
+ }
+ ]
+ },
+ "vivillon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vivillon",
+ "item": "Leftovers",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Substitute"]]
+ }
+ ]
+ },
+ "audino": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Audino",
+ "item": "Audinite",
+ "ability": "Regenerator",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
+ "nature": "Modest",
+ "moves": [["Dazzling Gleam"], ["Fire Blast"], ["Surf"], ["Healing Wish"]]
+ }
+ ]
+ },
+ "mesprit": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mesprit",
+ "item": "Colbur Berry",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Dazzling Gleam", "Ice Beam"], ["Stealth Rock"], ["Healing Wish"]]
+ }
+ ]
+ },
+ "archeops": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Archeops",
+ "item": "Focus Sash",
+ "ability": "Defeatist",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]]
+ }
+ ]
+ },
+ "malamar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Malamar",
+ "item": "Leftovers",
+ "ability": "Contrary",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 108, "spe": 152},
+ "nature": "Jolly",
+ "moves": [["Superpower"], ["Knock Off"], ["Rest"], ["Sleep Talk"]]
+ }
+ ]
+ },
+ "roselia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 248, "atk": 0, "def": 172, "spa": 0, "spd": 88, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Spikes"], ["Synthesis"], ["Giga Drain"], ["Sludge Bomb"]]
+ }
+ ]
+ },
+ "piloswine": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Piloswine",
+ "item": "Eviolite",
+ "ability": "Thick Fat",
+ "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Ice Shard"], ["Earthquake"], ["Icicle Crash"]]
+ }
+ ]
+ },
+ "sawk": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sawk",
+ "item": "Choice Band",
+ "ability": "Sturdy",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Zen Headbutt"], ["Stone Edge"]]
+ },
+ {
+ "species": "Sawk",
+ "item": "Expert Belt",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]]
+ },
+ {
+ "species": "Sawk",
+ "item": "Lum Berry",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Stone Edge"]]
+ },
+ {
+ "species": "Sawk",
+ "item": "Choice Scarf",
+ "ability": "Sturdy",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]]
+ }
+ ]
+ }
+ },
+ "NU": {
+ "dodrio": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dodrio",
+ "item": "Choice Band",
+ "ability": "Early Bird",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "chatot": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Chatot",
+ "item": "Choice Scarf",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Chatot",
+ "item": "Choice Specs",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Chatot",
+ "item": "Leftovers",
+ "ability": "Tangled Feet",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["Chatter"], ["Nasty Plot"], ["Encore"]]
+ }
+ ]
+ },
+ "carracosta": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Carracosta",
+ "item": "Life Orb",
+ "ability": "Solid Rock",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge"], ["Aqua Jet"]]
+ },
+ {
+ "species": "Carracosta",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Stealth Rock"], ["Scald"], ["Rock Slide"], ["Knock Off", "Toxic"]]
+ },
+ {
+ "species": "Carracosta",
+ "item": "Life Orb",
+ "ability": "Solid Rock",
+ "evs": {"hp": 0, "atk": 28, "def": 0, "spa": 228, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Shell Smash"], ["Hydro Pump"], ["Stone Edge"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "beheeyem": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Beheeyem",
+ "item": "Life Orb",
+ "ability": "Analytic",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 252, "spd": 0, "spe": 0},
+ "nature": "Quiet",
+ "moves": [["Trick Room"], ["Psychic"], ["Thunderbolt"], ["Hidden Power Fighting"]]
+ },
+ {
+ "species": "Beheeyem",
+ "item": "Choice Specs",
+ "ability": "Analytic",
+ "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124},
+ "nature": "Modest",
+ "moves": [["Psychic", "Psyshock"], ["Signal Beam"], ["Hidden Power Ground"], ["Trick", "Thunderbolt"]]
+ }
+ ]
+ },
+ "basculin": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Basculin",
+ "item": "Choice Band",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Waterfall"], ["Aqua Jet"], ["Zen Headbutt"], ["Superpower"]]
+ },
+ {
+ "species": "Basculin",
+ "item": "Splash Plate",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Aqua Jet"], ["Double-Edge"], ["Superpower"]]
+ }
+ ]
+ },
+ "barbaracle": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Barbaracle",
+ "item": "Shuca Berry",
+ "ability": "Tough Claws",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Shell Smash"], ["Razor Shell"], ["Return"], ["Earthquake", "Substitute"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "aurorus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Aurorus",
+ "item": "Choice Specs",
+ "ability": "Refrigerate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Hyper Voice"], ["Freeze-Dry"], ["Psychic", "Frost Breath"], ["Earth Power"]]
+ },
+ {
+ "species": "Aurorus",
+ "item": "Focus Sash",
+ "ability": "Snow Warning",
+ "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Stealth Rock"], ["Blizzard"], ["Freeze-Dry"], ["Rock Tomb"]]
+ }
+ ]
+ },
+ "articuno": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Articuno",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Ice Beam"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
+ },
+ {
+ "species": "Articuno",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hidden Power Fire"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
+ },
+ {
+ "species": "Articuno",
+ "item": "Leftovers",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
+ }
+ ]
+ },
+ "zangoose": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zangoose",
+ "item": "Toxic Orb",
+ "ability": "Toxic Boost",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Facade"], ["Knock Off"], ["Quick Attack"], ["Close Combat"]]
+ }
+ ]
+ },
+ "xatu": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Xatu",
+ "item": "Colbur Berry",
+ "ability": "Magic Bounce",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Timid",
+ "moves": [["Psychic", "Psyshock"], ["Roost"], ["Heat Wave"], ["U-turn", "Thunder Wave"]]
+ },
+ {
+ "species": "Xatu",
+ "item": "Leftovers",
+ "ability": "Magic Bounce",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Timid",
+ "moves": [["Calm Mind"], ["Roost"], ["Psyshock"], ["Heat Wave", "Signal Beam"]]
+ },
+ {
+ "species": "Xatu",
+ "item": "Life Orb",
+ "ability": "Magic Bounce",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic", "Psyshock"], ["Grass Knot"], ["Heat Wave"], ["Roost"]]
+ }
+ ]
+ },
+ "weezing": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Weezing",
+ "item": "Black Sludge",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
+ "nature": "Bold",
+ "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Pain Split"]]
+ },
+ {
+ "species": "Weezing",
+ "item": "Black Sludge",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
+ "nature": "Bold",
+ "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Toxic Spikes"]]
+ }
+ ]
+ },
+ "vivillon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vivillon",
+ "item": "Leftovers",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Quiver Dance"], ["Sleep Powder"], ["Hurricane"], ["Substitute"]]
+ },
+ {
+ "species": "Vivillon",
+ "item": "Focus Sash",
+ "ability": "Compound Eyes",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Energy Ball"]]
+ }
+ ]
+ },
+ "vileplume": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vileplume",
+ "item": "Black Sludge",
+ "ability": "Effect Spore",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Aromatherapy", "Sleep Powder"]]
+ },
+ {
+ "species": "Vileplume",
+ "item": "Black Sludge",
+ "ability": "Effect Spore",
+ "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]]
+ },
+ {
+ "species": "Vileplume",
+ "item": "Black Sludge",
+ "ability": "Effect Spore",
+ "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Ground"], ["Synthesis"]]
+ }
+ ]
+ },
+ "swellow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Swellow",
+ "item": "Choice Specs",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Swellow",
+ "item": "Choice Specs",
+ "ability": "Scrappy",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Swellow",
+ "item": "Toxic Orb",
+ "ability": "Guts",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Facade"], ["Brave Bird"], ["U-turn"], ["Quick Attack"]]
+ }
+ ]
+ },
+ "sandslash": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sandslash",
+ "item": "Lum Berry",
+ "ability": "Sand Rush",
+ "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
+ "nature": "Adamant",
+ "moves": [["Rapid Spin"], ["Knock Off"], ["Earthquake"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "samurott": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Samurott",
+ "item": "Life Orb",
+ "ability": "Torrent",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Rash",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Aqua Jet"], ["Megahorn", "Taunt"]]
+ },
+ {
+ "species": "Samurott",
+ "item": "Life Orb",
+ "ability": "Torrent",
+ "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]]
+ },
+ {
+ "species": "Samurott",
+ "item": "Lum Berry",
+ "ability": "Torrent",
+ "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]]
+ }
+ ]
+ },
+ "rotomfan": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom-Fan",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Air Slash"], ["Volt Switch"], ["Trick"], ["Thunderbolt"]]
+ },
+ {
+ "species": "Rotom-Fan",
+ "item": "Expert Belt",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Water"], ["Will-O-Wisp"]]
+ },
+ {
+ "species": "Rotom-Fan",
+ "item": "Expert Belt",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Grass"], ["Will-O-Wisp"]]
+ }
+ ]
+ },
+ "rotom": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]]
+ },
+ {
+ "species": "Rotom",
+ "item": "Choice Specs",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]]
+ },
+ {
+ "species": "Rotom",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 108, "spa": 0, "spd": 0, "spe": 148},
+ "nature": "Timid",
+ "moves": [["Will-O-Wisp"], ["Shadow Ball"], ["Volt Switch"], ["Pain Split"]]
+ },
+ {
+ "species": "Rotom",
+ "item": "Spell Tag",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Will-O-Wisp"], ["Hex"], ["Volt Switch"], ["Discharge", "Shadow Ball"]]
+ }
+ ]
+ },
+ "rhydon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rhydon",
+ "item": "Eviolite",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Rock Polish"]]
+ },
+ {
+ "species": "Rhydon",
+ "item": "Eviolite",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 252, "atk": 16, "def": 0, "spa": 0, "spd": 240, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
+ }
+ ]
+ },
+ "regirock": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Regirock",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 44, "def": 16, "spa": 0, "spd": 196, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Stone Edge", "Rock Slide"], ["Thunder Wave", "Toxic"], ["Drain Punch", "Earthquake"]]
+ }
+ ]
+ },
+ "pyroar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pyroar",
+ "item": "Life Orb",
+ "ability": "Unnerve",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Will-O-Wisp"]]
+ },
+ {
+ "species": "Pyroar",
+ "item": "Choice Specs",
+ "ability": "Unnerve",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Flamethrower", "Overheat"]]
+ }
+ ]
+ },
+ "primeape": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Primeape",
+ "item": "Choice Band",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Earthquake", "Gunk Shot"]]
+ },
+ {
+ "species": "Primeape",
+ "item": "Expert Belt",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Encore"]]
+ }
+ ]
+ },
+ "pawniard": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pawniard",
+ "item": "Eviolite",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Knock Off"], ["Iron Head"], ["Sucker Punch"]]
+ }
+ ]
+ },
+ "musharna": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Musharna",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Psyshock"], ["Heal Bell", "Signal Beam"], ["Moonlight"]]
+ },
+ {
+ "species": "Musharna",
+ "item": "Leftovers",
+ "ability": "Synchronize",
+ "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Barrier"], ["Moonlight"], ["Stored Power"]]
+ }
+ ]
+ },
+ "muk": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Muk",
+ "item": "Assault Vest",
+ "ability": "Poison Touch",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Gunk Shot"], ["Poison Jab"], ["Fire Punch"], ["Ice Punch"]]
+ },
+ {
+ "species": "Muk",
+ "item": "Choice Band",
+ "ability": "Poison Touch",
+ "evs": {"hp": 220, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 36},
+ "nature": "Adamant",
+ "moves": [["Gunk Shot"], ["Shadow Sneak"], ["Focus Punch"], ["Ice Punch"]]
+ }
+ ]
+ },
+ "mismagius": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mismagius",
+ "item": "Colbur Berry",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Destiny Bond"]]
+ },
+ {
+ "species": "Mismagius",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Nasty Plot"]]
+ },
+ {
+ "species": "Mismagius",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Taunt"], ["Will-O-Wisp"], ["Hex"], ["Pain Split"]]
+ }
+ ]
+ },
+ "miltank": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Miltank",
+ "item": "Leftovers",
+ "ability": "Scrappy",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Curse"], ["Body Slam"], ["Milk Drink"], ["Heal Bell"]]
+ },
+ {
+ "species": "Miltank",
+ "item": "Leftovers",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Impish",
+ "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Heal Bell"]]
+ },
+ {
+ "species": "Miltank",
+ "item": "Leftovers",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Impish",
+ "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "mesprit": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mesprit",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Energy Ball"], ["Healing Wish", "Calm Mind"]]
+ },
+ {
+ "species": "Mesprit",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Hidden Power Ground"], ["Healing Wish", "Calm Mind"]]
+ },
+ {
+ "species": "Mesprit",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Ice Beam", "Signal Beam"], ["U-turn"], ["Healing Wish"]]
+ },
+ {
+ "species": "Mesprit",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Psychic"], ["U-turn"], ["Thunder Wave", "Healing Wish"]]
+ }
+ ]
+ },
+ "mantine": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mantine",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 16, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Defog"], ["Scald"], ["Air Slash"], ["Toxic"]]
+ },
+ {
+ "species": "Mantine",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 32, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 224},
+ "nature": "Modest",
+ "moves": [["Air Slash"], ["Hydro Pump"], ["Ice Beam"], ["Rain Dance"]]
+ }
+ ]
+ },
+ "malamar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Malamar",
+ "item": "Leftovers",
+ "ability": "Contrary",
+ "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Sleep Talk"], ["Superpower"], ["Knock Off"]]
+ },
+ {
+ "species": "Malamar",
+ "item": "Choice Scarf",
+ "ability": "Contrary",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Superpower"], ["Knock Off"], ["Psycho Cut"], ["Switcheroo"]]
+ }
+ ]
+ },
+ "magmortar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Magmortar",
+ "item": "Assault Vest",
+ "ability": "Vital Spirit",
+ "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192},
+ "nature": "Modest",
+ "moves": [["Fire Blast"], ["Thunderbolt"], ["Focus Blast"], ["Flame Charge", "Earthquake"]]
+ },
+ {
+ "species": "Magmortar",
+ "item": "Assault Vest",
+ "ability": "Vital Spirit",
+ "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192},
+ "nature": "Modest",
+ "moves": [["Fire Blast"], ["Thunderbolt"], ["Hidden Power Grass"], ["Flame Charge", "Earthquake"]]
+ },
+ {
+ "species": "Magmortar",
+ "item": "Life Orb",
+ "ability": "Vital Spirit",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Mild",
+ "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Focus Blast"]]
+ },
+ {
+ "species": "Magmortar",
+ "item": "Life Orb",
+ "ability": "Vital Spirit",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Mild",
+ "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Hidden Power Grass"]]
+ }
+ ]
+ },
+ "ludicolo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ludicolo",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Giga Drain"], ["Ice Beam"], ["Rain Dance"]]
+ }
+ ]
+ },
+ "lilligant": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Lilligant",
+ "item": "Life Orb",
+ "ability": "Own Tempo",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Lilligant",
+ "item": "Life Orb",
+ "ability": "Own Tempo",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Lilligant",
+ "item": "Choice Scarf",
+ "ability": "Own Tempo",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Sleep Powder"], ["Leaf Storm"], ["Hidden Power Rock"], ["Healing Wish"]]
+ }
+ ]
+ },
+ "liepard": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Liepard",
+ "item": "Black Glasses",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Dark Pulse"], ["Copycat"], ["Encore"]]
+ },
+ {
+ "species": "Liepard",
+ "item": "Black Glasses",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Knock Off"], ["Encore"], ["Sucker Punch"], ["U-turn"]]
+ }
+ ]
+ },
+ "lanturn": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Lanturn",
+ "item": "Choice Specs",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184},
+ "nature": "Modest",
+ "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Lanturn",
+ "item": "Choice Specs",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184},
+ "nature": "Modest",
+ "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Grass"]]
+ },
+ {
+ "species": "Lanturn",
+ "item": "Leftovers",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 40, "atk": 0, "def": 152, "spa": 0, "spd": 208, "spe": 108},
+ "nature": "Calm",
+ "moves": [["Scald"], ["Volt Switch"], ["Heal Bell"], ["Toxic", "Thunder Wave", "Protect"]]
+ },
+ {
+ "species": "Lanturn",
+ "item": "Assault Vest",
+ "ability": "Volt Absorb",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 144, "spe": 112},
+ "nature": "Modest",
+ "moves": [["Scald"], ["Volt Switch"], ["Ice Beam"], ["Hidden Power Fire"]]
+ }
+ ]
+ },
+ "klinklang": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Klinklang",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164},
+ "nature": "Adamant",
+ "moves": [["Shift Gear"], ["Gear Grind"], ["Return"], ["Substitute"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "kangaskhan": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kangaskhan",
+ "gender": "F",
+ "item": "Silk Scarf",
+ "ability": "Scrappy",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Fake Out"], ["Double-Edge"], ["Sucker Punch"], ["Earthquake"]]
+ }
+ ]
+ },
+ "kabutops": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kabutops",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Rapid Spin"], ["Stone Edge"], ["Aqua Jet"], ["Waterfall"]]
+ },
+ {
+ "species": "Kabutops",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Stone Edge"], ["Aqua Jet"], ["Superpower", "Waterfall"]]
+ }
+ ]
+ },
+ "jynx": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Jynx",
+ "item": "Choice Scarf",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Ice Beam"], ["Psychic"], ["Focus Blast"], ["Trick"]]
+ },
+ {
+ "species": "Jynx",
+ "item": "Focus Sash",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Lovely Kiss"], ["Ice Beam"], ["Psychic"], ["Focus Blast", "Nasty Plot"]]
+ },
+ {
+ "species": "Jynx",
+ "item": "Life Orb",
+ "ability": "Dry Skin",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Lovely Kiss"], ["Nasty Plot"], ["Psychic"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "hariyama": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hariyama",
+ "item": "Assault Vest",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Bullet Punch"], ["Fake Out", "Earthquake"]]
+ },
+ {
+ "species": "Hariyama",
+ "item": "Choice Band",
+ "ability": "Guts",
+ "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Bullet Punch"]]
+ }
+ ]
+ },
+ "golurk": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Golurk",
+ "item": "Choice Band",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Shadow Punch"], ["Earthquake"], ["Ice Punch"], ["Zen Headbutt", "Thunder Punch"]]
+ },
+ {
+ "species": "Golurk",
+ "item": "Colbur Berry",
+ "ability": "No Guard",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Earthquake"], ["Shadow Punch"], ["Dynamic Punch"]]
+ },
+ {
+ "species": "Golurk",
+ "item": "Life Orb",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Rock Polish"], ["Earthquake"], ["Shadow Punch"], ["Ice Punch"]]
+ }
+ ]
+ },
+ "garbodor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Garbodor",
+ "item": "Rocky Helmet",
+ "ability": "Aftermath",
+ "evs": {"hp": 252, "atk": 0, "def": 160, "spa": 0, "spd": 0, "spe": 96},
+ "nature": "Impish",
+ "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Toxic Spikes"]]
+ },
+ {
+ "species": "Garbodor",
+ "item": "Rocky Helmet",
+ "ability": "Aftermath",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Seed Bomb"]]
+ }
+ ]
+ },
+ "ferroseed": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ferroseed",
+ "item": "Eviolite",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Relaxed",
+ "moves": [["Spikes"], ["Gyro Ball", "Knock Off"], ["Leech Seed"], ["Protect"]]
+ },
+ {
+ "species": "Ferroseed",
+ "item": "Eviolite",
+ "ability": "Iron Barbs",
+ "evs": {"hp": 252, "atk": 0, "def": 112, "spa": 0, "spd": 144, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Seed Bomb"], ["Leech Seed"], ["Thunder Wave"]]
+ }
+ ]
+ },
+ "exeggutor": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Exeggutor",
+ "item": "Life Orb",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Psychic"], ["Hidden Power Fire"], ["Sleep Powder"]]
+ },
+ {
+ "species": "Exeggutor",
+ "item": "Choice Specs",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Exeggutor",
+ "item": "Lum Berry",
+ "ability": "Harvest",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 176, "spd": 0, "spe": 84},
+ "nature": "Modest",
+ "moves": [["Sleep Powder"], ["Giga Drain"], ["Psychic"], ["Rest"]]
+ }
+ ]
+ },
+ "electivire": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Electivire",
+ "item": "Life Orb",
+ "ability": "Motor Drive",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Wild Charge"], ["Earthquake"], ["Ice Punch"], ["Hidden Power Grass"]]
+ }
+ ]
+ },
+ "cryogonal": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cryogonal",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Frost Breath"], ["Recover"]]
+ },
+ {
+ "species": "Cryogonal",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Hidden Power Ground"], ["Recover"]]
+ }
+ ]
+ },
+ "crustle": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Crustle",
+ "item": "Custap Berry",
+ "ability": "Sturdy",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Spikes"], ["Rock Blast"], ["Knock Off"]]
+ }
+ ]
+ },
+ "cacturne": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cacturne",
+ "item": "Life Orb",
+ "ability": "Water Absorb",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Rash",
+ "moves": [["Dark Pulse"], ["Giga Drain"], ["Sucker Punch"], ["Destiny Bond"]]
+ }
+ ]
+ },
+ "audino": {
+ "flags": {
+ "megaOnly": 1
+ },
+ "sets": [
+ {
+ "species": "Audino",
+ "item": "Audinite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Wish"], ["Protect"]]
+ },
+ {
+ "species": "Audino",
+ "item": "Audinite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Audino",
+ "item": "Audinite",
+ "ability": "Regenerator",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Calm Mind", "Healing Wish"], ["Dazzling Gleam"], ["Fire Blast"], ["Surf", "Thunder Wave", "Psychic"]]
+ },
+ {
+ "species": "Audino",
+ "item": "Audinite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Wish"], ["Protect"], ["Heal Bell"], ["Dazzling Gleam"]]
+ }
+ ]
+ },
+ "archeops": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Archeops",
+ "ability": "Defeatist",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Earth Power"]]
+ },
+ {
+ "species": "Archeops",
+ "ability": "Defeatist",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Defog"]]
+ },
+ {
+ "species": "Archeops",
+ "ability": "Defeatist",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Defog"], ["Roost"], ["Acrobatics"], ["Earth Power"]]
+ },
+ {
+ "species": "Archeops",
+ "item": "Focus Sash",
+ "ability": "Defeatist",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]]
+ },
+ {
+ "species": "Archeops",
+ "ability": "Defeatist",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Acrobatics"], ["Stone Edge"], ["Earth Power"], ["Roost"]]
+ }
+ ]
+ },
+ "claydol": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Claydol",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Rapid Spin"], ["Earth Power"], ["Shadow Ball"], ["Psychic", "Psyshock"]]
+ }
+ ]
+ },
+ "tauros": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tauros",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Rock Climb"], ["Earthquake"], ["Fire Blast"], ["Iron Tail", "Zen Headbutt"]]
+ }
+ ]
+ },
+ "mawile": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mawile",
+ "item": "Life Orb",
+ "ability": "Sheer Force",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naughty",
+ "moves": [["Play Rough"], ["Iron Head"], ["Fire Blast"], ["Sucker Punch"]]
+ }
+ ]
+ },
+ "scyther": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Scyther",
+ "item": "Eviolite",
+ "ability": "Technician",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Aerial Ace"], ["U-turn"], ["Roost"]]
+ },
+ {
+ "species": "Scyther",
+ "item": "Choice Band",
+ "ability": "Technician",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off", "Pursuit"], ["Quick Attack"]]
+ },
+ {
+ "species": "Scyther",
+ "item": "Choice Scarf",
+ "ability": "Technician",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off"], ["Bug Bite"]]
+ }
+ ]
+ },
+ "torterra": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Torterra",
+ "item": "Leftovers",
+ "ability": "Overgrow",
+ "evs": {"hp": 252, "atk": 128, "def": 128, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Wood Hammer"], ["Earthquake"], ["Stealth Rock"], ["Synthesis"]]
+ },
+ {
+ "species": "Torterra",
+ "item": "Soft Sand",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Rock Polish"], ["Wood Hammer"], ["Earthquake"], ["Stone Edge"]]
+ }
+ ]
+ },
+ "haunter": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Haunter",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Destiny Bond"], ["Trick"]]
+ },
+ {
+ "species": "Haunter",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Taunt"], ["Destiny Bond", "Will-O-Wisp"]]
+ },
+ {
+ "species": "Haunter",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Substitute"], ["Pain Split"]]
+ }
+ ]
+ },
+ "prinplup": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Prinplup",
+ "item": "Eviolite",
+ "ability": "Torrent",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Defog"], ["Scald"], ["Stealth Rock"], ["Toxic"]]
+ }
+ ]
+ },
+ "tangela": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tangela",
+ "item": "Eviolite",
+ "ability": "Regenerator",
+ "evs": {"hp": 236, "atk": 0, "def": 48, "spa": 224, "spd": 0, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Leaf Storm"], ["Giga Drain", "Ancient Power"], ["Sleep Powder"], ["Hidden Power Fire"]]
+ },
+ {
+ "species": "Tangela",
+ "item": "Eviolite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"], ["Leech Seed"]]
+ }
+ ]
+ },
+ "pelipper": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pelipper",
+ "item": "Leftovers",
+ "ability": "Keen Eye",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Defog"], ["Scald"], ["Roost"], ["U-turn", "Hurricane"]]
+ }
+ ]
+ },
+ "piloswine": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Piloswine",
+ "item": "Eviolite",
+ "ability": "Thick Fat",
+ "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Stealth Rock"], ["Icicle Crash"], ["Ice Shard"]]
+ }
+ ]
+ },
+ "poliwrath": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Poliwrath",
+ "item": "Choice Specs",
+ "ability": "Water Absorb",
+ "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
+ },
+ {
+ "species": "Poliwrath",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
+ "nature": "Modest",
+ "moves": [["Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
+ }
+ ]
+ },
+ "shiftry": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Shiftry",
+ "item": "Life Orb",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Lonely",
+ "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Explosion"]]
+ },
+ {
+ "species": "Shiftry",
+ "item": "Life Orb",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Lonely",
+ "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Defog"]]
+ },
+ {
+ "species": "Shiftry",
+ "item": "Black Glasses",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Knock Off"], ["Seed Bomb"], ["Sucker Punch"]]
+ }
+ ]
+ },
+ "charizard": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Charizard",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Air Slash"], ["Focus Blast"], ["Roost"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Fire Blast"], ["Air Slash"], ["Hidden Power Grass"], ["Roost"]]
+ },
+ {
+ "species": "Charizard",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Fire Blast"], ["Air Slash"], ["Earthquake"], ["Roost"]]
+ },
+ {
+ "species": "Charizard",
+ "ability": "Blaze",
+ "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Acrobatics"], ["Roost"], ["Will-O-Wisp"]]
+ }
+ ]
+ },
+ "floatzel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Floatzel",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Focus Blast"], ["Taunt"]]
+ }
+ ]
+ },
+ "abomasnow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Abomasnow",
+ "item": "Life Orb",
+ "ability": "Snow Warning",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Blizzard"], ["Giga Drain"], ["Earthquake"], ["Ice Shard"]]
+ },
+ {
+ "species": "Abomasnow",
+ "item": "Life Orb",
+ "ability": "Snow Warning",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Ice Shard"], ["Seed Bomb"], ["Earthquake"]]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Hitmonchan",
+ "item": "Life Orb",
+ "ability": "Iron Fist",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Drain Punch", "Close Combat"], ["Mach Punch"], ["Ice Punch", "Stone Edge"], ["Rapid Spin"]]
+ }
+ ]
+ },
+ "skuntank": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Skuntank",
+ "item": "Lum Berry",
+ "ability": "Aftermath",
+ "evs": {"hp": 0, "atk": 232, "def": 0, "spa": 0, "spd": 132, "spe": 144},
+ "nature": "Adamant",
+ "moves": [["Sucker Punch"], ["Pursuit"], ["Poison Jab"], ["Taunt"]]
+ },
+ {
+ "species": "Skuntank",
+ "item": "Expert Belt",
+ "ability": "Aftermath",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Dark Pulse"], ["Fire Blast"], ["Hidden Power Grass"], ["Defog"]]
+ }
+ ]
+ },
+ "omastar": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Omastar",
+ "item": "White Herb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]]
+ },
+ {
+ "species": "Omastar",
+ "item": "Leftovers",
+ "ability": "Shell Armor",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Icy Wind"]]
+ },
+ {
+ "species": "Omastar",
+ "item": "Leftovers",
+ "ability": "Shell Armor",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Hidden Power Electric"]]
+ },
+ {
+ "species": "Omastar",
+ "item": "Focus Sash",
+ "ability": "Weak Armor",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]]
+ }
+ ]
+ },
+ "pinsir": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pinsir",
+ "item": "Life Orb",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["X-Scissor"], ["Earthquake"], ["Stone Edge"]]
+ },
+ {
+ "species": "Pinsir",
+ "item": "Choice Band",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["X-Scissor"], ["Earthquake"], ["Stone Edge"], ["Close Combat"]]
+ },
+ {
+ "species": "Pinsir",
+ "item": "Focus Sash",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["X-Scissor"], ["Rock Tomb"], ["Earthquake"]]
+ }
+ ]
+ },
+ "grumpig": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Calm Mind"], ["Psyshock"], ["Focus Blast"], ["Signal Beam"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic", "Psyshock"], ["Focus Blast"], ["Taunt"], ["Thunder Wave", "Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Psychic"], ["Heal Bell"], ["Thunder Wave"], ["Whirlwind"]]
+ }
+ ]
+ },
+ "sliggoo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sliggoo",
+ "item": "Eviolite",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 0, "spd": 88, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Curse"], ["Outrage"], ["Rest"], ["Sleep Talk"]]
+ },
+ {
+ "species": "Sliggoo",
+ "item": "Eviolite",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 92, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 164},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Muddy Water"], ["Thunderbolt"]]
+ }
+ ]
+ },
+ "camerupt": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Camerupt",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
+ "nature": "Sassy",
+ "moves": [["Stealth Rock"], ["Lava Plume"], ["Earthquake"], ["Toxic"]]
+ },
+ {
+ "species": "Camerupt",
+ "item": "Choice Specs",
+ "ability": "Solid Rock",
+ "evs": {"hp": 140, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 116},
+ "nature": "Modest",
+ "moves": [["Fire Blast"], ["Earth Power"], ["Lava Plume"], ["Hidden Power Electric"]]
+ }
+ ]
+ },
+ "ninetales": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ninetales",
+ "item": "Life Orb",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Fire Blast"], ["Psyshock"], ["Energy Ball"]]
+ }
+ ]
+ },
+ "manectric": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Manectric",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Grass"], ["Overheat"]]
+ }
+ ]
+ },
+ "roselia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Spikes"], ["Giga Drain"], ["Synthesis"], ["Sludge Bomb"]]
+ },
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176},
+ "nature": "Modest",
+ "moves": [["Spikes"], ["Leaf Storm"], ["Sludge Bomb"], ["Sleep Powder"]]
+ }
+ ]
+ },
+ "misdreavus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Misdreavus",
+ "item": "Eviolite",
+ "ability": "Levitate",
+ "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
+ "nature": "Bold",
+ "moves": [["Hex"], ["Will-O-Wisp"], ["Taunt"], ["Pain Split"]]
+ }
+ ]
+ },
+ "clefairy": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Clefairy",
+ "item": "Eviolite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Healing Wish"]]
+ },
+ {
+ "species": "Clefairy",
+ "item": "Eviolite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Stealth Rock"]]
+ }
+ ]
+ }
+ },
+ "PU": {
+ "prinplup": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Prinplup",
+ "item": "Eviolite",
+ "ability": "Torrent",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Scald"], ["Toxic"], ["Defog"]]
+ }
+ ]
+ },
+ "ampharos": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ampharos",
+ "item": "Life Orb",
+ "ability": "Static",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Agility"], ["Thunderbolt"], ["Focus Blast"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "cryogonal": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Cryogonal",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Freeze-Dry"], ["Hidden Power Fighting"], ["Recover"], ["Rapid Spin"]]
+ },
+ {
+ "species": "Cryogonal",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 156, "spa": 0, "spd": 104, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Recover"], ["Hidden Power Fighting"]]
+ }
+ ]
+ },
+ "glalie": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Glalie",
+ "item": "Focus Sash",
+ "ability": "Inner Focus",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Spikes"], ["Taunt"], ["Ice Beam", "Freeze-Dry"], ["Explosion"]]
+ }
+ ]
+ },
+ "camerupt": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Camerupt",
+ "item": "Leftovers",
+ "ability": "Solid Rock",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
+ "nature": "Timid",
+ "moves": [["Stealth Rock"], ["Lava Plume", "Fire Blast"], ["Earth Power"], ["Roar", "Toxic"]]
+ }
+ ]
+ },
+ "altaria": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Altaria",
+ "item": "Leftovers",
+ "ability": "Natural Cure",
+ "evs": {"hp": 116, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 140},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Dragon Claw"], ["Substitute", "Earthquake"], ["Roost"]]
+ },
+ {
+ "species": "Altaria",
+ "item": "Life Orb",
+ "ability": "Natural Cure",
+ "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Toxic"]]
+ },
+ {
+ "species": "Altaria",
+ "item": "Life Orb",
+ "ability": "Natural Cure",
+ "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140},
+ "nature": "Modest",
+ "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Hidden Power Fighting"]]
+ }
+ ]
+ },
+ "audino": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Audino",
+ "item": "Leftovers",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Knock Off"], ["Wish"], ["Protect"], ["Encore", "Toxic", "Double-Edge", "Thunder Wave"]]
+ }
+ ]
+ },
+ "bouffalant": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Bouffalant",
+ "item": "Leftovers",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Substitute"], ["Swords Dance"], ["Return"], ["Earthquake"]],
+ "happiness": 255
+ },
+ {
+ "species": "Bouffalant",
+ "item": "Assault Vest",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Return"], ["Earthquake"], ["Megahorn"], ["Pursuit", "Head Charge"]],
+ "happiness": 255
+ },
+ {
+ "species": "Bouffalant",
+ "item": "Choice Band",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Head Charge"], ["Earthquake"], ["Megahorn"], ["Pursuit"]]
+ }
+ ]
+ },
+ "gorebyss": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gorebyss",
+ "item": "White Herb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]]
+ }
+ ]
+ },
+ "pawniard": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Pawniard",
+ "item": "Eviolite",
+ "ability": "Defiant",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Swords Dance"]]
+ }
+ ]
+ },
+ "gothitelle": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gothitelle",
+ "item": "Leftovers",
+ "ability": "Competitive",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Mean Look"], ["Rest"], ["Psychic"]]
+ }
+ ]
+ },
+ "roselia": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Spikes"]]
+ },
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Toxic Spikes"]]
+ },
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Sleep Powder"]]
+ },
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Spikes"]]
+ },
+ {
+ "species": "Roselia",
+ "item": "Eviolite",
+ "ability": "Natural Cure",
+ "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
+ "nature": "Modest",
+ "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Toxic Spikes"]]
+ }
+ ]
+ },
+ "floatzel": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Floatzel",
+ "item": "Choice Specs",
+ "ability": "Water Veil",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]]
+ },
+ {
+ "species": "Floatzel",
+ "item": "Choice Band",
+ "ability": "Water Veil",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Waterfall"], ["Ice Punch"], ["Return"], ["Aqua Jet"]],
+ "happiness": 255
+ },
+ {
+ "species": "Floatzel",
+ "item": "Life Orb",
+ "ability": "Water Veil",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Ice Punch"], ["Hidden Power Electric"]]
+ },
+ {
+ "species": "Floatzel",
+ "item": "Choice Scarf",
+ "ability": "Water Veil",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]]
+ }
+ ]
+ },
+ "stoutland": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Stoutland",
+ "item": "Choice Band",
+ "ability": "Scrappy",
+ "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Return"], ["Superpower"], ["Facade"], ["Pursuit", "Crunch"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "dodrio": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dodrio",
+ "item": "Choice Band",
+ "ability": "Early Bird",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack", "Pursuit"]],
+ "happiness": 255
+ },
+ {
+ "species": "Dodrio",
+ "item": "Choice Scarf",
+ "ability": "Early Bird",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Pursuit"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "zebstrika": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zebstrika",
+ "item": "Life Orb",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Zebstrika",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "jumpluff": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Jumpluff",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Acrobatics"], ["Sleep Powder"], ["U-turn", "Seed Bomb"], ["Memento"]]
+ },
+ {
+ "species": "Jumpluff",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Acrobatics"], ["Sleep Powder"], ["Seed Bomb"], ["Swords Dance"]]
+ }
+ ]
+ },
+ "grumpig": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Colbur Berry",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
+ "nature": "Modest",
+ "moves": [["Psychic"], ["Focus Blast"], ["Calm Mind"], ["Shadow Ball", "Taunt"]]
+ },
+ {
+ "species": "Grumpig",
+ "item": "Leftovers",
+ "ability": "Thick Fat",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Psychic"], ["Thunder Wave", "Toxic"], ["Focus Blast", "Whirlwind"], ["Protect"]]
+ }
+ ]
+ },
+ "stunfisk": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Stunfisk",
+ "item": "Leftovers",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]]
+ },
+ {
+ "species": "Stunfisk",
+ "item": "Leftovers",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
+ },
+ {
+ "species": "Stunfisk",
+ "item": "Passho Berry",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Toxic"]]
+ },
+ {
+ "species": "Stunfisk",
+ "item": "Passho Berry",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
+ },
+ {
+ "species": "Stunfisk",
+ "item": "Leftovers",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]]
+ },
+ {
+ "species": "Stunfisk",
+ "item": "Leftovers",
+ "ability": "Static",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
+ }
+ ]
+ },
+ "rapidash": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rapidash",
+ "item": "Leftovers",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]]
+ },
+ {
+ "species": "Rapidash",
+ "item": "Charcoal",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]]
+ }
+ ]
+ },
+ "tangela": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Tangela",
+ "item": "Eviolite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Bold",
+ "moves": [["Giga Drain"], ["Synthesis"], ["Hidden Power Fire"], ["Sleep Powder", "Knock Off"]]
+ },
+ {
+ "species": "Tangela",
+ "item": "Eviolite",
+ "ability": "Regenerator",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"]]
+ }
+ ]
+ },
+ "simipour": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Simipour",
+ "item": "Life Orb",
+ "ability": "Torrent",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Knock Off", "Low Kick", "Nasty Plot"]]
+ },
+ {
+ "species": "Simipour",
+ "item": "Life Orb",
+ "ability": "Torrent",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Knock Off", "Low Kick", "Nasty Plot"]]
+ },
+ {
+ "species": "Simipour",
+ "item": "Choice Scarf",
+ "ability": "Torrent",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Hasty",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Superpower", "Knock Off"]]
+ },
+ {
+ "species": "Simipour",
+ "item": "Salac Berry",
+ "ability": "Torrent",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Hydro Pump"], ["Ice Beam"], ["Substitute"], ["Nasty Plot"]]
+ }
+ ]
+ },
+ "kadabra": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Kadabra",
+ "item": "Focus Sash",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball", "Signal Beam"], ["Thunder Wave"], ["Encore"]]
+ },
+ {
+ "species": "Kadabra",
+ "item": "Focus Sash",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Hidden Power Fighting"], ["Thunder Wave"], ["Encore"]]
+ },
+ {
+ "species": "Kadabra",
+ "item": "Focus Sash",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Shadow Ball"], ["Thunder Wave"], ["Encore"]]
+ },
+ {
+ "species": "Kadabra",
+ "item": "Life Orb",
+ "ability": "Magic Guard",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Hidden Power Fighting"], ["Shadow Ball"], ["Substitute", "Encore"]]
+ }
+ ]
+ },
+ "raichu": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Raichu",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
+ },
+ {
+ "species": "Raichu",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Signal Beam"]]
+ },
+ {
+ "species": "Raichu",
+ "item": "Life Orb",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Raichu",
+ "item": "Life Orb",
+ "ability": "Static",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam", "Focus Blast"], ["Surf"]]
+ },
+ {
+ "species": "Raichu",
+ "item": "Choice Scarf",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Focus Blast"]]
+ },
+ {
+ "species": "Raichu",
+ "item": "Choice Scarf",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "regice": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Regice",
+ "item": "Life Orb",
+ "ability": "Clear Body",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Ice Beam"], ["Focus Blast"], ["Thunderbolt"], ["Rock Polish"]]
+ },
+ {
+ "species": "Regice",
+ "item": "Leftovers",
+ "ability": "Clear Body",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Thunder Wave"], ["Ice Beam"], ["Thunderbolt"], ["Focus Blast"]]
+ }
+ ]
+ },
+ "relicanth": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Relicanth",
+ "item": "Stone Plate",
+ "ability": "Rock Head",
+ "evs": {"hp": 104, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 148},
+ "nature": "Adamant",
+ "moves": [["Rock Polish"], ["Head Smash"], ["Waterfall"], ["Earthquake"]]
+ },
+ {
+ "species": "Relicanth",
+ "item": "Leftovers",
+ "ability": "Rock Head",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Toxic", "Yawn"]]
+ },
+ {
+ "species": "Relicanth",
+ "item": "Leftovers",
+ "ability": "Rock Head",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Protect"]]
+ },
+ {
+ "species": "Relicanth",
+ "item": "Leftovers",
+ "ability": "Rock Head",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Head Smash"], ["Stealth Rock"], ["Protect"], ["Toxic", "Yawn"]]
+ },
+ {
+ "species": "Relicanth",
+ "item": "Stone Plate",
+ "ability": "Rock Head",
+ "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88},
+ "nature": "Adamant",
+ "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]]
+ },
+ {
+ "species": "Relicanth",
+ "item": "Leftovers",
+ "ability": "Rock Head",
+ "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88},
+ "nature": "Adamant",
+ "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rotom-Frost",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Trick", "Will-O-Wisp"]]
+ },
+ {
+ "species": "Rotom-Frost",
+ "item": "Choice Scarf",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Hidden Power Ice"]]
+ },
+ {
+ "species": "Rotom-Frost",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Will-O-Wisp", "Volt Switch"]]
+ },
+ {
+ "species": "Rotom-Frost",
+ "item": "Life Orb",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Pain Split", "Will-O-Wisp"]]
+ }
+ ]
+ },
+ "simisage": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Simisage",
+ "item": "Life Orb",
+ "ability": "Overgrow",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Naive",
+ "moves": [["Leaf Storm"], ["Superpower"], ["Gunk Shot"], ["Knock Off"]]
+ }
+ ]
+ },
+ "chatot": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Chatot",
+ "item": "Choice Scarf",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
+ },
+ {
+ "species": "Chatot",
+ "item": "Choice Scarf",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
+ },
+ {
+ "species": "Chatot",
+ "item": "Choice Specs",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
+ }
+ ]
+ },
+ "mrmime": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mr. Mime",
+ "item": "Choice Scarf",
+ "ability": "Soundproof",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Healing Wish"]]
+ },
+ {
+ "species": "Mr. Mime",
+ "item": "Choice Specs",
+ "ability": "Soundproof",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball"]]
+ },
+ {
+ "species": "Mr. Mime",
+ "item": "Life Orb",
+ "ability": "Soundproof",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball", "Healing Wish"]]
+ }
+ ]
+ },
+ "mightyena": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Mightyena",
+ "item": "Life Orb",
+ "ability": "Moxie",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Adamant",
+ "moves": [["Crunch"], ["Sucker Punch"], ["Play Rough"], ["Iron Tail"]]
+ }
+ ]
+ },
+ "fraxure": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Fraxure",
+ "item": "Eviolite",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Dragon Dance"], ["Outrage"], ["Low Kick"], ["Dual Chop", "Taunt", "Poison Jab"]]
+ }
+ ]
+ },
+ "misdreavus": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Misdreavus",
+ "item": "Eviolite",
+ "ability": "Levitate",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Nasty Plot"], ["Taunt", "Will-O-Wisp"], ["Shadow Ball"], ["Thunderbolt"]]
+ },
+ {
+ "species": "Misdreavus",
+ "item": "Eviolite",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 124, "spa": 0, "spd": 0, "spe": 136},
+ "nature": "Timid",
+ "moves": [["Will-O-Wisp"], ["Taunt"], ["Foul Play"], ["Pain Split", "Thunder Wave"]]
+ }
+ ]
+ },
+ "probopass": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Probopass",
+ "item": "Leftovers",
+ "ability": "Magnet Pull",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]]
+ },
+ {
+ "species": "Probopass",
+ "item": "Passho Berry",
+ "ability": "Sturdy",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]]
+ },
+ {
+ "species": "Probopass",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Calm",
+ "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Toxic", "Thunder Wave"]]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Sawsbuck",
+ "item": "Choice Scarf",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Megahorn"]]
+ },
+ {
+ "species": "Sawsbuck",
+ "item": "Choice Scarf",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Toxic"]]
+ },
+ {
+ "species": "Sawsbuck",
+ "item": "Salac Berry",
+ "ability": "Sap Sipper",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Return"], ["Horn Leech"], ["Substitute"], ["Swords Dance"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "arbok": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Arbok",
+ "item": "Black Sludge",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]]
+ },
+ {
+ "species": "Arbok",
+ "item": "Shuca Berry",
+ "ability": "Intimidate",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]]
+ },
+ {
+ "species": "Arbok",
+ "item": "Black Sludge",
+ "ability": "Shed Skin",
+ "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 236, "spe": 20},
+ "nature": "Careful",
+ "moves": [["Coil"], ["Gunk Shot"], ["Rest"], ["Earthquake"]]
+ }
+ ]
+ },
+ "duosion": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Duosion",
+ "item": "Eviolite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Calm Mind"], ["Recover"], ["Psyshock", "Psychic"], ["Acid Armor", "Signal Beam"]]
+ }
+ ]
+ },
+ "ninetales": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ninetales",
+ "item": "Leftovers",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Nasty Plot"], ["Fire Blast"], ["Energy Ball"]]
+ },
+ {
+ "species": "Ninetales",
+ "item": "Passho Berry",
+ "ability": "Flash Fire",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Fire Blast"], ["Energy Ball"], ["Hidden Power Ground"]]
+ }
+ ]
+ },
+ "articuno": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Articuno",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
+ "nature": "Modest",
+ "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]]
+ },
+ {
+ "species": "Articuno",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
+ "nature": "Modest",
+ "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Hidden Power Fighting"]]
+ },
+ {
+ "species": "Articuno",
+ "item": "Life Orb",
+ "ability": "Pressure",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]]
+ }
+ ]
+ },
+ "clefairy": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Clefairy",
+ "item": "Eviolite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Healing Wish"], ["Stealth Rock"]]
+ },
+ {
+ "species": "Clefairy",
+ "item": "Eviolite",
+ "ability": "Magic Guard",
+ "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Bold",
+ "moves": [["Calm Mind"], ["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Encore"]]
+ }
+ ]
+ },
+ "golduck": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Golduck",
+ "item": "Life Orb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Modest",
+ "moves": [["Hydro Pump"], ["Rain Dance"], ["Ice Beam"], ["Psyshock", "Focus Blast"]]
+ }
+ ]
+ },
+ "golem": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Golem",
+ "item": "Custap Berry",
+ "ability": "Sturdy",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Explosion"], ["Stealth Rock"], ["Stone Edge"]]
+ },
+ {
+ "species": "Golem",
+ "item": "Weakness Policy",
+ "ability": "Sturdy",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Earthquake"], ["Sucker Punch"], ["Stealth Rock"], ["Stone Edge"]]
+ },
+ {
+ "species": "Golem",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 56, "def": 0, "spa": 0, "spd": 204, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Stone Edge"], ["Earthquake"], ["Protect"]]
+ }
+ ]
+ },
+ "gourgeistsuper": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gourgeist-Super",
+ "item": "Leftovers",
+ "ability": "Frisk",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Foul Play"], ["Will-O-Wisp"], ["Synthesis"], ["Seed Bomb"]]
+ }
+ ]
+ },
+ "lickilicky": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Lickilicky",
+ "item": "Leftovers",
+ "ability": "Oblivious",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Wish"], ["Protect"], ["Body Slam", "Knock Off"], ["Dragon Tail", "Heal Bell"]]
+ }
+ ]
+ },
+ "monferno": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Monferno",
+ "item": "Eviolite",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
+ },
+ {
+ "species": "Monferno",
+ "item": "Life Orb",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
+ },
+ {
+ "species": "Monferno",
+ "item": "Eviolite",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
+ },
+ {
+ "species": "Monferno",
+ "item": "Eviolite",
+ "ability": "Iron Fist",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "politoed": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Politoed",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
+ "nature": "Modest",
+ "moves": [["Scald"], ["Ice Beam"], ["Hidden Power Electric"], ["Encore", "Toxic"]]
+ },
+ {
+ "species": "Politoed",
+ "item": "Leftovers",
+ "ability": "Water Absorb",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Calm",
+ "moves": [["Perish Song"], ["Scald"], ["Toxic"], ["Protect"]]
+ }
+ ]
+ },
+ "seaking": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Seaking",
+ "item": "Leftovers",
+ "ability": "Lightning Rod",
+ "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152},
+ "nature": "Adamant",
+ "moves": [["Waterfall"], ["Knock Off"], ["Megahorn"], ["Haze", "Protect"]]
+ }
+ ]
+ },
+ "simisear": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Simisear",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Naive",
+ "moves": [["Knock Off"], ["Rock Slide"], ["Superpower", "Low Kick"], ["Overheat", "Fire Blast"]]
+ },
+ {
+ "species": "Simisear",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Naive",
+ "moves": [["Fire Blast"], ["Grass Knot"], ["Low Kick"], ["Knock Off"]]
+ },
+ {
+ "species": "Simisear",
+ "item": "Life Orb",
+ "ability": "Blaze",
+ "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Nasty Plot"], ["Focus Blast"], ["Grass Knot"], ["Fire Blast"]]
+ },
+ {
+ "species": "Simisear",
+ "item": "Salac Berry",
+ "ability": "Blaze",
+ "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Substitute"], ["Nasty Plot"], ["Focus Blast"], ["Fire Blast"]]
+ }
+ ]
+ },
+ "swanna": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Swanna",
+ "item": "Life Orb",
+ "ability": "Keen Eye",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
+ "nature": "Timid",
+ "moves": [["Defog"], ["Roost"], ["Scald"], ["Hurricane"]]
+ }
+ ]
+ },
+ "vullaby": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vullaby",
+ "item": "Eviolite",
+ "ability": "Overcoat",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]]
+ },
+ {
+ "species": "Vullaby",
+ "item": "Eviolite",
+ "ability": "Overcoat",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]]
+ }
+ ]
+ },
+ "basculin": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Basculin",
+ "item": "Choice Band",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Waterfall", "Aqua Tail"], ["Aqua Jet"], ["Crunch", "Zen Headbutt"], ["Double-Edge"]]
+ },
+ {
+ "species": "Basculin",
+ "item": "Life Orb",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 30, "spd": 31, "spe": 31},
+ "nature": "Naive",
+ "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Superpower"]]
+ },
+ {
+ "species": "Basculin",
+ "item": "Life Orb",
+ "ability": "Adaptability",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Hidden Power Electric"]]
+ }
+ ]
+ },
+ "gabite": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gabite",
+ "item": "Eviolite",
+ "ability": "Rough Skin",
+ "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]]
+ },
+ {
+ "species": "Gabite",
+ "item": "Eviolite",
+ "ability": "Rough Skin",
+ "evs": {"hp": 248, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 40},
+ "nature": "Adamant",
+ "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]]
+ },
+ {
+ "species": "Gabite",
+ "item": "Eviolite",
+ "ability": "Rough Skin",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Earthquake"], ["Outrage"], ["Stealth Rock"], ["Stone Edge", "Toxic", "Roar"]]
+ }
+ ]
+ },
+ "gourgeistsmall": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Gourgeist-Small",
+ "item": "Leftovers",
+ "ability": "Frisk",
+ "evs": {"hp": 152, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Leech Seed"], ["Substitute"], ["Foul Play", "Seed Bomb"], ["Will-O-Wisp", "Disable"]]
+ },
+ {
+ "species": "Gourgeist-Small",
+ "item": "Choice Scarf",
+ "ability": "Frisk",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Seed Bomb"], ["Trick"], ["Rock Slide"], ["Explosion", "Destiny Bond"]]
+ }
+ ]
+ },
+ "klang": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Klang",
+ "item": "Eviolite",
+ "ability": "Clear Body",
+ "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 100, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Sleep Talk"], ["Shift Gear"], ["Gear Grind"]]
+ }
+ ]
+ },
+ "leafeon": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Leafeon",
+ "item": "Choice Band",
+ "ability": "Leaf Guard",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Leaf Blade"], ["Bullet Seed"], ["Knock Off"], ["Double-Edge", "Quick Attack"]]
+ },
+ {
+ "species": "Leafeon",
+ "item": "Yache Berry",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]]
+ },
+ {
+ "species": "Leafeon",
+ "item": "Occa Berry",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]]
+ },
+ {
+ "species": "Leafeon",
+ "item": "Choice Scarf",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Double-Edge", "Return"], ["Leaf Blade"], ["Knock Off"], ["Bullet Seed", "X-Scissor"]]
+ }
+ ]
+ },
+ "leavanny": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Leavanny",
+ "item": "Focus Sash",
+ "ability": "Chlorophyll",
+ "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Leaf Storm"], ["Electroweb", "Magic Coat"], ["Sticky Web"], ["Knock Off"]]
+ }
+ ]
+ },
+ "metang": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Metang",
+ "item": "Eviolite",
+ "ability": "Clear Body",
+ "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Adamant",
+ "moves": [["Meteor Mash"], ["Stealth Rock"], ["Pursuit", "Bullet Punch"], ["Earthquake", "Zen Headbutt"]]
+ },
+ {
+ "species": "Metang",
+ "item": "Eviolite",
+ "ability": "Clear Body",
+ "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 8},
+ "nature": "Careful",
+ "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Pursuit", "Bullet Punch", "Earthquake", "Zen Headbutt"]]
+ },
+ {
+ "species": "Metang",
+ "item": "Eviolite",
+ "ability": "Clear Body",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
+ "nature": "Impish",
+ "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Earthquake", "Zen Headbutt", "Pursuit", "Bullet Punch"]]
+ }
+ ]
+ },
+ "ninjask": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Ninjask",
+ "item": "Choice Band",
+ "ability": "Infiltrator",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["U-turn"], ["X-Scissor"], ["Aerial Ace"], ["Toxic"]]
+ }
+ ]
+ },
+ "purugly": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Purugly",
+ "item": "Life Orb",
+ "ability": "Defiant",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Return"], ["Fake Out"], ["Knock Off"], ["U-turn", "Sucker Punch", "Wake-Up Slap"]],
+ "happiness": 255
+ }
+ ]
+ },
+ "solrock": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Solrock",
+ "item": "Leftovers",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Zen Headbutt", "Stone Edge"], ["Morning Sun"]]
+ },
+ {
+ "species": "Solrock",
+ "item": "Colbur Berry",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Stone Edge"], ["Morning Sun"]]
+ }
+ ]
+ },
+ "venipede": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Venipede",
+ "item": "Focus Sash",
+ "ability": "Speed Boost",
+ "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Timid",
+ "moves": [["Protect"], ["Spikes"], ["Toxic Spikes"], ["Endeavor"]]
+ }
+ ]
+ },
+ "armaldo": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Armaldo",
+ "item": "Leftovers",
+ "ability": "Battle Armor",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Toxic"]]
+ },
+ {
+ "species": "Armaldo",
+ "item": "Leftovers",
+ "ability": "Battle Armor",
+ "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]]
+ },
+ {
+ "species": "Armaldo",
+ "item": "Leftovers",
+ "ability": "Battle Armor",
+ "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Stone Edge"], ["Knock Off"], ["Rapid Spin"], ["Earthquake"]]
+ }
+ ]
+ },
+ "dusknoir": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Dusknoir",
+ "item": "Choice Band",
+ "ability": "Frisk",
+ "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Trick"]]
+ },
+ {
+ "species": "Dusknoir",
+ "item": "Spell Tag",
+ "ability": "Frisk",
+ "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Adamant",
+ "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Will-O-Wisp"]]
+ }
+ ]
+ },
+ "huntail": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Huntail",
+ "item": "White Herb",
+ "ability": "Water Veil",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naughty",
+ "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Ice Beam"]]
+ },
+ {
+ "species": "Huntail",
+ "item": "White Herb",
+ "ability": "Swift Swim",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Double-Edge"]]
+ }
+ ]
+ },
+ "murkrow": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Murkrow",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Brave Bird"], ["Sucker Punch"], ["Pursuit"], ["Thunder Wave"]]
+ },
+ {
+ "species": "Murkrow",
+ "item": "Life Orb",
+ "ability": "Prankster",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Brave Bird"], ["Sucker Punch"], ["Hidden Power Fighting"], ["Thunder Wave", "Pursuit"]]
+ }
+ ]
+ },
+ "vibrava": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Vibrava",
+ "item": "Eviolite",
+ "ability": "Levitate",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Earthquake"], ["U-turn", "Toxic"], ["Defog"], ["Roost"]]
+ }
+ ]
+ },
+ "zweilous": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Zweilous",
+ "item": "Eviolite",
+ "ability": "Hustle",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Rest"], ["Sleep Talk"], ["Crunch"], ["Dragon Tail", "Roar"]]
+ },
+ {
+ "species": "Zweilous",
+ "item": "Choice Band",
+ "ability": "Hustle",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Crunch"], ["Outrage"], ["Superpower"], ["Sleep Talk"]]
+ }
+ ]
+ },
+ "avalugg": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Avalugg",
+ "item": "Leftovers",
+ "ability": "Sturdy",
+ "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
+ "nature": "Careful",
+ "moves": [["Recover"], ["Rapid Spin"], ["Avalanche"], ["Roar", "Toxic"]]
+ }
+ ]
+ },
+ "electrode": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Electrode",
+ "item": "Life Orb",
+ "ability": "Soundproof",
+ "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
+ "nature": "Modest",
+ "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Hidden Power Ice"]]
+ }
+ ]
+ },
+ "marowak": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Marowak",
+ "item": "Thick Club",
+ "ability": "Rock Head",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stealth Rock"]]
+ },
+ {
+ "species": "Marowak",
+ "item": "Thick Club",
+ "ability": "Rock Head",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stone Edge"]]
+ },
+ {
+ "species": "Marowak",
+ "item": "Thick Club",
+ "ability": "Rock Head",
+ "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
+ "nature": "Adamant",
+ "moves": [["Bonemerang"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]]
+ }
+ ]
+ },
+ "quilladin": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Quilladin",
+ "item": "Eviolite",
+ "ability": "Bulletproof",
+ "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0},
+ "nature": "Impish",
+ "moves": [["Wood Hammer"], ["Spikes"], ["Synthesis"], ["Roar"]]
+ },
+ {
+ "species": "Quilladin",
+ "item": "Eviolite",
+ "ability": "Bulletproof",
+ "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
+ "nature": "Jolly",
+ "moves": [["Wood Hammer"], ["Taunt"], ["Spikes"], ["Zen Headbutt", "Drain Punch"]]
+ }
+ ]
+ },
+ "rampardos": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Rampardos",
+ "item": "Focus Sash",
+ "ability": "Mold Breaker",
+ "evs": {"hp": 0, "atk": 144, "def": 0, "spa": 112, "spd": 0, "spe": 252},
+ "nature": "Naive",
+ "moves": [["Stealth Rock"], ["Superpower"], ["Head Smash"], ["Surf"]]
+ }
+ ]
+ },
+ "drifblim": {
+ "flags": {},
+ "sets": [
+ {
+ "species": "Drifblim",
+ "item": "Liechi Berry",
+ "ability": "Unburden",
+ "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 40, "spe": 212},
+ "nature": "Adamant",
+ "moves": [["Substitute"], ["Acrobatics"], ["Knock Off"], ["Will-O-Wisp"]]
+ }
+ ]
+ }
+ }
+}
diff --git a/data/random-battles/gen6megasrevisited/sets.json b/data/random-battles/gen6megasrevisited/sets.json
new file mode 100644
index 0000000000..10fb1f136a
--- /dev/null
+++ b/data/random-battles/gen6megasrevisited/sets.json
@@ -0,0 +1,6301 @@
+{
+ "venusaur": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "gigadrain", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll", "Overgrow"]
+ }
+ ]
+ },
+ "venusaurmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerground", "leafstorm", "sludgebomb", "synthesis"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "gigadrain", "leechseed", "sludgebomb"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hurricane", "earthquake", "fireblast", "roost", "willowisp"],
+ "abilities": ["Blaze", "Solar Power"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hurricane", "fireblast", "roost"],
+ "abilities": ["Blaze", "Solar Power"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "earthquake", "flareblitz", "swordsdance"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "charizardmegax": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "charizardmegay": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hurricane", "fireblast", "roost", "focusblast"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hurricane", "lavaplume", "roost"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "blastoisemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["moonblast", "rapidspin", "scald", "taunt"],
+ "abilities": ["Rain Dish"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["moonblast", "rapidspin", "hydropump", "hiddenpowerfire"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "psychic", "quiverdance", "sleeppowder"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn", "stealthrock"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["poisonjab", "earthquake", "diamondstorm", "swordsdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "beedrillmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["diamondstorm", "earthquake", "roost", "uturn"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["diamondstorm", "earthquake", "roost", "uturn", "defog", "stealthrock"],
+ "abilities": ["Swarm"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["diamondstorm", "earthquake", "roost", "swordsdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"],
+ "abilities": ["Big Pecks"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "focusblast", "return", "workup"],
+ "abilities": ["Keen Eye"]
+ }
+ ]
+ },
+ "pidgeotmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "focusblast", "hurricane", "roost", "uturn", "workup"],
+ "abilities": ["Big Pecks"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "earthquake", "gunkshot", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Sand Rush"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard", "Unaware"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"],
+ "abilities": ["Magic Guard", "Unaware"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"],
+ "abilities": ["Competitive"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"],
+ "abilities": ["Effect Spore"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "knockoff", "seedbomb", "spore", "stunspore", "xscissor"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "honeclaws", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icepunch", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["circlethrow", "rest", "scald", "sleeptalk"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
+ "abilities": ["Magic Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "alakazammega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "icebeam"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["substitute", "focusblast", "psychic", "psyshock", "icebeam"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
+ "abilities": ["Clear Body", "Liquid Ooze"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "slowbromega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["futuresight", "fireblast", "scald", "slackoff"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"],
+ "abilities": ["Early Bird"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "knockoff", "return", "roost"],
+ "abilities": ["Early Bird"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"],
+ "abilities": ["Poison Touch"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cloyster": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "gengarmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hex", "sludgebomb", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Hyper Cutter", "Sheer Force"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Aftermath", "Static"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"],
+ "abilities": ["Harvest"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Battle Armor", "Rock Head"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Unburden"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "kangaskhanmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bodyslam", "milkdrink", "earthquake", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["return", "earthquake", "poweruppunch", "suckerpunch"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"],
+ "abilities": ["Analytic", "Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"],
+ "abilities": ["Filter"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "pinsirmega": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["closecombat", "iceshard", "iciclecrash", "swordsdance"],
+ "abilities": ["Hyper Cutter"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "iceshard", "iciclecrash", "uturn"],
+ "abilities": ["Hyper Cutter"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
+ "abilities": ["Intimidate", "Moxie"]
+ }
+ ]
+ },
+ "gyaradosmega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "dragondance", "earthquake", "substitute", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "hydropump", "protect", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Imposter"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "scald", "wish"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "scald", "toxic", "wish"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Shell Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "waterfall"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "knockoff", "stoneedge", "swordsdance", "waterfall"],
+ "abilities": ["Weak Armor"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "defog", "earthquake", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aerodactylmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hurricane", "earthquake", "honeclaws", "roost", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"],
+ "abilities": ["Multiscale"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegax": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mewtwomegay": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drainpunch", "knockoff", "swordsdance", "zenheadbutt"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "meganium": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "typhlosion": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "feraligatr": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "waterfall"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "furret": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"],
+ "abilities": ["Frisk"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "noctowl": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "hypervoice", "roost", "toxic"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "ledian": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "focusblast", "knockoff", "roost", "toxic"],
+ "abilities": ["Early Bird"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "ariados": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"],
+ "abilities": ["Insomnia", "Swarm"]
+ }
+ ]
+ },
+ "crobat": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "lanturn": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "xatu": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "heatwave", "psychic", "roost"],
+ "abilities": ["Magic Bounce"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Magic Bounce"]
+ }
+ ]
+ },
+ "ampharos": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "healbell", "slackoff", "thunderbolt", "toxic", "voltswitch", "defog"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "ampharosmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "dragonpulse", "aurasphere", "thunderbolt", "voltswitch"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragonpulse", "aurasphere", "slackoff", "voltswitch", "thunderbolt", "defog"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "bellossom": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leechseed", "moonblast", "sleeppowder", "sludgebomb", "synthesis", "toxic"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["drainpunch", "leafblade", "return", "swordsdance"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "azumarill": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"],
+ "abilities": ["Huge Power"]
+ }
+ ]
+ },
+ "sudowoodo": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "politoed": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["encore", "icebeam", "protect", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "rest", "scald", "toxic"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "jumpluff": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["acrobatics", "leechseed", "protect", "substitute"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "sunflora": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "quagsire": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Unaware"]
+ }
+ ]
+ },
+ "espeon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magic Bounce"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "umbreon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["foulplay", "protect", "toxic", "wish"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "healbell", "moonlight", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "murkrow": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "slowking": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "unown": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "wobbuffet": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "girafarig": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"],
+ "abilities": ["Sap Sipper"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "forretress": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gyroball", "rapidspin", "stealthrock", "toxicspikes", "voltswitch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "dunsparce": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "glare", "headbutt", "roost"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "coil", "earthquake", "roost"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "gligar": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"],
+ "abilities": ["Immunity"]
+ }
+ ]
+ },
+ "steelix": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Steel"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "heavyslam", "protect", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic", "rapidspin"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "steelixmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["heatcrash", "earthquake", "heavyslam", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "heavyslam", "rest", "sleeptalk"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "granbull": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "qwilfish": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "scizor": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "scizormega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
+ "abilities": ["Light Metal"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
+ "abilities": ["Light Metal"]
+ }
+ ]
+ },
+ "shuckle": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "heracross": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "facade", "knockoff", "megahorn", "icepunch"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge", "icepunch"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "heracrossmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "megahorn", "healorder", "icepunch", "swordsdance"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["circlethrow", "spikes", "knockoff", "healorder"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "ursaring": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "crunch", "facade", "protect"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "magcargo": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "corsola": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "octillery": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"],
+ "abilities": ["Sniper"],
+ "preferredTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"],
+ "abilities": ["Sniper"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "delibird": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"],
+ "abilities": ["Insomnia", "Vital Spirit"]
+ }
+ ]
+ },
+ "mantine": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["rest", "scald", "sleeptalk", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "skarmory": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "houndoom": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch", "toxicspikes"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "houndoommega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "fireblast", "toxicspikes", "sludgebomb"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "kingdra": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "ironhead", "outrage", "waterfall"],
+ "abilities": ["Sniper", "Swift Swim"]
+ }
+ ]
+ },
+ "donphan": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "porygon2": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
+ "abilities": ["Download", "Trace"]
+ }
+ ]
+ },
+ "stantler": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "hitmontop": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "miltank": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
+ "abilities": ["Sap Sipper", "Thick Fat"]
+ }
+ ]
+ },
+ "blissey": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "raikou": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "entei": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "suicune": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["calmmind", "protect", "scald", "substitute"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "tyranitarmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "superpower", "icepunch", "wildcharge"],
+ "abilities": ["Sand Stream"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["stealthrock", "earthquake", "icepunch", "wildcharge"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "lugia": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aeroblast", "defog", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
+ "abilities": ["Multiscale"]
+ }
+ ]
+ },
+ "hooh": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "celebi": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["leafstorm", "nastyplot", "psychic", "recover"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "sceptile": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "calmmind"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "sceptilemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "leafstorm", "dragonpulse", "sludgewave"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "dragonpulse", "calmmind"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "combusken": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flareblitz", "focusblast", "hiddenpowerelectric", "protect", "hiddenpowerice"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "blaziken": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "blazikenmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"],
+ "abilities": ["Blaze"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flareblitz", "closecombat", "knockoff", "spikes", "uturn"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic", "toxicspikes"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "swampertmega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "poisonjab", "substitute", "superpower", "waterfall", "toxicspikes"],
+ "abilities": ["Damp"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "gunkshot", "earthquake", "waterfall"],
+ "abilities": ["Damp"]
+ }
+ ]
+ },
+ "mightyena": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "linoone": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"],
+ "abilities": ["Quick Feet"]
+ }
+ ]
+ },
+ "beautifly": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"],
+ "abilities": ["Swarm"]
+ }
+ ]
+ },
+ "dustox": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"],
+ "abilities": ["Shield Dust"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Shield Dust"]
+ }
+ ]
+ },
+ "ludicolo": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["energyball", "hydropump", "icebeam", "scald"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "shiftry": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll", "Pickpocket"]
+ }
+ ]
+ },
+ "swellow": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "facade", "protect", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "facade", "quickattack", "uturn"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "pelipper": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"],
+ "abilities": ["Rain Dish"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"],
+ "abilities": ["Rain Dish"]
+ }
+ ]
+ },
+ "gardevoir": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["willowisp", "healingwish", "rapidspin", "psychic", "moonblast"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"],
+ "abilities": ["Trace"]
+ }
+ ]
+ },
+ "gardevoirmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "focusblast", "hypervoice", "psyshock", "taunt", "willowisp", "mysticalfire"],
+ "abilities": ["Trace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp", "rapidspin"],
+ "abilities": ["Trace"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "masquerain": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "breloom": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "vigoroth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"],
+ "abilities": ["Vital Spirit"]
+ }
+ ]
+ },
+ "slaking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"],
+ "abilities": ["Truant"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "gigaimpact", "pursuit"],
+ "abilities": ["Truant"]
+ }
+ ]
+ },
+ "ninjask": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "shedinja": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
+ "abilities": ["Wonder Guard"]
+ }
+ ]
+ },
+ "exploud": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "fireblast", "focusblast", "surf"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "hariyama": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"],
+ "abilities": ["Guts", "Thick Fat"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "delcatty": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"],
+ "abilities": ["Wonder Skin"]
+ }
+ ]
+ },
+ "sableye": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "sableyemega": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "recover", "willowisp"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "mawile": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"],
+ "abilities": ["Intimidate", "Sheer Force"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "playrough", "stealthrock", "slackoff"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "mawilemega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["ironhead", "knockoff", "playrough", "firepunch", "suckerpunch", "swordsdance", "rockslide"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "aggron": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "headsmash", "heavyslam", "rockpolish"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "voltswitch"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "stealthrock"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aggronmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["voltswitch", "earthquake", "stoneedge", "heavyslam", "stealthrock", "toxic", "protect"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "medicham": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "closecombat", "icepunch", "gunkshot", "zenheadbutt", "healingwish"],
+ "abilities": ["Pure Power"]
+ }
+ ]
+ },
+ "medichammega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "psychic", "psyshock", "thunderbolt", "shadowball", "vacuumwave"],
+ "abilities": ["Telepathy"],
+ "preferredTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "psychic", "recover", "vacuumwave"],
+ "abilities": ["Telepathy"]
+ }
+ ]
+ },
+ "manectric": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "manectricmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "plusle": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "minun": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Volt Absorb"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "volbeat": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "roost", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "illumise": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bugbuzz", "encore", "roost", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "swalot": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
+ "abilities": ["Liquid Ooze"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
+ "abilities": ["Liquid Ooze"]
+ }
+ ]
+ },
+ "sharpedo": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "sharpedomega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["thunder", "blizzard", "protect", "hydropump"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "wailord": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"],
+ "abilities": ["Water Veil"]
+ }
+ ]
+ },
+ "camerupt": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "morningsun", "roar", "stealthrock", "toxic"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "cameruptmega": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["morningsun", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "torkoal": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"],
+ "abilities": ["Shell Armor"]
+ }
+ ]
+ },
+ "grumpig": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "spinda": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"],
+ "abilities": ["Contrary"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "flygon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "outrage", "stoneedge", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "gigadrain", "spikes", "suckerpunch", "superpower"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "altaria": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "altariamega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["moonblast", "hydropump", "fireblast", "roost"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "zangoose": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"],
+ "abilities": ["Toxic Boost"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "seviper": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"],
+ "abilities": ["Infiltrator"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "lunatone": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "psychic", "rockpolish"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "moonlight", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "solrock": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "whiscash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
+ "abilities": ["Hydration", "Oblivious"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Hydration", "Oblivious"]
+ }
+ ]
+ },
+ "crawdaunt": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "claydol": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "cradily": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"],
+ "abilities": ["Storm Drain"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Storm Drain"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "armaldo": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ }
+ ]
+ },
+ "milotic": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Competitive", "Marvel Scale"]
+ }
+ ]
+ },
+ "castform": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"],
+ "abilities": ["Forecast"],
+ "preferredTypes": ["Water"]
+ }
+ ]
+ },
+ "kecleon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["drainpunch", "fakeout", "knockoff", "recover", "shadowsneak", "stealthrock", "suckerpunch"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "recover", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Protean"]
+ }
+ ]
+ },
+ "banette": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Cursed Body", "Frisk", "Insomnia"]
+ }
+ ]
+ },
+ "banettemega": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["powder", "knockoff", "ironhead", "taunt", "willowisp", "stealthrock", "defog"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "tropius": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "leechseed", "protect", "substitute"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "chimecho": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["healbell", "knockoff", "psychic", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "absol": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ }
+ ]
+ },
+ "absolmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Fairy"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["knockoff", "moonblast", "suckerpunch", "closecombat", "fireblast"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "glalie": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "glaliemega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "doubleedge", "spikes"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "boomburst", "doubleedge"],
+ "abilities": ["Inner Focus"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "walrein": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "huntail": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"],
+ "abilities": ["Swift Swim", "Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "gorebyss": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Swift Swim"]
+ }
+ ]
+ },
+ "relicanth": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "headsmash", "waterfall"],
+ "abilities": ["Rock Head"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "headsmash", "rockpolish", "waterfall"],
+ "abilities": ["Rock Head"]
+ }
+ ]
+ },
+ "luvdisc": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "salamence": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "roost", "ironhead"],
+ "abilities": ["Intimidate", "Moxie"]
+ }
+ ]
+ },
+ "salamencemega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["outrage", "dragondance", "earthquake", "hurricane", "roost"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hurricane", "fireblast", "dracometeor", "roost"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "metagross": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["agility", "earthquake", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "metagrossmega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hammerarm", "honeclaws", "meteormash", "zenheadbutt"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "regirock": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "drainpunch", "rest", "stoneedge"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "regice": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Electric"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "registeel": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
+ "abilities": ["Clear Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "latias": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latiasmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latios": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "latiosmega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "zenheadbutt", "dracometeor", "earthquake"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "dracometeor", "psyshock", "roost", "icebeam"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "kyogre": {
+ "level": 67,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "kyogreprimal": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
+ "abilities": ["Drizzle"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "originpulse", "thunder"],
+ "abilities": ["Drizzle"]
+ }
+ ]
+ },
+ "groudon": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "groudonprimal": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"],
+ "abilities": ["Drought"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"],
+ "abilities": ["Drought"]
+ }
+ ]
+ },
+ "rayquaza": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate", "coil"],
+ "abilities": ["Air Lock"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"],
+ "abilities": ["Air Lock"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "rayquazamega": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate", "coil"],
+ "abilities": ["Air Lock"]
+ }
+ ]
+ },
+ "jirachi": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "deoxys": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysattack": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysdefense": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "deoxysspeed": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "torterra": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
+ "abilities": ["Overgrow"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
+ "abilities": ["Blaze", "Iron Fist"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Blaze", "Iron Fist"]
+ }
+ ]
+ },
+ "empoleon": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "staraptor": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["quickattack", "return", "waterfall", "workup"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["curse", "quickattack", "return", "waterfall"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "kricketune": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "luxray": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "superpower", "wildcharge"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "roserade": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
+ "abilities": ["Natural Cure", "Technician"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "wormadam": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"],
+ "abilities": ["Anticipation", "Overcoat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"],
+ "abilities": ["Anticipation", "Overcoat"]
+ }
+ ]
+ },
+ "wormadamsandy": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "wormadamtrash": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "mothim": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "vespiquen": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["airslash", "defog", "roost", "toxic", "uturn"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "pachirisu": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "floatzel": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "icepunch", "lowkick", "substitute", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "waterfall"],
+ "abilities": ["Water Veil"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "cherrim": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "morningsun"],
+ "abilities": ["Flower Gift"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "morningsun", "toxic"],
+ "abilities": ["Flower Gift"]
+ }
+ ]
+ },
+ "gastrodon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "ambipom": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"],
+ "abilities": ["Technician"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "drifblim": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["acrobatics", "hex", "substitute", "willowisp"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "lopunny": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "lopunnymega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"],
+ "abilities": ["Limber"]
+ }
+ ]
+ },
+ "mismagius": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
+ "abilities": ["Moxie"]
+ }
+ ]
+ },
+ "purugly": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"],
+ "abilities": ["Defiant", "Thick Fat"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "bronzong": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "chatot": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"],
+ "abilities": ["Tangled Feet"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"],
+ "abilities": ["Tangled Feet"]
+ }
+ ]
+ },
+ "spiritomb": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
+ "abilities": ["Infiltrator"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "garchomp": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "garchompmega": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"],
+ "abilities": ["Rough Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "lucario": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletpunch", "closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Inner Focus"]
+ }
+ ]
+ },
+ "lucariomega": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulletpunch", "closecombat", "meteormash", "swordsdance"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "flashcannon", "nastyplot", "vacuumwave"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
+ "abilities": ["Sand Stream"]
+ }
+ ]
+ },
+ "drapion": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquatail", "earthquake", "knockoff", "poisonjab", "pursuit", "swordsdance"],
+ "abilities": ["Battle Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
+ "abilities": ["Battle Armor"]
+ }
+ ]
+ },
+ "toxicroak": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "carnivine": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "sleeppowder", "swordsdance", "synthesis", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "lumineon": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"],
+ "abilities": ["Storm Drain"]
+ }
+ ]
+ },
+ "abomasnow": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "abomasnowmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "earthquake", "gigadrain", "iceshard", "woodhammer"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["icebeam", "gigadrain", "leechseed", "earthquake"],
+ "abilities": ["Snow Warning"]
+ }
+ ]
+ },
+ "weavile": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"],
+ "abilities": ["Pickpocket"]
+ }
+ ]
+ },
+ "magnezone": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
+ "abilities": ["Analytic", "Magnet Pull"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "knockoff", "protect", "wish"],
+ "abilities": ["Cloud Nine", "Oblivious"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"],
+ "abilities": ["Cloud Nine", "Own Tempo"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"],
+ "abilities": ["Cloud Nine", "Oblivious"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "rhyperior": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"],
+ "abilities": ["Solid Rock"]
+ }
+ ]
+ },
+ "tangrowth": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "electivire": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
+ "abilities": ["Motor Drive"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "magmortar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
+ "abilities": ["Flame Body"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "togekiss": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "yanmega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "leafeon": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["doubleedge", "knockoff", "leafblade", "substitute", "swordsdance", "synthesis"],
+ "abilities": ["Chlorophyll"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "glaceon": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
+ "abilities": ["Ice Body"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "toxic", "wish"],
+ "abilities": ["Ice Body"]
+ }
+ ]
+ },
+ "gliscor": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "protect", "substitute", "toxic"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"],
+ "abilities": ["Poison Heal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "facade", "roost", "swordsdance"],
+ "abilities": ["Poison Heal"]
+ }
+ ]
+ },
+ "mamoswine": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "porygonz": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"],
+ "abilities": ["Adaptability", "Download"]
+ }
+ ]
+ },
+ "gallade": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt", "machpunch"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "gallademega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["sacredsword", "knockoff", "swordsdance", "psychocut"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "probopass": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Magnet Pull"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "painsplit", "shadowsneak", "toxic", "willowisp"],
+ "abilities": ["Frisk", "Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "icepunch", "painsplit", "toxic", "willowisp"],
+ "abilities": ["Frisk", "Pressure"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
+ "abilities": ["Frisk", "Pressure"]
+ }
+ ]
+ },
+ "froslass": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"],
+ "abilities": ["Cursed Body"]
+ }
+ ]
+ },
+ "rotom": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomheat": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomwash": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfrost": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotomfan": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rotommow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "uxie": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "mesprit": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Bug"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "azelf": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "dialga": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "palkia": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
+ "abilities": ["Pressure"],
+ "preferredTypes": ["Fire"]
+ }
+ ]
+ },
+ "heatran": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "magmastorm", "protect", "toxic"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "knockoff", "return", "thunderwave"],
+ "abilities": ["Slow Start"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "return", "substitute", "thunderwave"],
+ "abilities": ["Slow Start"]
+ }
+ ]
+ },
+ "giratinaorigin": {
+ "level": 70,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "giratina": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "cresselia": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "phione": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "manaphy": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "icebeam", "surf", "tailglow"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "darkrai": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["darkpulse", "darkvoid", "nastyplot", "sludgebomb"],
+ "abilities": ["Bad Dreams"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "shaymin": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
+ "abilities": ["Natural Cure"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "shayminsky": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "arceus": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusbug": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdark": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusdragon": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuselectric": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfairy": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfighting": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusfire": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusflying": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusghost": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusgrass": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusground": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusice": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuspoison": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceuspsychic": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceusrock": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
+ "abilities": ["Multitype"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "arceussteel": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "arceuswater": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic", "willowisp"],
+ "abilities": ["Multitype"]
+ }
+ ]
+ },
+ "victini": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"],
+ "abilities": ["Victory Star"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"],
+ "abilities": ["Victory Star"],
+ "preferredTypes": ["Electric"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "emboar": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"],
+ "abilities": ["Reckless"]
+ }
+ ]
+ },
+ "samurott": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "scald", "superpower"],
+ "abilities": ["Torrent"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"],
+ "abilities": ["Torrent"]
+ }
+ ]
+ },
+ "watchog": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["hypnosis", "knockoff", "return", "superfang"],
+ "abilities": ["Analytic"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"],
+ "abilities": ["Analytic"]
+ }
+ ]
+ },
+ "stoutland": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "facade", "return", "superpower"],
+ "abilities": ["Scrappy"]
+ }
+ ]
+ },
+ "liepard": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "simisage": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"],
+ "abilities": ["Overgrow"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"],
+ "abilities": ["Overgrow"]
+ }
+ ]
+ },
+ "simisear": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "simipour": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"],
+ "abilities": ["Torrent"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "musharna": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "unfezant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"],
+ "abilities": ["Super Luck"]
+ }
+ ]
+ },
+ "zebstrika": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"],
+ "abilities": ["Sap Sipper"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "gigalith": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "swoobat": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
+ "abilities": ["Simple"]
+ }
+ ]
+ },
+ "excadrill": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"],
+ "abilities": ["Mold Breaker", "Sand Rush"]
+ }
+ ]
+ },
+ "audino": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "toxic", "wish", "voltswitch"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "audinomega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "voltswitch", "wish", "toxic"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["thunderwave", "icebeam", "knockoff", "voltswitch", "toxic"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "facade", "knockoff", "machpunch"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "seismitoad": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "protect", "scald", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "throh": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"],
+ "abilities": ["Guts"]
+ }
+ ]
+ },
+ "sawk": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Mold Breaker", "Sturdy"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "leavanny": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"],
+ "abilities": ["Chlorophyll", "Swarm"]
+ }
+ ]
+ },
+ "scolipede": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "whimsicott": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["encore", "leechseed", "moonblast", "substitute"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "lilligant": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"],
+ "abilities": ["Own Tempo"]
+ }
+ ]
+ },
+ "basculin": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "krookodile": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "darmanitan": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "maractus": {
+ "level": 98,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"],
+ "abilities": ["Storm Drain", "Water Absorb"]
+ }
+ ]
+ },
+ "crustle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"],
+ "abilities": ["Sturdy"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "scrafty": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dragondance", "drainpunch", "ironhead", "knockoff"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bulkup", "drainpunch", "knockoff", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "sigilyph": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"],
+ "abilities": ["Magic Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"],
+ "abilities": ["Tinted Lens"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "cofagrigus": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"],
+ "abilities": ["Mummy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"],
+ "abilities": ["Mummy"]
+ }
+ ]
+ },
+ "carracosta": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"],
+ "abilities": ["Solid Rock", "Sturdy", "Swift Swim"]
+ }
+ ]
+ },
+ "archeops": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"],
+ "abilities": ["Defeatist"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "garbodor": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"],
+ "abilities": ["Aftermath"]
+ }
+ ]
+ },
+ "zoroark": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"],
+ "abilities": ["Illusion"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "cinccino": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"],
+ "abilities": ["Skill Link"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "gothitelle": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"],
+ "abilities": ["Shadow Tag"]
+ }
+ ]
+ },
+ "reuniclus": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"],
+ "abilities": ["Magic Guard"]
+ }
+ ]
+ },
+ "swanna": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "roost", "scald", "toxic"],
+ "abilities": ["Hydration"]
+ }
+ ]
+ },
+ "vanilluxe": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"],
+ "abilities": ["Weak Armor"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sawsbuck": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"],
+ "abilities": ["Sap Sipper"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "emolga": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Motor Drive"]
+ }
+ ]
+ },
+ "escavalier": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "swordsdance"],
+ "abilities": ["Overcoat", "Swarm"]
+ }
+ ]
+ },
+ "amoonguss": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "jellicent": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["hex", "recover", "scald", "toxic", "willowisp"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alomomola": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "protect", "scald", "toxic", "wish"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "galvantula": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bugbuzz", "energyball", "stickyweb", "thunder", "voltswitch"],
+ "abilities": ["Compound Eyes"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "ferrothorn": {
+ "level": 71,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"],
+ "abilities": ["Iron Barbs"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"],
+ "abilities": ["Iron Barbs"]
+ }
+ ]
+ },
+ "klinklang": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "eelektross": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "beheeyem": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"],
+ "abilities": ["Analytic"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chandelure": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["energyball", "fireblast", "shadowball", "trick"],
+ "abilities": ["Flash Fire"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "energyball", "fireblast", "shadowball", "substitute"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ }
+ ]
+ },
+ "haxorus": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"],
+ "abilities": ["Mold Breaker"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "beartic": {
+ "level": 94,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "cryogonal": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "accelgor": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"],
+ "abilities": ["Hydration", "Sticky Hold"]
+ }
+ ]
+ },
+ "stunfisk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["discharge", "earthpower", "scald", "stealthrock", "toxic"],
+ "abilities": ["Static"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["discharge", "earthpower", "protect", "rest", "sleeptalk", "toxic"],
+ "abilities": ["Static"]
+ }
+ ]
+ },
+ "mienshao": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "druddigon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"],
+ "abilities": ["Rough Skin"]
+ }
+ ]
+ },
+ "golurk": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "bisharp": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "bouffalant": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Reckless", "Sap Sipper"]
+ }
+ ]
+ },
+ "braviary": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "bulkup", "roost", "superpower"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "return", "superpower", "uturn"],
+ "abilities": ["Defiant"]
+ }
+ ]
+ },
+ "mandibuzz": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"],
+ "abilities": ["Overcoat"]
+ }
+ ]
+ },
+ "heatmor": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "durant": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"],
+ "abilities": ["Hustle"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "hydreigon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "toxic", "uturn"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"],
+ "abilities": ["Levitate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "volcarona": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"],
+ "abilities": ["Flame Body", "Swarm"]
+ }
+ ]
+ },
+ "cobalion": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "terrakion": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "virizion": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "tornadus": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Defiant", "Prankster"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "tornadustherian": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "thundurus": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "thundurustherian": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
+ "abilities": ["Volt Absorb"]
+ }
+ ]
+ },
+ "reshiram": {
+ "level": 73,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["blueflare", "dracometeor", "roost", "toxic"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "zekrom": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "landorus": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Rock"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "landorustherian": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "kyurem": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["earthpower", "icebeam", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "kyuremblack": {
+ "level": 76,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"],
+ "abilities": ["Teravolt"]
+ }
+ ]
+ },
+ "kyuremwhite": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"],
+ "abilities": ["Turboblaze"]
+ }
+ ]
+ },
+ "keldeo": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "scald", "secretsword", "substitute"],
+ "abilities": ["Justified"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "hydropump", "scald", "secretsword"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "meloetta": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"],
+ "abilities": ["Serene Grace"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["closecombat", "knockoff", "relicsong", "return"],
+ "abilities": ["Serene Grace"]
+ }
+ ]
+ },
+ "genesect": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"],
+ "abilities": ["Download"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"],
+ "abilities": ["Download"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "chesnaught": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"],
+ "abilities": ["Bulletproof"]
+ }
+ ]
+ },
+ "delphox": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"],
+ "abilities": ["Blaze"]
+ }
+ ]
+ },
+ "greninja": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"],
+ "abilities": ["Protean"],
+ "preferredTypes": ["Poison"]
+ }
+ ]
+ },
+ "diggersby": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "earthquake", "knockoff", "quickattack", "return", "swordsdance"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["earthquake", "foulplay", "quickattack", "return", "uturn"],
+ "abilities": ["Huge Power"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "talonflame": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"],
+ "abilities": ["Gale Wings"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"],
+ "abilities": ["Gale Wings"]
+ }
+ ]
+ },
+ "vivillon": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"],
+ "abilities": ["Compound Eyes"]
+ }
+ ]
+ },
+ "pyroar": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["fireblast", "hiddenpowergrass", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Normal"]
+ }
+ ]
+ },
+ "floetteeternal": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "florges": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Flower Veil"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"],
+ "abilities": ["Flower Veil"]
+ }
+ ]
+ },
+ "gogoat": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "pangoro": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "gunkshot", "icepunch", "knockoff", "superpower"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drainpunch", "gunkshot", "knockoff", "swordsdance"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "furfrou": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["rest", "return", "thunderwave", "toxic", "uturn"],
+ "abilities": ["Fur Coat"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"],
+ "abilities": ["Fur Coat"]
+ }
+ ]
+ },
+ "meowstic": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "meowsticf": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"],
+ "abilities": ["Competitive"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "doublade": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["No Guard"]
+ }
+ ]
+ },
+ "aegislash": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"],
+ "abilities": ["Stance Change"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
+ "abilities": ["Stance Change"],
+ "preferredTypes": ["Steel"]
+ }
+ ]
+ },
+ "aromatisse": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"],
+ "abilities": ["Aroma Veil"]
+ }
+ ]
+ },
+ "slurpuff": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["bellydrum", "drainpunch", "playrough", "return"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "malamar": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["knockoff", "rest", "sleeptalk", "superpower"],
+ "abilities": ["Contrary"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["knockoff", "psychocut", "rest", "superpower"],
+ "abilities": ["Contrary"]
+ }
+ ]
+ },
+ "barbaracle": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"],
+ "abilities": ["Tough Claws"]
+ }
+ ]
+ },
+ "dragalge": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "dragontail", "focusblast", "sludgewave", "toxicspikes"],
+ "abilities": ["Adaptability"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"],
+ "abilities": ["Adaptability"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"],
+ "abilities": ["Mega Launcher"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn"],
+ "abilities": ["Mega Launcher"]
+ }
+ ]
+ },
+ "heliolisk": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Normal"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hypervoice", "raindance", "surf", "thunder"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "tyrantrum": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"],
+ "abilities": ["Rock Head"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "aurorus": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "haze", "stealthrock", "thunderwave"],
+ "abilities": ["Snow Warning"],
+ "preferredTypes": ["Ground"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["ancientpower", "earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"],
+ "abilities": ["Refrigerate"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "sylveon": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "hypervoice", "protect", "wish"],
+ "abilities": ["Pixilate"]
+ }
+ ]
+ },
+ "hawlucha": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"],
+ "abilities": ["Unburden"]
+ }
+ ]
+ },
+ "dedenne": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["protect", "recycle", "thunderbolt", "toxic"],
+ "abilities": ["Cheek Pouch"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"],
+ "abilities": ["Cheek Pouch"]
+ }
+ ]
+ },
+ "carbink": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "goodra": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"],
+ "abilities": ["Sap Sipper"]
+ }
+ ]
+ },
+ "klefki": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"],
+ "abilities": ["Prankster"]
+ }
+ ]
+ },
+ "trevenant": {
+ "level": 91,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"],
+ "abilities": ["Natural Cure"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["earthquake", "hornleech", "protect", "toxic"],
+ "abilities": ["Harvest"]
+ }
+ ]
+ },
+ "gourgeistsmall": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistlarge": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeist": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "gourgeistsuper": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
+ "abilities": ["Frisk"]
+ }
+ ]
+ },
+ "avalugg": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"],
+ "abilities": ["Infiltrator"]
+ }
+ ]
+ },
+ "xerneas": {
+ "level": 64,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"],
+ "abilities": ["Fairy Aura"]
+ }
+ ]
+ },
+ "yveltal": {
+ "level": 69,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"],
+ "abilities": ["Dark Aura"]
+ }
+ ]
+ },
+ "zygarde": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "stoneedge", "substitute"],
+ "abilities": ["Aura Break"]
+ }
+ ]
+ },
+ "diancie": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"],
+ "abilities": ["Clear Body"]
+ }
+ ]
+ },
+ "dianciemega": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "spikyshield"],
+ "abilities": ["Clear Body"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "hoopa": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"],
+ "abilities": ["Magician"]
+ }
+ ]
+ },
+ "hoopaunbound": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "trick", "zenheadbutt"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "psychic", "trick"],
+ "abilities": ["Magician"],
+ "preferredTypes": ["Psychic"]
+ }
+ ]
+ },
+ "volcanion": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen6megasrevisited/teams.ts b/data/random-battles/gen6megasrevisited/teams.ts
new file mode 100644
index 0000000000..e494fb7299
--- /dev/null
+++ b/data/random-battles/gen6megasrevisited/teams.ts
@@ -0,0 +1,7 @@
+import RandomGen6Teams from '../gen6/teams';
+
+export class RandomMRTeams extends RandomGen6Teams {
+ override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json');
+}
+
+export default RandomMRTeams;
diff --git a/data/random-battles/sixbysix/random-sets.json b/data/random-battles/sixbysix/random-sets.json
deleted file mode 100644
index d51c73e78e..0000000000
--- a/data/random-battles/sixbysix/random-sets.json
+++ /dev/null
@@ -1,558 +0,0 @@
-{
- "kingdraancient": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Fire Blast", "Agility", "Energy Ball", "Hydro Pump"],
- "abilities": ["Protosynthesis"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Giga Drain", "Fire Blast", "Flip Turn", "Synthesis"],
- "abilities": ["Competitive"]
- }
- ]
- },
- "kingdrabard": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Hydro Pump", "Agility", "Psychic Noise", "Alluring Voice"],
- "abilities": ["Punk Rock"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Hydro Pump", "Flip Turn", "Psychic Noise", "Alluring Voice"],
- "abilities": ["Punk Rock"]
- }
- ]
- },
- "kingdrabrinepool": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Scald", "Protect", "Knock Off", "Mortal Spin"],
- "abilities": ["Purifying Salt"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Hydro Pump", "Water Shuriken", "Sludge Wave", "Flip Turn"],
- "abilities": ["Purifying Salt", "Storm Drain"]
- }
- ]
- },
- "kingdraclassic": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Hydro Pump", "Draco Meteor", "Agility", "Ice Beam"],
- "abilities": ["Berserk"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Hydro Pump", "Draco Meteor", "Flip Turn", "Ice Beam"],
- "abilities": ["Berserk"]
- }
- ]
- },
- "kingdradruid": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Tachyon Cutter", "Draco Meteor", "Flamethrower", "Ice Beam"],
- "abilities": ["Berserk"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Tachyon Cutter", "Protect", "Flamethrower", "Calm Mind"],
- "abilities": ["Berserk"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Doom Desire", "Parting Shot", "Draco Meteor", "Protect"],
- "abilities": ["Berserk", "Heatproof"]
- }
- ]
- },
- "kingdragourmet": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Facade", "Baneful Bunker", "Knock Off", "Toxic"],
- "abilities": ["Poison Heal"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Facade", "Fake Out", "Knock Off", "Flip Turn"],
- "abilities": ["Poison Heal"]
- }
- ]
- },
- "nidoqueenclassic": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Barb Barrage", "Earthquake", "Spikes", "Slack Off"],
- "abilities": ["Poison Point"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Poison Jab", "Earthquake", "Ice Punch", "Slack Off"],
- "abilities": ["Sheer Force"]
- }
- ]
- },
- "nidoqueenerudite": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Earth Power", "Psychic", "Slack Off"],
- "abilities": ["Sheer Force"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Trick Room", "Earth Power", "Psychic", "Ice Beam"],
- "abilities": ["Sheer Force"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Future Sight", "Earth Power", "Roar", "Chilly Reception"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "nidoqueenjasper": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Salt Cure", "Earthquake", "Protect", "Glare"],
- "abilities": ["Earth Eater"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Accelerock", "Earthquake", "Gunk Shot", "Stone Edge"],
- "abilities": ["Earth Eater"]
- }
- ]
- },
- "nidoqueenrosegold": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Slack Off", "Giga Drain", "Earth Power", "Toxic Spikes"],
- "abilities": ["Rough Skin"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Spiky Shield", "Earth Power", "Sludge Bomb", "Leech Seed"],
- "abilities": ["Rough Skin"]
- }
- ]
- },
- "nidoqueenshaman": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Poltergeist", "Poison Jab", "Superpower", "Shadow Sneak"],
- "abilities": ["Toxic Chain"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Poltergeist", "Poison Jab", "Earthquake", "Shadow Sneak"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "nidoqueenvolcanic": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Protect", "Lava Plume", "Earth Power", "Wish"],
- "abilities": ["Flame Body"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Thunderbolt", "Fire Blast", "Earth Power", "Ice Beam"],
- "abilities": ["Sheer Force"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["Protect", "Fire Blast", "Earth Power", "Wish"],
- "abilities": ["Sheer Force"]
- }
- ]
- },
- "bisharpassassin": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Triple Axel", "Dynamic Punch", "Parting Shot", "Ice Shard"],
- "abilities": ["No Guard"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Triple Axel", "Dynamic Punch", "Curse", "Ice Shard"],
- "abilities": ["No Guard"]
- }
- ]
- },
- "bisharpcenturion": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["Bullet Punch", "Superpower", "Switcheroo", "Iron Head"],
- "abilities": ["Technician"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Bullet Punch", "Drain Punch", "Bulk Up", "Iron Head"],
- "abilities": ["Technician"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Bullet Punch", "Drain Punch", "Swords Dance", "Iron Head"],
- "abilities": ["Technician"]
- }
- ]
- },
- "bisharpmantis": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Ceaseless Edge", "Leech Life", "First Impression", "Bitter Blade"],
- "abilities": ["Orichalcum Pulse"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Sucker Punch", "Leech Life", "Swords Dance", "Bitter Blade"],
- "abilities": ["Orichalcum Pulse"]
- }
- ]
- },
- "bisharprevenant": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Recover", "Shadow Sneak", "Sacred Sword", "Poltergeist"],
- "abilities": ["Magic Bounce"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Recover", "Shadow Sneak", "Swords Dance", "Behemoth Blade"],
- "abilities": ["Magic Bounce"]
- }
- ]
- },
- "bisharpronin": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Barb Barrage", "U-turn", "Sacred Sword", "Stealth Rock"],
- "abilities": ["Technician"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Barb Barrage", "U-turn", "Sacred Sword", "Bulldoze"],
- "abilities": ["Technician"]
- }
- ]
- },
- "bisharpsavage": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["Leech Seed", "Bullet Punch", "Power Whip", "Thunder Wave"],
- "abilities": ["Technician"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Bulk Up", "Bullet Punch", "Power Whip", "Body Press"],
- "abilities": ["Technician"]
- }
- ]
- },
- "corviknightanalytical": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Psychic", "Thunderbolt", "U-turn", "Heat Wave"],
- "abilities": ["Psychic Surge"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Reflect", "Light Screen", "U-turn", "Psychic"],
- "abilities": ["Psychic Surge"]
- },
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Psychic", "Thunderbolt", "Calm Mind", "Heat Wave"],
- "abilities": ["Psychic Surge"]
- }
- ]
- },
- "corviknightfalcon": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Brave Bird", "Close Combat", "U-turn", "Knock Off"],
- "abilities": ["Guts"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Reflect", "Light Screen", "U-turn", "Taunt"],
- "abilities": ["Delta Stream"]
- }
- ]
- },
- "corviknightgenie": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Bulky Setup",
- "movepool": ["Earth Power", "Calm Mind", "Heat Wave", "Rest"],
- "abilities": ["Prankster"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["Scorching Sands", "U-turn", "Heat Wave", "Thunderbolt"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Reflect", "Light Screen", "U-turn", "Earth Power"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "corviknightmartian": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["Trick Room", "Teleport", "Thunderbolt", "Psychic"],
- "abilities": ["Hadron Engine"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["Doom Desire", "Teleport", "Thunderbolt", "Psychic"],
- "abilities": ["Hadron Engine"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["Calm Mind", "Flash Cannon", "Thunderbolt", "Psychic Noise"],
- "abilities": ["Hadron Engine"]
- }
- ]
- },
- "corviknightthunderbird": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Thunder", "Hurricane", "U-turn", "Roost"],
- "abilities": ["Drizzle"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Reflect", "Light Screen", "U-turn", "Hurricane"],
- "abilities": ["Drizzle"]
- }
- ]
- },
- "corviknightyeti": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Blizzard", "Bleakwind Storm", "Volt Switch", "Roost"],
- "abilities": ["Snow Warning"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Reflect", "Light Screen", "U-turn", "Blizzard"],
- "abilities": ["Snow Warning"]
- }
- ]
- },
- "krookodileabyssal": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Dragon Dance", "Earthquake", "Knock Off", "Flare Blitz"],
- "abilities": ["Multiscale"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["Parting Shot", "Earthquake", "Knock Off", "Flare Blitz"],
- "abilities": ["Multiscale"]
- }
- ]
- },
- "krookodilecavedweller": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Parting Shot", "Earthquake", "Stone Edge", "Flare Blitz"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Explosion", "Earthquake", "Stone Edge", "Flare Blitz"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "krookodilecliffside": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Parting Shot", "Dark Pulse", "Draco Meteor", "Flamethrower"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Switcheroo", "Dark Pulse", "Draco Meteor", "Flamethrower"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "krookodileinfernal": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Parting Shot", "Magma Storm", "Fiery Wrath", "Eruption"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Parting Shot", "Fire Lash", "Knock Off", "Will-O-Wisp"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "krookodilequantum": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Parting Shot", "Volt Tackle", "Head Smash", "Earthquake"],
- "abilities": ["Rock Head"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Parting Shot", "Encore", "Head Smash", "Volt Tackle"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "krookodilewetlander": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Synthesis", "Wave Crash", "Wood Hammer", "Knock Off"],
- "abilities": ["Wind Rider", "Wonder Skin"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Parting Shot", "Wave Crash", "Wood Hammer", "Knock Off"],
- "abilities": ["Wind Rider", "Wonder Skin"]
- }
- ]
- },
- "ogerponankh": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["Swords Dance", "Poltergeist", "Earthquake", "Stone Edge"],
- "abilities": ["Good as Gold"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["U-turn", "Shadow Ball", "Earth Power", "Dazzling Gleam"],
- "abilities": ["Good as Gold"]
- }
- ]
- },
- "ogerponeaster": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["U-turn", "Moonblast", "Hyper Voice", "Mystical Fire"],
- "abilities": ["Pickpocket"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["Calm Mind", "Moonblast", "Soft-Boiled", "Mystical Fire"],
- "abilities": ["Pickpocket"]
- }
- ]
- },
- "ogerponeid": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Knock Off", "Recover", "Surf", "Shadow Ball"],
- "abilities": ["Tangling Hair"]
- },
- {
- "role": "Fast Support",
- "movepool": ["Hex", "Recover", "Surf", "Toxic"],
- "abilities": ["Tangling Hair"]
- }
- ]
- },
- "ogerponkitsune": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Knock Off", "U-turn", "Earth Power", "Power Whip"],
- "abilities": ["Protean"]
- }
- ]
- },
- "ogerponmuerta": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["Poltergeist", "Moonblast", "U-turn", "Will-O-Wisp"],
- "abilities": ["Wandering Spirit"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["Poltergeist", "Moonblast", "U-turn", "Shadow Sneak"],
- "abilities": ["Wandering Spirit"]
- }
- ]
- }
-}
-
diff --git a/data/random-battles/sixbysix/teams.ts b/data/random-battles/sixbysix/teams.ts
deleted file mode 100644
index e321ed1a71..0000000000
--- a/data/random-battles/sixbysix/teams.ts
+++ /dev/null
@@ -1,960 +0,0 @@
-import { RandomTeams, type MoveCounter } from "../gen9/teams";
-
-// Moves that restore HP:
-const RECOVERY_MOVES = [
- 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
-];
-// Moves that boost Attack:
-const PHYSICAL_SETUP = [
- 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
- 'filletaway',
-];
-// Moves which boost Special Attack:
-const SPECIAL_SETUP = [
- 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway',
-];
-// Some moves that only boost Speed:
-const SPEED_SETUP = [
- 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze',
-];
-// Conglomerate for ease of access
-const SETUP = [
- 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
- 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
- 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance',
- 'feralresilience', 'feralspray', 'crystalfortification',
-];
-const SPEED_CONTROL = [
- 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
-];
-// Hazard-setting moves
-const HAZARDS = [
- 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes', 'crystalshard',
-];
-// 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'],
- ['spikyshield', 'wish'],
- ['leechseed', 'protect'],
- ['leechseed', 'substitute'],
- ['moongeistbeam', 'moonlight'],
- ['hex', 'willowisp'],
- ['hex', 'toxic'],
- ['hex', 'thunderwave'],
- ['nightmare', 'willowisp'],
- ['nightmare', 'toxic'],
- ['nightmare', 'thunderwave'],
-];
-
-/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
-const PRIORITY_POKEMON = [
- 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor',
-];
-
-/** Pokemon who should never be in the lead slot */
-const NO_LEAD_POKEMON = [
- 'Zacian', 'Zamazenta',
-];
-const DOUBLES_NO_LEAD_POKEMON = [
- 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
-];
-export class Random6x6Teams extends RandomTeams {
- override cullMovePool(
- types: string[],
- moves: Set,
- abilities: string[],
- counter: MoveCounter,
- movePool: string[],
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: RandomTeamsTypes.Role,
- ): void {
- if (moves.size + movePool.length <= this.maxMoveCount) return;
- // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
- if (moves.size === this.maxMoveCount - 2) {
- const unpairedMoves = [...movePool];
- for (const pair of MOVE_PAIRS) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
- this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
- }
- }
- if (unpairedMoves.length === 1) {
- this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
- }
- }
-
- // These moves are paired, and shouldn't appear if there is not room for them both.
- if (moves.size === this.maxMoveCount - 1) {
- for (const pair of MOVE_PAIRS) {
- if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
- this.fastPop(movePool, movePool.indexOf(pair[0]));
- this.fastPop(movePool, movePool.indexOf(pair[1]));
- }
- }
- }
-
- // Develop additional move lists
- const statusMoves = this.cachedStatusMoves;
-
- // Team-based move culls
- if (teamDetails.screens) {
- 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', 'lifedew'],
- ['haze', 'icywind'],
- [['hydropump', 'muddywater'], ['muddywater', 'scald']],
- ['disable', 'encore'],
- ['freezedry', 'icebeam'],
- ['energyball', 'leafstorm'],
- ['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'],
- ['trick', 'uturn'],
-
- // These attacks are redundant with each other
- [['psychic', 'psychicnoise'], ['psyshock', 'psychicnoise']],
- ['surf', ['hydropump', 'scald']],
- ['liquidation', 'wavecrash'],
- ['aquajet', 'flipturn'],
- ['gigadrain', 'leafstorm'],
- ['powerwhip', 'hornleech'],
- ['airslash', 'hurricane'],
- ['knockoff', 'foulplay'],
- ['throatchop', ['crunch', 'lashout']],
- ['doubleedge', ['bodyslam', 'headbutt']],
- [['fireblast', 'magmastorm'], ['fierydance', 'flamethrower', 'lavaplume']],
- ['thunderpunch', 'wildcharge'],
- ['thunderbolt', 'discharge'],
- ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']],
- ['aurasphere', 'focusblast'],
- ['closecombat', 'drainpunch'],
- [['dragonpulse', 'spacialrend'], 'dracometeor'],
- ['heavyslam', 'flashcannon'],
- ['alluringvoice', 'dazzlinggleam'],
- ['defog', 'rapidspin'],
-
- // 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'],
- // Araquanid and Magnezone
- ['mirrorcoat', ['hydropump', 'bodypress']],
- ];
-
- 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:
- // To force Close Combat on Barraskewda without locking it to Tera Fighting
- if (species.id === 'barraskewda') {
- this.incompatibleMoves(moves, movePool, ['psychicfangs', 'throatchop'], ['poisonjab', 'throatchop']);
- }
- // To force Toxic on Quagsire
- if (species.id === 'quagsire') this.incompatibleMoves(moves, movePool, 'spikes', 'icebeam');
- // Taunt/Knock should be Cyclizar's flex moveslot
- if (species.id === 'cyclizar') this.incompatibleMoves(moves, movePool, 'taunt', 'knockoff');
- // To force Stealth Rock on Camerupt
- if (species.id === 'camerupt') this.incompatibleMoves(moves, movePool, 'roar', 'willowisp');
- // nothing else rolls these lol
- if (species.id === 'coalossal') this.incompatibleMoves(moves, movePool, 'flamethrower', 'overheat');
- }
-
- override randomMoveset(
- types: string[],
- abilities: string[],
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- movePool: string[],
- teraType: string,
- role: RandomTeamsTypes.Role,
- ): Set {
- const moves = new Set();
- let counter = this.queryMoves(moves, species, teraType, abilities);
- this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
-
- // If there are only four moves, add all moves and return early
- if (movePool.length <= this.maxMoveCount) {
- for (const moveid of movePool) {
- moves.add(moveid);
- }
- return moves;
- }
-
- const runEnforcementChecker = (checkerName: string) => {
- if (!this.moveEnforcementCheckers[checkerName]) return false;
- return this.moveEnforcementCheckers[checkerName](
- movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
- );
- };
-
- if (role === 'Tera Blast user') {
- counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Add required move (e.g. Relic Song for Meloetta-P)
- if (species.requiredMove) {
- const move = this.dex.moves.get(species.requiredMove).id;
- counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Add other moves you really want to have, e.g. STAB, recovery, setup.
-
- // Enforce Facade if Guts is a possible ability
- if (movePool.includes('facade') && abilities.includes('Guts')) {
- counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web
- for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) {
- if (movePool.includes(moveid)) {
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Trick Room on Doubles Wallbreaker
- if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') {
- counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce hazard removal on Bulky Support if the team doesn't already have it
- if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
- if (movePool.includes('rapidspin')) {
- counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- if (movePool.includes('defog')) {
- counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Knock Off on pure Normal- and Fighting-types in singles
- if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
- if (movePool.includes('knockoff')) {
- counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Flip Turn on pure Water-type Wallbreakers
- if (types.length === 1 && types.includes('Water') &&
- role === 'Wallbreaker' && movePool.includes('flipturn')) {
- counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
-
- // Enforce Spore on Smeargle
- if (species.id === 'smeargle') {
- if (movePool.includes('spore')) {
- counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce moves in doubles
- if (isDoubles) {
- const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore'];
- for (const moveid of doublesEnforcedMoves) {
- if (movePool.includes(moveid)) {
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- // Enforce Fake Out on slow Pokemon
- if (movePool.includes('fakeout') && species.baseStats.spe <= 50) {
- counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Enforce Tailwind on Prankster and Gale Wings users
- if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) {
- counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- // Enforce Thunder Wave on Prankster users as well
- if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
- counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce STAB priority
- if (
- ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) ||
- PRIORITY_POKEMON.includes(species.id)
- ) {
- const priorityMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (
- types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
- (move.basePower || move.basePowerCallback)
- ) {
- priorityMoves.push(moveid);
- }
- }
- if (priorityMoves.length) {
- const moveid = this.sample(priorityMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce a single STAB for Moltres
- if (species.id === 'moltres') {
- const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying';
-
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) {
- stabMoves.push(moveid);
- }
- }
- while (runEnforcementChecker(typeToEnforce)) {
- if (!stabMoves.length) break;
- const moveid = this.sampleNoReplace(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce STAB
- for (const type of types) {
- // Moltres already has STAB, so ignore this block
- if (species.id === 'moltres') break;
- // prevents Meowscarada from being enforced stab moves
- if (species.id === 'meowscarada') break;
- // Check if a STAB move of that type should be required
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
- stabMoves.push(moveid);
- }
- }
- while (runEnforcementChecker(type)) {
- if (!stabMoves.length) break;
- const moveid = this.sampleNoReplace(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce Tera STAB
- // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
- if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) &&
- !abilities.includes('Protean')) {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
- stabMoves.push(moveid);
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // If no STAB move was added, add a STAB move
- // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
- if (!counter.get('stab') && !abilities.includes('Protean')) {
- const stabMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
- stabMoves.push(moveid);
- }
- }
- if (stabMoves.length) {
- const moveid = this.sample(stabMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce recovery
- if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
- const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
- if (recoveryMoves.length) {
- const moveid = this.sample(recoveryMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce setup
- if (role.includes('Setup') || role === 'Tera Blast user') {
- // First, try to add a non-Speed setup move
- const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
- if (nonSpeedSetupMoves.length) {
- const moveid = this.sample(nonSpeedSetupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- } else {
- // No non-Speed setup moves, so add any (Speed) setup move
- const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
- if (setupMoves.length) {
- const moveid = this.sample(setupMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Enforce redirecting moves and Fake Out on Doubles Support
- if (role === 'Doubles Support') {
- for (const moveid of ['fakeout', 'followme', 'ragepowder']) {
- if (movePool.includes(moveid)) {
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Enforce Protect
- if (role.includes('Protect')) {
- const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid));
- if (protectMoves.length) {
- const moveid = this.sample(protectMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce a move not on the noSTAB list
- if (!counter.damagingMoves.size) {
- // Choose an attacking move
- const attackingMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
- }
- if (attackingMoves.length) {
- const moveid = this.sample(attackingMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
-
- // Enforce coverage move
- if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) {
- if (counter.damagingMoves.size === 1) {
- // Find the type of the current attacking move
- const currentAttackType = counter.damagingMoves.values().next().value!.type;
- // Choose an attacking move that is of different type to the current single attack
- const coverageMoves = [];
- for (const moveid of movePool) {
- const move = this.dex.moves.get(moveid);
- const moveType = this.getMoveType(move, species, abilities, teraType);
- if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
- if (currentAttackType !== moveType) coverageMoves.push(moveid);
- }
- }
- if (coverageMoves.length) {
- const moveid = this.sample(coverageMoves);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
-
- // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
- // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
-
- // Choose remaining moves randomly from movepool and add them to moves list:
- while (moves.size < this.maxMoveCount && movePool.length) {
- if (moves.size + movePool.length <= this.maxMoveCount) {
- for (const moveid of movePool) {
- moves.add(moveid);
- }
- break;
- }
- const moveid = this.sample(movePool);
- counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- for (const pair of MOVE_PAIRS) {
- if (moveid === pair[0] && movePool.includes(pair[1])) {
- counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- if (moveid === pair[1] && movePool.includes(pair[0])) {
- counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
- movePool, teraType, role);
- }
- }
- }
- return moves;
- }
-
- override getPriorityItem(
- ability: string,
- types: string[],
- moves: Set,
- counter: MoveCounter,
- teamDetails: RandomTeamsTypes.TeamDetails,
- species: Species,
- isLead: boolean,
- isDoubles: boolean,
- teraType: string,
- role: RandomTeamsTypes.Role,
- ) {
- if (!isDoubles) {
- if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
- return 'Booster Energy';
- }
- if (species.id === 'lokix') {
- return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
- }
- }
- if (species.requiredItems) {
- // Z-Crystals aren't available in Gen 9, so require Plates
- if (species.baseSpecies === 'Arceus') {
- return species.requiredItems[0];
- }
- return this.sample(species.requiredItems);
- }
- if (role === 'AV Pivot') return 'Assault Vest';
- // other
- if (moves.has('substitute')) return 'Leftovers';
- if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
- if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
- if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
- if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
- return (types.includes('Fire') || ability === 'Toxic Boost' || ability === 'Poison Heal') ? 'Toxic Orb' : 'Flame Orb';
- }
- 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 (
- role === 'Wallbreaker' && (counter.get('Physical') > counter.get('Special')) && !counter.get('Status')
- ) {
- return 'Choice Band';
- }
- if (
- role === 'Wallbreaker' && (counter.get('Physical') < counter.get('Special')) && !counter.get('Status')
- ) {
- return 'Choice Specs';
- }
- if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
- if (moves.has('acrobatics') && ability !== 'Quark Drive' && 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 (
- ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) ||
- moves.has('bellydrum') || moves.has('filletaway')
- ) {
- return 'Sitrus Berry';
- }
- if (this.dex.getEffectiveness('Rock', species) >= 2) return 'Heavy-Duty Boots';
- if (species.nfe) return 'Eviolite';
- if (['Bulky Attacker', 'Bulky Support', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
- if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
- return (counter.get('Physical') + counter.get('Special') >= 3) ? 'Life Orb' : 'Leftovers';
- }
- }
-
- override randomSet(
- s: string | Species,
- teamDetails: RandomTeamsTypes.TeamDetails = {},
- isLead = false,
- isDoubles = false
- ): RandomTeamsTypes.RandomSet {
- const species = this.dex.species.get(s);
- const forme = this.getForme(species);
- const sets = this.randomSets[species.id]["sets"];
- const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
-
- // const ruleTable = this.dex.formats.getRuleTable(this.format);
-
- for (const set of sets) {
- // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
- const abilities = set.abilities!;
- if (
- isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
- set.role === 'Fast Bulky Setup'
- ) continue;
- // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
- if (teamDetails.teraBlast && 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 = [];
- types[0] = species.types[0];
- if (species.types[1]) types[1] = species.types[1];
- const abilities = set.abilities!;
-
- // Get moves
- const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
- const counter = this.queryMoves(moves, species, teraType, abilities);
-
- // Get ability
- ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
-
- // Get items
- // First, the priority items
- item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
- if (item === undefined) {
- if (isDoubles) {
- item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
- } else {
- item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
- }
- }
-
- // Get level
- const level = this.getLevel(species, isDoubles);
-
- // Prepare optimal HP
- const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
- let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
- // Crash damage move users want an odd HP to survive two misses
- if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;
- while (evs.hp > 1) {
- const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
- if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
- // Two Substitutes should activate Sitrus Berry
- if (hp % 4 === 0) break;
- } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
- // Belly Drum should activate Sitrus Berry
- if (hp % 2 === 0) break;
- } else if (moves.has('substitute') && moves.has('endeavor')) {
- // Luvdisc should be able to Substitute down to very low HP
- if (hp % 4 > 0) break;
- } else {
- // Maximize number of Stealth Rock switch-ins
- if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb', 'Eviolite'].includes(item)) break;
- if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
- // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
- if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
- }
- evs.hp -= 4;
- }
-
- // Minimize confusion damage
- const noAttackStatMoves = [...moves].every(m => {
- const move = this.dex.moves.get(m);
- if (move.damageCallback || move.damage) return true;
- if (move.id === 'shellsidearm') return false;
- // Magearna and doubles Dragonite, though these can work well as a general rule
- if (move.id === 'terablast' && (
- species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
- ) return false;
- return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
- });
- // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs
- if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
- species.id !== 'illumise') {
- evs.atk = 0;
- ivs.atk = 0;
- }
-
- // Enforce Tera Type after all set generation is done to prevent infinite generation
- if (this.forceTeraType) teraType = this.forceTeraType;
-
- // shuffle moves to add more randomness to camomons
- const shuffledMoves = Array.from(moves);
- this.prng.shuffle(shuffledMoves);
- return {
- name: species.baseSpecies,
- species: forme,
- gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
- shiny: this.randomChance(1, 1024),
- level,
- moves: shuffledMoves,
- ability,
- evs,
- ivs,
- item,
- teraType,
- role,
- };
- }
-
- override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
-
- random6x6Team() {
- this.enforceNoDirectCustomBanlistChanges();
-
- const seed = this.prng.getSeed();
- const ruleTable = this.dex.formats.getRuleTable(this.format);
- const pokemon: RandomTeamsTypes.RandomSet[] = [];
-
- // For Monotype
- const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
- const isDoubles = this.format.gameType !== 'singles';
- const typePool = this.dex.types.names().filter(name => name !== "Stellar");
- const type = this.forceMonotype || this.sample(typePool);
-
- // PotD stuff
- // const usePotD = global.Config && Config.potd && ruleTable.has('potd');
- // const potd = usePotD ? this.dex.species.get(Config.potd) : null;
-
- const baseFormes: { [k: string]: number } = {};
-
- const typeCount: { [k: string]: number } = {};
- const typeComboCount: { [k: string]: number } = {};
- const typeWeaknesses: { [k: string]: number } = {};
- const typeDoubleWeaknesses: { [k: string]: number } = {};
- const teamDetails: RandomTeamsTypes.TeamDetails = {};
-
- const pokemonList = Object.keys(this.randomSets);
- const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
-
- let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
- while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
- const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
- // const z = 0;
- 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;
-
- // 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;
-
- 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 three of any type combination in Monotype
- if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
-
- // The Pokemon of the Day
- // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
-
- // testing code
- // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Terapagos');
-
- 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);
- if (teamDetails.teraBlast) continue;
- pokemon.push(set);
- } else {
- set = this.randomSet(species, teamDetails, true, isDoubles);
- // if (teamDetails.teraBlast) continue;
- pokemon.unshift(set);
- leadsRemaining--;
- }
- } else {
- set = this.randomSet(species, teamDetails, false, isDoubles);
- // if (teamDetails.teraBlast) continue;
- 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 Random6x6Teams;
From eaff3cf2a8845c5e42e1cee8d9bf4e7cd09e4a4d Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 03:40:36 -0700
Subject: [PATCH 094/233] Reimplement ORAS Pure Hackmons ladder
---
config/formats.ts | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 6c5557f8e2..b68742ea93 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -878,10 +878,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [
],
},
{
- name: "[Gen 7] Pure Hackmons",
+ name: "[Gen 6] Pure Hackmons",
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
- mod: 'gen7',
- ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
+ mod: 'gen6',
+ ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
},
// Challengeable OMs
@@ -2902,11 +2902,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
],
},
{
- name: "[Gen 6] Pure Hackmons",
+ name: "[Gen 7] Pure Hackmons",
desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`,
- mod: 'gen6',
+ mod: 'gen7',
searchShow: false,
- ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause', 'EV limit = 510'],
+ ruleset: ['-Nonexistent', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
},
// Temporary Tour Metas
From 16675b07bcd99376208c2e021971f7e1c66313a4 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 10:26:15 -0700
Subject: [PATCH 095/233] Make 4v4 Doubles UU actually doubles
---
config/formats.ts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/config/formats.ts b/config/formats.ts
index b68742ea93..ddf28277bc 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -611,6 +611,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
name: "[Gen 9] 4v4 Doubles UU",
desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.",
+ mod: 'gen9',
+ gameType: 'doubles',
ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'],
banlist: [
'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane',
From c8ed448422a55863c5984c6fe821db726269ea1a Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 10:27:21 -0700
Subject: [PATCH 096/233] BH: Update bans
---
config/formats.ts | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index ddf28277bc..098e9901b6 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -717,12 +717,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Endless Battle Clause', 'Hackmons Forme Legality', 'Species Reveal Clause', 'Terastal Clause',
],
banlist: [
- 'Calyrex-Shadow', 'Deoxys-Attack', 'Diancie-Mega', 'Gengar-Mega', 'Groudon-Primal', 'Kartana', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Rayquaza-Mega',
- 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap', 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Libero',
- 'Liquid Ooze', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag',
- 'Stakeout', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw',
- 'Electro Shot', 'Fillet Away', 'Imprison', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Photon Geyser', 'Power Trip', 'Quiver Dance', 'Rage Fist',
- 'Revival Blessing', 'Shed Tail', 'Sleep Talk', 'Substitute', 'Shell Smash', 'Tail Glow',
+ 'Calyrex-Shadow', 'Deoxys-Attack', 'Gengar-Mega', 'Mewtwo-Mega-X', 'Mewtwo-Mega-Y', 'Rayquaza-Mega', 'Regigigas', 'Shedinja', 'Slaking', 'Arena Trap',
+ 'Contrary', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Illusion', 'Innards Out', 'Libero', 'Liquid Ooze', 'Magnet Pull', 'Moody', 'Neutralizing Gas',
+ 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'King\'s Rock',
+ 'Razor Fang', 'Baton Pass', 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Electro Shot', 'Fillet Away', 'Imprison', 'Last Respects',
+ 'Lumina Crash', 'No Retreat', 'Photon Geyser', 'Power Trip', 'Quiver Dance', 'Rage Fist', 'Revival Blessing', 'Shed Tail', 'Sleep Talk', 'Substitute',
+ 'Shell Smash', 'Tail Glow', 'V-create',
],
},
{
From 3a3c6739f20e424e49f04f81972f8f43a34344aa Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 10:28:13 -0700
Subject: [PATCH 097/233] Implement March 2026 tier shifts
---
config/formats.ts | 3 +--
data/formats-data.ts | 4 ++--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 098e9901b6..dba5b39829 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -340,8 +340,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 9] LC'],
banlist: [
'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray',
- 'Pawniard', 'Salandit', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull',
- 'Zorua-Hisui',
+ 'Pawniard', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
// LC UUBL
'Deerling', 'Minccino', 'Light Clay',
],
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 42664c5615..ccaea84c80 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -560,7 +560,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tentacruel: {
tier: "NU",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "RU",
},
geodude: {
tier: "LC",
@@ -5322,7 +5322,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
quaquaval: {
tier: "UUBL",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "RUBL",
},
lechonk: {
tier: "LC",
From 746d3ddf6287eb6694e21df187a5e28e77e83e31 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 10:52:06 -0700
Subject: [PATCH 098/233] PokeAAA: Update bans
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index dba5b39829..484cdcacf8 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -539,9 +539,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
banlist: [
'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
- 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Dialga', 'Enamorus-Base', 'Espathra', 'Eternatus', 'Excadrill',
- 'Flutter Mane', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor',
- 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Base', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Enamorus-Base', 'Espathra', 'Eternatus',
+ 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo',
+ 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle',
'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Zacian',
'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit',
From e8bd7a59055c0f495b9f058113f69bedb0c3e4d7 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 1 Mar 2026 14:22:08 -0700
Subject: [PATCH 099/233] Linked and PokeAAA: Update bans
---
config/formats.ts | 32 ++++++++++++++++----------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 484cdcacf8..acf5ce08c2 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -501,12 +501,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
// searchShow: false,
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'],
banlist: [
- 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin', 'Eternatus',
- 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
- 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia', 'Palkia-Origin', 'Raichu-Alola',
- 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona',
- 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Moody', 'Sand Rush', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden',
- 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
+ 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
+ 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia',
+ 'Palkia-Origin', 'Raichu-Alola', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
+ 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Moody', 'Sand Rush', 'Shadow Tag',
+ 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Detect', 'Dig', 'Dive', 'Fly', 'Imprison', 'Phantom Force', 'Protect',
@@ -539,16 +539,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
banlist: [
'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
- 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Enamorus-Base', 'Espathra', 'Eternatus',
- 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo',
- 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
- 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle',
- 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Zacian',
- 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit',
- 'Regenerator > 2',
- 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll', 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer',
- 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive', 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak',
- 'Snow Warning + Slush Rush', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragonite',
+ 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh',
+ 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
+ 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin',
+ 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon',
+ 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui',
+ 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim',
+ 'Drought + Chlorophyll', 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive',
+ 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
+ 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
],
restricted: [
'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Neutralizing Gas',
From c9f530f4126a450d5da4fe6678fc843f64362fae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 1 Mar 2026 22:26:44 +0100
Subject: [PATCH 100/233] Legends Z-A OU: March tier shifts (#11788)
---
data/mods/gen9legendsou/formats-data.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/data/mods/gen9legendsou/formats-data.ts b/data/mods/gen9legendsou/formats-data.ts
index 77d8d85a8a..691d610cf2 100644
--- a/data/mods/gen9legendsou/formats-data.ts
+++ b/data/mods/gen9legendsou/formats-data.ts
@@ -366,7 +366,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
slowking: {
- tier: "OU",
+ tier: "UU",
},
slowkinggalar: {
tier: "OU",
@@ -600,7 +600,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "UU",
},
absolmegaz: {
- tier: "UU",
+ tier: "OU",
},
snorunt: {
tier: "LC",
@@ -723,7 +723,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "LC",
},
hippowdon: {
- tier: "OU",
+ tier: "UU",
},
snover: {
tier: "LC",
@@ -1295,7 +1295,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
volcanion: {
- tier: "UU",
+ tier: "OU",
},
crabrawler: {
tier: "LC",
From 8ce95e4a2c961573bfa728006ca40406de6d0572 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 19:53:51 -0700
Subject: [PATCH 101/233] Linked: Fix crash
---
data/mods/linked/moves.ts | 15 ++++++++-------
data/mods/linked/scripts.ts | 33 +++++++++++++++++----------------
sim/global-types.ts | 4 ++--
3 files changed, 27 insertions(+), 25 deletions(-)
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index e401244c0f..b92c9016e0 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -3,9 +3,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
beforeTurnCallback(pokemon) {
// @ts-expect-error modded
- const linkedMoves: [string, string] = pokemon.getLinkedMoves();
+ const linkedMoves: [ActiveMove, ActiveMove] = pokemon.getLinkedMoves();
if (linkedMoves.length) {
- if (linkedMoves[0] !== 'pursuit' && linkedMoves[1] === 'pursuit') return;
+ if (linkedMoves[0].id !== 'pursuit' && linkedMoves[1].id === 'pursuit') return;
}
for (const target of pokemon.foes()) {
@@ -277,9 +277,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
// Encore only works on Max Moves if the base move is not itself a Max Move
if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
// @ts-expect-error modded
- const linkedMoves: [string, string] = target.getLinkedMoves(true);
+ const linkedMoves: [ActiveMove, ActiveMove] = target.getLinkedMoves(true);
const moveSlot = target.getMoveData(move.id);
- if (linkedMoves.includes(move.id) && linkedMoves.every(m => !!this.dex.moves.get(m).flags['failencore'])) {
+ const hasLinkedMove = linkedMoves.some(x => x.id === move.id);
+ if (hasLinkedMove && linkedMoves.every(m => !!m.flags['failencore'])) {
// both moves cannot be encored
delete target.volatiles['encore'];
return false;
@@ -291,7 +292,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.effectState.timesActivated = {};
this.effectState.move = move.id;
this.add('-start', target, 'Encore');
- if (linkedMoves.includes(move.id)) {
+ if (hasLinkedMove) {
this.effectState.move = linkedMoves;
}
if (!this.queue.willMove(target)) {
@@ -335,7 +336,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
// @ts-expect-error modded
- if (target.hasLinkedMove(lastMove.id)) {
+ if (target.hasLinkedMove(lastMove)) {
// TODO: Check instead whether the last executed move was linked
if (target.moveSlots[0].pp <= 0 || target.moveSlots[1].pp <= 0) {
target.removeVolatile('encore');
@@ -388,7 +389,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (!lastMove || lastMove.id === 'struggle') return;
// @ts-expect-error
- if (pokemon.hasLinkedMove(lastMove.id)) {
+ if (pokemon.hasLinkedMove(lastMove)) {
// @ts-expect-error
for (const move of pokemon.getLinkedMoves()) {
pokemon.disableMove(move.id);
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 2d03e008f7..64e9a6baea 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -28,10 +28,10 @@ export const Scripts: ModdedBattleScriptsData = {
priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority);
// Linked mod
- const linkedMoves: [string, string] = action.pokemon.getLinkedMoves();
+ const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
let linkIndex = -1;
- if (linkedMoves.length && !move.isZ && !move.isMax && (linkIndex = linkedMoves.indexOf(this.toID(action.move))) >= 0) {
- const linkedActions = action.linked || linkedMoves.map(moveid => this.dex.getActiveMove(moveid));
+ if (linkedMoves.length && !move.isZ && !move.isMax && (linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
+ const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
const thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], priority);
const thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, altMove.priority);
@@ -106,8 +106,8 @@ export const Scripts: ModdedBattleScriptsData = {
const linkedMoves: ActiveMove[] = action.linked;
for (let i = linkedMoves.length - 1; i >= 0; i--) {
const isValidTarget = this.validTargetLoc(action.targetLoc, action.pokemon, linkedMoves[i].target);
- const targetLoc = isValidTarget ? action.targetLoc :
- action.pokemon.getLocOf(this.getRandomTarget(action.pokemon, linkedMoves[i])!);
+ const randomTarget = this.getRandomTarget(action.pokemon, linkedMoves[i]);
+ const targetLoc = isValidTarget || !randomTarget ? action.targetLoc : action.pokemon.getLocOf(randomTarget);
const pseudoAction: Action = {
choice: 'move', priority: action.priority, speed: action.speed, pokemon: action.pokemon,
targetLoc, moveid: linkedMoves[i].id, move: linkedMoves[i], mega: action.mega,
@@ -526,16 +526,16 @@ export const Scripts: ModdedBattleScriptsData = {
}));
}
action.fractionalPriority = this.battle.runEvent('FractionalPriority', action.pokemon, null, action.move, 0);
- const linkedMoves: [string, string] = action.pokemon.getLinkedMoves();
+ const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
if (
linkedMoves.length &&
!(action.pokemon.getItem().isChoice || action.pokemon.hasAbility('gorillatactics')) &&
!action.zmove && !action.maxMove
) {
const decisionMove = this.battle.toID(action.move);
- if (linkedMoves.includes(decisionMove)) {
- action.linked = linkedMoves.map(moveid => this.battle.dex.getActiveMove(moveid));
- const linkedOtherMove = action.linked[1 - linkedMoves.indexOf(decisionMove)];
+ if (linkedMoves.some(x => x.id === decisionMove)) {
+ action.linked = linkedMoves;
+ const linkedOtherMove = action.linked[1 - linkedMoves.findIndex(x => x.id === decisionMove)];
if (linkedOtherMove.beforeTurnCallback) {
this.addChoice({
choice: 'beforeTurnMove',
@@ -580,20 +580,21 @@ export const Scripts: ModdedBattleScriptsData = {
getLinkedMoves(ignoreDisabled) {
const linkedMoves = this.moveSlots.slice(0, 2);
if (linkedMoves.length !== 2 || linkedMoves[0].pp <= 0 || linkedMoves[1].pp <= 0) return [];
- const ret = [linkedMoves[0].id, linkedMoves[1].id];
+ const ret: [ActiveMove, ActiveMove] = [
+ this.battle.dex.getActiveMove(linkedMoves[0].id), this.battle.dex.getActiveMove(linkedMoves[1].id),
+ ];
if (ignoreDisabled) return ret;
- if (!this.ateBerry && ret.includes('belch' as ID)) return [];
- if (this.hasItem('assaultvest') &&
- (this.battle.dex.moves.get(ret[0]).category === 'Status' || this.battle.dex.moves.get(ret[1]).category === 'Status')) {
+ if (!this.ateBerry && ret.some(x => x.id === 'belch')) return [];
+ if (this.hasItem('assaultvest') && (ret[0].category === 'Status' || ret[1].category === 'Status')) {
return [];
}
return ret;
},
- hasLinkedMove(moveid) {
+ hasLinkedMove(move) {
// @ts-expect-error modded
- const linkedMoves: ID[] = this.getLinkedMoves(true);
+ const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves(true);
if (!linkedMoves.length) return false;
- return linkedMoves.some(x => x === moveid);
+ return linkedMoves.some(x => x.id === move.id);
},
},
};
diff --git a/sim/global-types.ts b/sim/global-types.ts
index e663413e98..075d1eb48c 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -327,8 +327,8 @@ interface ModdedBattlePokemon {
ignoringItem?: (this: Pokemon) => boolean;
// OM
- getLinkedMoves?: (this: Pokemon, ignoreDisabled?: boolean) => string[];
- hasLinkedMove?: (this: Pokemon, moveid: string) => boolean;
+ getLinkedMoves?: (this: Pokemon, ignoreDisabled?: boolean) => [ActiveMove, ActiveMove] | [];
+ hasLinkedMove?: (this: Pokemon, move: ActiveMove) => boolean;
}
interface ModdedBattleQueue extends Partial {
From 65e046529c47e1cc28bfe4bf9497b778a5318fde Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 19:55:47 -0700
Subject: [PATCH 102/233] 4v4 Doubles UU: Add Best of checkbox for challenges
---
config/formats.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/config/formats.ts b/config/formats.ts
index acf5ce08c2..fab1510c84 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -612,6 +612,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.",
mod: 'gen9',
gameType: 'doubles',
+ bestOfDefault: true,
ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'],
banlist: [
'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane',
From e4801e992a451c03919bea4e4fa2b29d9878a6c5 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 19:56:45 -0700
Subject: [PATCH 103/233] Linked: Fix priority of linked moves (again)
---
data/mods/linked/scripts.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 64e9a6baea..3695986790 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -287,7 +287,8 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.gen < 5) this.eachEvent('Update');
- if (this.gen >= 8 && this.queue.peek()?.choice === 'move') {
+ const nextAction = this.queue.peek();
+ if (this.gen >= 8 && nextAction?.choice === 'move' && nextAction?.pokemon !== action.pokemon) {
// 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) {
From bf612bf9eedde46b9c0d2e3bfaf773ad797ef193 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 20:01:49 -0700
Subject: [PATCH 104/233] Fix lint
---
data/mods/linked/scripts.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 3695986790..7940632bd0 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -30,7 +30,8 @@ export const Scripts: ModdedBattleScriptsData = {
// Linked mod
const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
let linkIndex = -1;
- if (linkedMoves.length && !move.isZ && !move.isMax && (linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
+ if (linkedMoves.length && !move.isZ && !move.isMax &&
+ (linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
const thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], priority);
From 6545c74486ff791110f4f2804e32665cfa532903 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 21:14:50 -0700
Subject: [PATCH 105/233] Linked: Fix bugs with Encore, Stalwart, Propeller
Tail, and Snipe Shot
---
data/mods/linked/moves.ts | 42 ++++++-------
data/mods/linked/scripts.ts | 114 ++++++++++++++++++++++++++++++++++++
sim/global-types.ts | 2 +
3 files changed, 133 insertions(+), 25 deletions(-)
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index b92c9016e0..4f2fa7be55 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -279,8 +279,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
// @ts-expect-error modded
const linkedMoves: [ActiveMove, ActiveMove] = target.getLinkedMoves(true);
const moveSlot = target.getMoveData(move.id);
- const hasLinkedMove = linkedMoves.some(x => x.id === move.id);
- if (hasLinkedMove && linkedMoves.every(m => !!m.flags['failencore'])) {
+ const isLinkedMove = linkedMoves.some(x => x.id === move.id);
+ if (isLinkedMove && linkedMoves.every(m => !!m.flags['failencore'])) {
// both moves cannot be encored
delete target.volatiles['encore'];
return false;
@@ -292,7 +292,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.effectState.timesActivated = {};
this.effectState.move = move.id;
this.add('-start', target, 'Encore');
- if (hasLinkedMove) {
+ if (isLinkedMove) {
this.effectState.move = linkedMoves;
}
if (!this.queue.willMove(target)) {
@@ -313,7 +313,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.queue.cancelAction(pokemon);
if (move.id !== this.effectState.move) return this.effectState.move;
} else {
- // Locked into a link
+ // Locked into a link
switch (this.effectState.timesActivated[this.turn]) {
case 1: {
if (this.effectState.move[0] !== move.id) return this.effectState.move[0];
@@ -327,22 +327,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onResidualOrder: 13,
onResidual(target) {
- // early termination if you run out of PP
- const lastMove = target.m.lastMoveAbsolute;
- const moveSlot = target.getMoveData(lastMove);
- if (!moveSlot) {
- target.removeVolatile('encore');
- return; // no last move
- }
-
- // @ts-expect-error modded
- if (target.hasLinkedMove(lastMove)) {
- // TODO: Check instead whether the last executed move was linked
- if (target.moveSlots[0].pp <= 0 || target.moveSlots[1].pp <= 0) {
+ if (Array.isArray(this.effectState.move)) {
+ if (this.effectState.move.map(move => target.getMoveData(move)).some(moveSlot => !moveSlot || moveSlot.pp <= 0)) {
target.removeVolatile('encore');
}
} else {
- if (moveSlot.pp <= 0) {
+ const moveSlot = target.getMoveData(this.effectState.move);
+ if (!moveSlot || moveSlot.pp <= 0) {
target.removeVolatile('encore');
}
}
@@ -351,19 +342,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', target, 'Encore');
},
onDisableMove(pokemon) {
+ if (!this.effectState.move) return;
if (Array.isArray(this.effectState.move)) {
+ if (this.effectState.move.every(move => !pokemon.hasMove(move))) return;
for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move[0] && moveSlot.id !== this.effectState.move[1]) {
+ if (!this.effectState.move.map(move => move.id).includes(moveSlot.id)) {
pokemon.disableMove(moveSlot.id);
}
}
- }
- if (!this.effectState.move || !pokemon.hasMove(this.effectState.move)) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
+ } else {
+ if (!pokemon.hasMove(this.effectState.move)) return;
+ for (const moveSlot of pokemon.moveSlots) {
+ if (moveSlot.id !== this.effectState.move) {
+ pokemon.disableMove(moveSlot.id);
+ }
}
}
},
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 7940632bd0..90b806fd95 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -300,6 +300,51 @@ export const Scripts: ModdedBattleScriptsData = {
return false;
},
+ getTarget(pokemon, move, targetLoc, originalTarget) {
+ move = this.dex.moves.get(move);
+
+ // Delete tracksTarget stuff because it's useless in Linked anyway
+
+ // banning Dragon Darts from directly targeting itself is done in side.ts, but
+ // Dragon Darts can target itself if Ally Switch is used afterwards
+ if (move.smartTarget) {
+ const curTarget = pokemon.getAtLoc(targetLoc);
+ return curTarget && !curTarget.fainted ? curTarget : this.getRandomTarget(pokemon, move);
+ }
+
+ // Fails if the target is the user and the move can't target its own position
+ const selfLoc = pokemon.getLocOf(pokemon);
+ if (
+ ['adjacentAlly', 'any', 'normal'].includes(move.target) && targetLoc === selfLoc &&
+ !pokemon.volatiles['twoturnmove'] && !pokemon.volatiles['iceball'] && !pokemon.volatiles['rollout']
+ ) {
+ return move.flags['futuremove'] ? pokemon : null;
+ }
+ if (move.target !== 'randomNormal' && this.validTargetLoc(targetLoc, pokemon, move.target)) {
+ const target = pokemon.getAtLoc(targetLoc);
+ if (target?.fainted) {
+ if (this.gameType === 'freeforall') {
+ // Target is a fainted opponent in a free-for-all battle; attack shouldn't retarget
+ return target;
+ }
+ if (target.isAlly(pokemon)) {
+ if (move.target === 'adjacentAllyOrSelf' && this.gen !== 5) {
+ return pokemon;
+ }
+ // Target is a fainted ally: attack shouldn't retarget
+ return target;
+ }
+ }
+ if (target && !target.fainted) {
+ // Target is unfainted: use selected target location
+ return target;
+ }
+
+ // Chosen target not valid,
+ // retarget randomly with getRandomTarget
+ }
+ return this.getRandomTarget(pokemon, move);
+ },
actions: {
runMove(moveOrMoveName, pokemon, targetLoc, options) {
pokemon.activeMoveActions++;
@@ -546,6 +591,14 @@ export const Scripts: ModdedBattleScriptsData = {
targetLoc: action.targetLoc,
});
}
+ if (linkedOtherMove.priorityChargeCallback) {
+ this.addChoice({
+ choice: 'priorityChargeMove',
+ pokemon: action.pokemon,
+ move: linkedOtherMove,
+ targetLoc: action.targetLoc,
+ });
+ }
}
}
} else if (['switch', 'instaswitch'].includes(action.choice)) {
@@ -573,6 +626,67 @@ export const Scripts: ModdedBattleScriptsData = {
},
},
pokemon: {
+ clearVolatile(includeSwitchFlags = true) {
+ this.boosts = {
+ atk: 0,
+ def: 0,
+ spa: 0,
+ spd: 0,
+ spe: 0,
+ accuracy: 0,
+ evasion: 0,
+ };
+
+ if (this.battle.gen === 1 && this.baseMoves.includes('mimic' as ID) && !this.transformed) {
+ const moveslot = this.baseMoves.indexOf('mimic' as ID);
+ const mimicPP = this.moveSlots[moveslot] ? this.moveSlots[moveslot].pp : 16;
+ this.moveSlots = this.baseMoveSlots.slice();
+ this.moveSlots[moveslot].pp = mimicPP;
+ } else {
+ this.moveSlots = this.baseMoveSlots.slice();
+ }
+
+ this.transformed = false;
+ this.ability = this.baseAbility;
+ this.hpType = this.baseHpType;
+ this.hpPower = this.baseHpPower;
+ if (this.canTerastallize === false) this.canTerastallize = this.teraType;
+ for (const i in this.volatiles) {
+ if (this.volatiles[i].linkedStatus) {
+ this.removeLinkedVolatiles(this.volatiles[i].linkedStatus, this.volatiles[i].linkedPokemon);
+ }
+ }
+ if (this.species.name === 'Eternatus-Eternamax' && this.volatiles['dynamax']) {
+ this.volatiles = { dynamax: this.volatiles['dynamax'] };
+ } else {
+ this.volatiles = {};
+ }
+ if (includeSwitchFlags) {
+ this.switchFlag = false;
+ this.forceSwitchFlag = false;
+ }
+
+ this.m.lastMoveAbsolute = null;
+ this.lastMove = null;
+ if (this.battle.gen === 2) this.lastMoveEncore = null;
+ this.lastMoveUsed = null;
+ this.moveThisTurn = '';
+ this.moveLastTurnResult = undefined;
+ this.moveThisTurnResult = undefined;
+
+ this.lastDamage = 0;
+ this.attackedBy = [];
+ this.hurtThisTurn = null;
+ this.newlySwitched = true;
+ this.beingCalledBack = false;
+
+ this.volatileStaleness = undefined;
+
+ delete this.abilityState.started;
+ delete this.itemState.started;
+
+ this.setSpecies(this.baseSpecies);
+ },
moveUsed(move, targetLoc) {
if (!this.moveThisTurn) this.m.lastMoveAbsolute = move;
this.lastMove = move;
diff --git a/sim/global-types.ts b/sim/global-types.ts
index 075d1eb48c..a8870de3d0 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -272,6 +272,7 @@ interface ModdedBattlePokemon {
lostItemForDelibird?: Item | null;
boostBy?: (this: Pokemon, boost: SparseBoostsTable) => boolean | number;
clearBoosts?: (this: Pokemon) => void;
+ clearVolatile?: (this: Pokemon, includeSwitchFlags?: boolean) => void;
calculateStat?: (this: Pokemon, statName: StatIDExceptHP, boost: number, modifier?: number) => number;
cureStatus?: (this: Pokemon, silent?: boolean) => boolean;
deductPP?: (
@@ -383,6 +384,7 @@ interface ModdedBattleScriptsData extends Partial {
checkWin?: (this: Battle, faintQueue?: Battle['faintQueue'][0]) => true | undefined;
fieldEvent?: (this: Battle, eventid: string, targets?: Pokemon[]) => void;
getAllActive?: (this: Battle, includeFainted?: boolean, includeCommanding?: boolean) => Pokemon[];
+ getTarget?: (this: Battle, pokemon: Pokemon, move: string | Move, targetLoc: number, originalTarget?: Pokemon) => Pokemon | null;
}
type TypeInfo = import('./dex-data').TypeInfo;
From 4c8c7cbdefff259bbc0a90403b5116ce36a2019c Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 21:15:53 -0700
Subject: [PATCH 106/233] FIx lint
---
sim/global-types.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/sim/global-types.ts b/sim/global-types.ts
index a8870de3d0..dcad5b529a 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -384,7 +384,9 @@ interface ModdedBattleScriptsData extends Partial {
checkWin?: (this: Battle, faintQueue?: Battle['faintQueue'][0]) => true | undefined;
fieldEvent?: (this: Battle, eventid: string, targets?: Pokemon[]) => void;
getAllActive?: (this: Battle, includeFainted?: boolean, includeCommanding?: boolean) => Pokemon[];
- getTarget?: (this: Battle, pokemon: Pokemon, move: string | Move, targetLoc: number, originalTarget?: Pokemon) => Pokemon | null;
+ getTarget?: (
+ this: Battle, pokemon: Pokemon, move: string | Move, targetLoc: number, originalTarget?: Pokemon
+ ) => Pokemon | null;
}
type TypeInfo = import('./dex-data').TypeInfo;
From 5f698aaf743fd4a5decfd1c99258aa49e3015f54 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 22:38:21 -0700
Subject: [PATCH 107/233] Linked: Update runAction for missing action choices
---
data/mods/linked/scripts.ts | 57 +++++++++++++++++++++++++++++++------
1 file changed, 49 insertions(+), 8 deletions(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 90b806fd95..0ebdea36c7 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -126,12 +126,21 @@ export const Scripts: ModdedBattleScriptsData = {
case 'megaEvo':
this.actions.runMegaEvo(action.pokemon);
break;
+ case 'megaEvoX':
+ this.actions.runMegaEvoX?.(action.pokemon);
+ break;
+ case 'megaEvoY':
+ this.actions.runMegaEvoY?.(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 'beforeTurnMove': {
+ 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);
@@ -140,7 +149,13 @@ export const Scripts: ModdedBattleScriptsData = {
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);
@@ -176,6 +191,24 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
break;
+ case 'revivalblessing':
+ action.pokemon.side.pokemonLeft++;
+ if (action.target.position < action.pokemon.side.active.length) {
+ this.queue.addChoice({
+ choice: 'instaswitch',
+ pokemon: action.target,
+ target: action.target,
+ });
+ }
+ action.target.fainted = false;
+ action.target.faintQueued = false;
+ action.target.subFainted = false;
+ action.target.status = '';
+ action.target.hp = 1; // Needed so hp functions works
+ action.target.sethp(action.target.maxhp / 2);
+ this.add('-heal', action.target, action.target.getHealth, '[from] move: Revival Blessing');
+ action.pokemon.side.removeSlotCondition(action.pokemon, 'revivalblessing');
+ break;
case 'runSwitch':
this.actions.runSwitch(action.pokemon);
break;
@@ -194,7 +227,7 @@ export const Scripts: ModdedBattleScriptsData = {
this.updateSpeed();
residualPokemon = this.getAllActive().map(pokemon => [pokemon, pokemon.getUndynamaxedHP()] as const);
this.fieldEvent('Residual');
- this.add('upkeep');
+ if (!this.ended) this.add('upkeep');
break;
}
@@ -221,7 +254,7 @@ export const Scripts: ModdedBattleScriptsData = {
// 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) {
+ } else if (['megaEvo', 'megaEvoX', 'megaEvoY'].includes(action.choice) && 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()) {
@@ -237,7 +270,7 @@ export const Scripts: ModdedBattleScriptsData = {
return false;
}
- if (this.gen >= 5) {
+ if (this.gen >= 5 && action.choice !== 'start') {
this.eachEvent('Update');
for (const [pokemon, originalHP] of residualPokemon) {
const maxhp = pokemon.getUndynamaxedHP(pokemon.maxhp);
@@ -259,14 +292,22 @@ export const Scripts: ModdedBattleScriptsData = {
);
for (let i = 0; i < this.sides.length; i++) {
+ let reviveSwitch = false; // Used to ignore the fake switch for Revival Blessing
if (switches[i] && !this.canSwitch(this.sides[i])) {
for (const pokemon of this.sides[i].active) {
+ if (this.sides[i].slotConditions[pokemon.position]['revivalblessing']) {
+ reviveSwitch = true;
+ continue;
+ }
pokemon.switchFlag = false;
}
- switches[i] = false;
+ if (!reviveSwitch) switches[i] = false;
} else if (switches[i]) {
for (const pokemon of this.sides[i].active) {
- if (pokemon.switchFlag && !pokemon.skipBeforeSwitchOutEventFlag) {
+ if (
+ pokemon.hp && pokemon.switchFlag && pokemon.switchFlag !== 'revivalblessing' &&
+ !pokemon.skipBeforeSwitchOutEventFlag
+ ) {
this.runEvent('BeforeSwitchOut', pokemon);
pokemon.skipBeforeSwitchOutEventFlag = true;
this.faintMessages(); // Pokemon may have fainted in BeforeSwitchOut
@@ -289,7 +330,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.gen < 5) this.eachEvent('Update');
const nextAction = this.queue.peek();
- if (this.gen >= 8 && nextAction?.choice === 'move' && nextAction?.pokemon !== action.pokemon) {
+ if (this.gen >= 8 && (nextAction?.choice === 'move' || nextAction?.choice === 'runDynamax') && nextAction?.pokemon !== action.pokemon) {
// 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) {
From 59529d79e0bb0f160ba87ba631b7c850bdd4c99a Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 2 Mar 2026 22:40:11 -0700
Subject: [PATCH 108/233] FIx lint
---
data/mods/linked/scripts.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 0ebdea36c7..12fff07703 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -330,7 +330,8 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.gen < 5) this.eachEvent('Update');
const nextAction = this.queue.peek();
- if (this.gen >= 8 && (nextAction?.choice === 'move' || nextAction?.choice === 'runDynamax') && nextAction?.pokemon !== action.pokemon) {
+ if (this.gen >= 8 &&
+ (nextAction?.choice === 'move' || nextAction?.choice === 'runDynamax') && nextAction?.pokemon !== action.pokemon) {
// 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) {
From 7bd04f470cf3316ad493c0da9fa3c524d5efa107 Mon Sep 17 00:00:00 2001
From: Slayer95
Date: Tue, 3 Mar 2026 11:50:30 -0500
Subject: [PATCH 109/233] Linked: Remove m.lastMoveAbsolute in favor of
lastMove (#11791)
* Fix Linked last move checks
At some point between af6affb and 045fe456, Linked's concept of
last absolute move changed from using the 2nd move in a link to
using the 1st move, likely in an attempt to preserve the 1st move
information that used to be stored for debugging purposes.
However, the redefinition has impacted the mechanics of Sketch, and
other moves for a long time.
This commit restores the original mechanics, and gets rid of the
last absolute move concept, in favor of the orthodox pokemon.lastMove.
In consequence, all modded data entries that now match gen9 are
also deleted.
* Linked: Fix Grassy Glide priority calculation
---
data/mods/linked/moves.ts | 215 +-----------------------------------
data/mods/linked/scripts.ts | 75 ++-----------
2 files changed, 11 insertions(+), 279 deletions(-)
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index 4f2fa7be55..cb82c8f7f5 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -128,151 +128,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
- // Copy the last used move of a link
- sketch: {
- inherit: true,
- onHit(target, source) {
- const move = target.m.lastMoveAbsolute;
- if (source.transformed || !move || source.moves.includes(move.id)) 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 = {
- move: move.name,
- id: move.id,
- pp: move.pp,
- maxpp: move.pp,
- target: move.target,
- disabled: false,
- used: false,
- };
- source.moveSlots[sketchIndex] = sketchedMove;
- source.baseMoveSlots[sketchIndex] = sketchedMove;
- this.add('-activate', source, 'move: Sketch', move.name);
- },
- },
- mimic: {
- inherit: true,
- onHit(target, source) {
- const move = target.m.lastMoveAbsolute;
- if (source.transformed || !move || move.flags['failmimic'] || source.moves.includes(move.id)) {
- return false;
- }
- if (move.isZ || move.isMax) return false;
- const mimicIndex = source.moves.indexOf('mimic');
- if (mimicIndex < 0) return false;
-
- source.moveSlots[mimicIndex] = {
- move: move.name,
- id: move.id,
- pp: move.pp,
- maxpp: move.pp,
- target: move.target,
- disabled: false,
- used: false,
- virtual: true,
- };
- this.add('-start', source, 'Mimic', move.name);
- },
- },
-
- // Copy/call last move of a link
- instruct: {
- inherit: true,
- onHit(target, source) {
- const lastMove = target.m.lastMoveAbsolute;
- if (!lastMove || target.volatiles['dynamax']) return false;
- const moveSlot = target.getMoveData(lastMove.id);
- if (
- lastMove.flags['failinstruct'] || lastMove.isZ || lastMove.isMax ||
- lastMove.flags['charge'] || lastMove.flags['recharge'] ||
- target.volatiles['beakblast'] || target.volatiles['focuspunch'] || target.volatiles['shelltrap'] ||
- (moveSlot && moveSlot.pp <= 0)
- ) {
- return false;
- }
- this.add('-singleturn', target, 'move: Instruct', `[of] ${source}`);
- this.queue.prioritizeAction(this.queue.resolveAction({
- choice: 'move',
- pokemon: target,
- moveid: lastMove.id,
- targetLoc: target.lastMoveTargetLoc!,
- })[0] as MoveAction);
- },
- },
- mirrormove: {
- inherit: true,
- onTryHit(target, pokemon) {
- const move = target.m.lastMoveAbsolute;
- if (!move?.flags['mirror'] || move.isZ || move.isMax) {
- return false;
- }
- this.actions.useMove(move.id, pokemon, { target });
- return null;
- },
- },
-
- // Disabling effects
- disable: {
- inherit: true,
- condition: {
- duration: 5,
- noCopy: true, // doesn't get copied by Baton Pass
- onStart(pokemon, source, effect) {
- // The target hasn't taken its turn, or Cursed Body activated and the move was not used through Dancer or Instruct
- if (
- this.queue.willMove(pokemon) ||
- (pokemon === this.activePokemon && this.activeMove && !this.activeMove.isExternal)
- ) {
- this.effectState.duration!--;
- }
- const lastMove = pokemon.m.lastMoveAbsolute;
- if (!lastMove) {
- this.debug(`Pokemon hasn't moved yet`);
- return false;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === lastMove.id) {
- if (!moveSlot.pp) {
- this.debug('Move out of PP');
- return false;
- }
- }
- }
- if (effect.effectType === 'Ability') {
- this.add('-start', pokemon, 'Disable', lastMove.name, '[from] ability: ' + effect.name, `[of] ${source}`);
- } else {
- this.add('-start', pokemon, 'Disable', lastMove.name);
- }
- this.effectState.move = lastMove.id;
- },
- onResidualOrder: 14,
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Disable');
- },
- onBeforeMovePriority: 7,
- onBeforeMove(attacker, defender, move) {
- if (!(move.isZ && move.isZOrMaxPowered) && move.id === this.effectState.move) {
- this.add('cant', attacker, 'Disable', move);
- return false;
- }
- },
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
- },
- },
encore: {
inherit: true,
condition: {
duration: 3,
noCopy: true, // doesn't get copied by Z-Baton Pass
onStart(target) {
- let move: Move | ActiveMove | null = target.m.lastMoveAbsolute;
+ let move: Move | ActiveMove | null = target.lastMove;
if (!move || target.volatiles['dynamax']) return false;
// Encore only works on Max Moves if the base move is not itself a Max Move
if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
@@ -377,7 +239,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', pokemon, 'Torment');
},
onDisableMove(pokemon) {
- const lastMove = pokemon.m.lastMoveAbsolute;
+ const lastMove = pokemon.lastMove;
if (!lastMove || lastMove.id === 'struggle') return;
// @ts-expect-error
@@ -402,9 +264,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onFaint(target, source, effect) {
if (!source || source.fainted || !effect) return;
- let move = source.m.lastMoveAbsolute;
+ let move = source.lastMove;
if (effect.effectType === 'Move' && !effect.flags['futuremove'] && move) {
- if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove) as ActiveMove;
for (const moveSlot of source.moveSlots) {
if (moveSlot.id === move.id) {
moveSlot.pp = 0;
@@ -421,43 +283,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
},
- spite: {
- inherit: true,
- onHit(target) {
- let move: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (!move || move.isZ) return false;
- if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
-
- const ppDeducted = target.deductPP(move.id, 4);
- if (!ppDeducted) return false;
- this.add("-activate", target, 'move: Spite', move.name, ppDeducted);
- },
- },
// Other lastMove checks
- conversion2: {
- inherit: true,
- onHit(target, source) {
- const lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (!lastMove) return false;
- const possibleTypes = [];
- const attackType = lastMove.type;
- 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(typeName);
- }
- }
- if (!possibleTypes.length) {
- return false;
- }
- const randomType = this.sample(possibleTypes);
-
- if (!source.setType(randomType)) return false;
- this.add('-start', source, 'typechange', randomType);
- },
- },
destinybond: {
inherit: true,
condition: {
@@ -487,38 +314,4 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
},
- iceball: {
- inherit: true,
- condition: {
- duration: 1,
- onLockMove: 'iceball',
- onStart() {
- this.effectState.hitCount = 0;
- },
- onResidual(target) {
- // This is just to ensure the volatile is deleted correctly
- const lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (lastMove?.id === 'struggle') {
- delete target.volatiles['iceball'];
- }
- },
- },
- },
- rollout: {
- inherit: true,
- condition: {
- duration: 1,
- onLockMove: 'rollout',
- onStart() {
- this.effectState.hitCount = 0;
- },
- onResidual(target) {
- // This is just to ensure the volatile is deleted correctly
- const lastMove: Move | ActiveMove | null = target.m.lastMoveAbsolute;
- if (lastMove?.id === 'struggle') {
- delete target.volatiles['rollout'];
- }
- },
- },
- },
};
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 12fff07703..bc5f90e093 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -24,9 +24,6 @@ export const Scripts: ModdedBattleScriptsData = {
// 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, null, null, priority);
- priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority);
// Linked mod
const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
let linkIndex = -1;
@@ -34,8 +31,10 @@ export const Scripts: ModdedBattleScriptsData = {
(linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
- const thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], priority);
- const thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, altMove.priority);
+ let thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
+ thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], thisPriority);
+ let thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, altMove.priority);
+ thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, thatPriority);
priority = Math.min(thisPriority, thatPriority);
action.priority = priority + action.fractionalPriority;
if (this.gen > 5) {
@@ -45,6 +44,8 @@ export const Scripts: ModdedBattleScriptsData = {
altMove.priority = priority;
}
} else {
+ priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
+ priority = this.runEvent('ModifyPriority', action.pokemon, null, 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;
@@ -439,7 +440,7 @@ export const Scripts: ModdedBattleScriptsData = {
}
// Used exclusively for a hint later
- if (move.flags['cantusetwice'] && pokemon.m.lastMoveAbsolute?.id === move.id) {
+ if (move.flags['cantusetwice'] && pokemon.lastMove?.id === move.id) {
pokemon.addVolatile(move.id);
}
@@ -668,69 +669,7 @@ export const Scripts: ModdedBattleScriptsData = {
},
},
pokemon: {
- clearVolatile(includeSwitchFlags = true) {
- this.boosts = {
- atk: 0,
- def: 0,
- spa: 0,
- spd: 0,
- spe: 0,
- accuracy: 0,
- evasion: 0,
- };
-
- if (this.battle.gen === 1 && this.baseMoves.includes('mimic' as ID) && !this.transformed) {
- const moveslot = this.baseMoves.indexOf('mimic' as ID);
- const mimicPP = this.moveSlots[moveslot] ? this.moveSlots[moveslot].pp : 16;
- this.moveSlots = this.baseMoveSlots.slice();
- this.moveSlots[moveslot].pp = mimicPP;
- } else {
- this.moveSlots = this.baseMoveSlots.slice();
- }
-
- this.transformed = false;
- this.ability = this.baseAbility;
- this.hpType = this.baseHpType;
- this.hpPower = this.baseHpPower;
- if (this.canTerastallize === false) this.canTerastallize = this.teraType;
- for (const i in this.volatiles) {
- if (this.volatiles[i].linkedStatus) {
- this.removeLinkedVolatiles(this.volatiles[i].linkedStatus, this.volatiles[i].linkedPokemon);
- }
- }
- if (this.species.name === 'Eternatus-Eternamax' && this.volatiles['dynamax']) {
- this.volatiles = { dynamax: this.volatiles['dynamax'] };
- } else {
- this.volatiles = {};
- }
- if (includeSwitchFlags) {
- this.switchFlag = false;
- this.forceSwitchFlag = false;
- }
-
- this.m.lastMoveAbsolute = null;
- this.lastMove = null;
- if (this.battle.gen === 2) this.lastMoveEncore = null;
- this.lastMoveUsed = null;
- this.moveThisTurn = '';
- this.moveLastTurnResult = undefined;
- this.moveThisTurnResult = undefined;
-
- this.lastDamage = 0;
- this.attackedBy = [];
- this.hurtThisTurn = null;
- this.newlySwitched = true;
- this.beingCalledBack = false;
-
- this.volatileStaleness = undefined;
-
- delete this.abilityState.started;
- delete this.itemState.started;
-
- this.setSpecies(this.baseSpecies);
- },
moveUsed(move, targetLoc) {
- if (!this.moveThisTurn) this.m.lastMoveAbsolute = move;
this.lastMove = move;
this.moveThisTurn = move.id;
this.lastMoveTargetLoc = targetLoc;
From 50ad403c5c9a72fa6b0af4393b178610bdde7e25 Mon Sep 17 00:00:00 2001
From: MathyFurret <4866817+MathyFurret@users.noreply.github.com>
Date: Tue, 3 Mar 2026 11:51:46 -0600
Subject: [PATCH 110/233] Help tickets: Escape HTML in lock reason
---
server/chat-plugins/helptickets.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/chat-plugins/helptickets.ts b/server/chat-plugins/helptickets.ts
index 766688deb1..249739ba48 100644
--- a/server/chat-plugins/helptickets.ts
+++ b/server/chat-plugins/helptickets.ts
@@ -1365,7 +1365,7 @@ export const textTickets: { [k: string]: TextTicketInfo } = {
const str = ipPunishments.map(p => (
`${Punishments.punishmentTypes.get(p.type)?.desc || p.type} as ` +
`${p.id}` +
- `${p.reason ? ` (${p.reason})` : ''}`
+ (p.reason ? Utils.html` (${p.reason})` : '')
));
if (str) buf += `Punishments: ${str.join(' | ')}
`;
}
From dd60398eac24ffb9baad9dbb7e6346c0f59ec53b Mon Sep 17 00:00:00 2001
From: InkyDarkBird <102001461+InkyDarkBird@users.noreply.github.com>
Date: Tue, 3 Mar 2026 16:31:40 -0500
Subject: [PATCH 111/233] SV Linked: Update bans (#11793)
* SV Linked: Update bans
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index fab1510c84..08f0f0f263 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -502,15 +502,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'],
banlist: [
'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
- 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
- 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Palkia',
- 'Palkia-Origin', 'Raichu-Alola', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
- 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Moody', 'Sand Rush', 'Shadow Tag',
- 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
+ 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin',
+ 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
+ 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Drought', 'Electric Surge', 'Moody', 'Sand Rush',
+ 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects',
+ 'Shed Tail',
],
restricted: [
- 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Detect', 'Dig', 'Dive', 'Fly', 'Imprison', 'Phantom Force', 'Protect',
- 'Ruination', 'Shadow Force', 'Silk Trap', 'Spiky Shield', 'Super Fang', 'Taunt', 'Trick Room',
+ 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force', 'Protect', 'Ruination',
+ 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
],
onValidateSet(set) {
const problems = [];
From cf8cbd8f5d6616113d4938bb2cb3be6b21b59b22 Mon Sep 17 00:00:00 2001
From: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Date: Tue, 3 Mar 2026 13:32:06 -0800
Subject: [PATCH 112/233] DPP UU: Ban Sleep moves (#11794)
https://www.smogon.com/forums/threads/sleep-in-dpp-uu.3777509/post-10893690
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 08f0f0f263..de43427f0b 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5004,7 +5004,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 4] UU",
mod: 'gen4',
searchShow: false,
- ruleset: ['[Gen 4] OU', '!Baton Pass Stat Trap Clause', '!Freeze Clause Mod', '!Sleep Moves Clause', 'Sleep Clause Mod'],
+ ruleset: ['[Gen 4] OU', '!Baton Pass Stat Trap Clause', '!Freeze Clause Mod'],
banlist: ['OU', 'UUBL', 'Baton Pass'],
unbanlist: ['Arena Trap', 'Snow Cloak', 'Quick Claw', 'Swagger'],
},
@@ -5012,7 +5012,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 4] NU",
mod: 'gen4',
searchShow: false,
- ruleset: ['[Gen 4] UU', 'Baton Pass Clause'],
+ ruleset: ['[Gen 4] UU', 'Baton Pass Clause', '!Sleep Moves Clause', 'Sleep Clause Mod'],
banlist: ['UU', 'NUBL'],
unbanlist: ['Sand Veil', 'Baton Pass'],
},
From f494d48434b0f809f026d5d6ae4a275eeb481da1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 3 Mar 2026 22:32:45 +0100
Subject: [PATCH 113/233] Fix injective field position indexing (#11789)
---
sim/battle-actions.ts | 2 +-
sim/battle.ts | 3 +--
sim/pokemon.ts | 5 +++++
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 9df9dceb52..5a16ebbc97 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -180,7 +180,7 @@ export class BattleActions {
}
const allActive = this.battle.getAllActive(true);
this.battle.speedSort(allActive);
- this.battle.speedOrder = allActive.map(a => a.side.n * a.battle.sides.length + a.position);
+ this.battle.speedOrder = allActive.map(a => a.getFieldPositionValue());
this.battle.fieldEvent('SwitchIn', switchersIn);
for (const poke of switchersIn) {
diff --git a/sim/battle.ts b/sim/battle.ts
index f06c223980..81617c5bb6 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -1009,8 +1009,7 @@ export class Battle {
// Pokemon speeds including ties are resolved before all onSwitchIn handlers and aren't re-sorted in-between
// so we subtract a fractional speed from each Pokemon's respective event handlers by using the index of their
// unique field position in a pre-sorted-by-speed array
- const fieldPositionValue = pokemon.side.n * this.sides.length + pokemon.position;
- handler.speed -= this.speedOrder.indexOf(fieldPositionValue) / (this.activePerHalf * 2);
+ handler.speed -= this.speedOrder.indexOf(pokemon.getFieldPositionValue()) / (this.activePerHalf * 2);
}
}
return handler;
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 6ff69ec153..cda757180f 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -518,6 +518,11 @@ export class Pokemon {
return (this.side.id + positionLetter) as PokemonSlot;
}
+ getFieldPositionValue() {
+ // p1a, p2a, p3a, ..., p1b, p2b, p3b, ...
+ return this.side.n + this.battle.sides.length * this.position;
+ }
+
toString() {
const fullname = (this.illusion) ? this.illusion.fullname : this.fullname;
return this.isActive ? this.getSlot() + fullname.slice(2) : fullname;
From 4415c0ffbe99e7087ab7ab9239f266918cbbe756 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Tue, 3 Mar 2026 14:34:32 -0700
Subject: [PATCH 114/233] Pokebilities AAA: Ban Dragapult
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index de43427f0b..8848a4408c 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -540,9 +540,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
banlist: [
'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
- 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragonite',
- 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hawlucha', 'Ho-Oh',
- 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragapult',
+ 'Dragonite', 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hawlucha',
+ 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin',
'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon',
'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui',
From 04a026782d4fe789e9ed4093bf84368684bdf97e Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Tue, 3 Mar 2026 14:48:32 -0700
Subject: [PATCH 115/233] Linked: Fix priority on moves in the first moveslots
while choice-locked
---
data/mods/linked/scripts.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index bc5f90e093..93cc97ef32 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -27,7 +27,8 @@ export const Scripts: ModdedBattleScriptsData = {
// Linked mod
const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
let linkIndex = -1;
- if (linkedMoves.length && !move.isZ && !move.isMax &&
+ if (linkedMoves.length && !action.pokemon.hasItem(['choiceband', 'choicescarf', 'choicespecs']) &&
+ !action.pokemon.hasAbility('gorillatactics') && !move.isZ && !move.isMax &&
(linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
@@ -618,9 +619,8 @@ export const Scripts: ModdedBattleScriptsData = {
action.fractionalPriority = this.battle.runEvent('FractionalPriority', action.pokemon, null, action.move, 0);
const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
if (
- linkedMoves.length &&
- !(action.pokemon.getItem().isChoice || action.pokemon.hasAbility('gorillatactics')) &&
- !action.zmove && !action.maxMove
+ linkedMoves.length && !action.pokemon.hasItem(['choiceband', 'choicescarf', 'choicespecs']) &&
+ !action.pokemon.hasAbility('gorillatactics') && !action.zmove && !action.maxMove
) {
const decisionMove = this.battle.toID(action.move);
if (linkedMoves.some(x => x.id === decisionMove)) {
From 59709dba6c7f17dc76a4ac0b2fe1f0568a582871 Mon Sep 17 00:00:00 2001
From: Marty-D
Date: Thu, 5 Mar 2026 18:41:57 -0500
Subject: [PATCH 116/233] Fix item numbers
---
data/items.ts | 40 ++++++++++++++++++++--------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/data/items.ts b/data/items.ts
index fa452c1c48..b232f73d88 100644
--- a/data/items.ts
+++ b/data/items.ts
@@ -51,7 +51,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2588,
+ num: 2638,
gen: 9,
isNonstandard: "Future",
},
@@ -408,7 +408,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2601,
+ num: 2648,
gen: 9,
isNonstandard: "Future",
},
@@ -943,7 +943,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2587,
+ num: 2637,
gen: 9,
isNonstandard: "Future",
},
@@ -1219,7 +1219,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2595,
+ num: 2644,
gen: 9,
isNonstandard: "Future",
},
@@ -1316,7 +1316,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2593,
+ num: 2568,
gen: 9,
isNonstandard: "Future",
},
@@ -1972,7 +1972,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2586,
+ num: 2587,
gen: 9,
isNonstandard: "Future",
},
@@ -2418,7 +2418,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2590,
+ num: 2640,
gen: 9,
isNonstandard: "Future",
},
@@ -2508,7 +2508,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2600,
+ num: 2650,
gen: 9,
isNonstandard: "Future",
},
@@ -2529,7 +2529,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2596,
+ num: 2645,
gen: 9,
isNonstandard: "Future",
},
@@ -2541,7 +2541,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2594,
+ num: 2642,
gen: 9,
isNonstandard: "Future",
},
@@ -2829,7 +2829,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2592,
+ num: 2567,
gen: 9,
isNonstandard: "Future",
},
@@ -3509,7 +3509,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2591,
+ num: 2641,
gen: 9,
isNonstandard: "Future",
},
@@ -3668,7 +3668,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
!Object.values(item.megaStone).includes(source.baseSpecies.name));
},
- num: 2597,
+ num: 2646,
gen: 9,
isNonstandard: "Future",
},
@@ -3931,7 +3931,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
!Object.values(item.megaStone).includes(source.baseSpecies.name));
},
- num: 2594,
+ num: 2643,
gen: 9,
isNonstandard: "Future",
},
@@ -5035,7 +5035,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2585,
+ num: 2635,
gen: 9,
isNonstandard: "Future",
},
@@ -5047,7 +5047,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2586,
+ num: 2636,
gen: 9,
isNonstandard: "Future",
},
@@ -5566,7 +5566,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2599,
+ num: 2647,
gen: 9,
isNonstandard: "Future",
},
@@ -5977,7 +5977,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2589,
+ num: 2639,
gen: 9,
isNonstandard: "Future",
},
@@ -6271,7 +6271,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
return !item.megaStone || (!item.megaStone[source.baseSpecies.name] &&
!Object.values(item.megaStone).includes(source.baseSpecies.name));
},
- num: 2601,
+ num: 2649,
gen: 9,
isNonstandard: "Future",
},
@@ -7813,7 +7813,7 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
onTakeItem(item, source) {
return !item.megaStone?.[source.baseSpecies.baseSpecies];
},
- num: 2598,
+ num: 2586,
gen: 9,
isNonstandard: "Future",
},
From cb47056b1b75edc2f40e839f6849d268da2c7872 Mon Sep 17 00:00:00 2001
From: Karthik99999
Date: Sat, 7 Mar 2026 02:35:15 -0500
Subject: [PATCH 117/233] Fix Skill Swap messages
---
sim/battle.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sim/battle.ts b/sim/battle.ts
index 81617c5bb6..6263b73f47 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -1312,9 +1312,9 @@ export class Battle {
if (!sourceCanBeSet) return sourceCanBeSet;
if (this.gen <= 4 || source.isAlly(target)) {
- this.add('-activate', source, 'Skill Swap');
+ this.add('-activate', source, 'Skill Swap', '', '', `[of] ${target}`);
} else {
- this.add('-activate', source, 'Skill Swap', target, `[ability] ${targetAbility.name}`, `[ability2] ${sourceAbility.name}`);
+ this.add('-activate', source, 'Skill Swap', targetAbility.name, sourceAbility.name, `[of] ${target}`);
}
this.singleEvent('End', sourceAbility, source.abilityState, source);
this.singleEvent('End', targetAbility, target.abilityState, target);
From b36a3ea036d9329db20b071d1733e0a31fa67092 Mon Sep 17 00:00:00 2001
From: VannAccessible
Date: Sun, 8 Mar 2026 10:39:32 -0700
Subject: [PATCH 118/233] Linked: Ban Chlorophyll and restrict Sunny Day,
ETerrain (#11806)
* Linked: Ban Chlorophyll and restrict Sunny Day, ETerrain to formats.ts
https://www.smogon.com/forums/threads/linked-omotm.3776838/page-4#post-10897129
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 8848a4408c..d7a1671c93 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -505,13 +505,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin',
'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
- 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Drought', 'Electric Surge', 'Moody', 'Sand Rush',
- 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects',
- 'Shed Tail',
+ 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody',
+ 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
+ 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force', 'Protect', 'Ruination',
- 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
+ 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Electric Terrain', 'Encore', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
+ 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
],
onValidateSet(set) {
const problems = [];
From 55f9e851724565d492b99a65419fa60e3bebe2b8 Mon Sep 17 00:00:00 2001
From: Slayer95
Date: Sun, 8 Mar 2026 13:06:19 -0500
Subject: [PATCH 119/233] Linked: Fix inconsistent implementations of
twoturnmove, lockedmove (#11804)
* Linked: Fix inconsistent implementations of twoturnmove, lockedmove
* Linked: Sturdier implementation for Torment
---
data/mods/linked/conditions.ts | 24 +++++++++++++++++
data/mods/linked/moves.ts | 11 +++-----
data/mods/linked/scripts.ts | 48 ++++++++++++++++++++++++++++------
sim/global-types.ts | 6 +++++
4 files changed, 73 insertions(+), 16 deletions(-)
diff --git a/data/mods/linked/conditions.ts b/data/mods/linked/conditions.ts
index 014a218bc6..e17d70bc02 100644
--- a/data/mods/linked/conditions.ts
+++ b/data/mods/linked/conditions.ts
@@ -63,4 +63,28 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
if (pokemon.moveThisTurn) pokemon.removeVolatile('gem');
},
},
+ // Prior to Gen 9, using these moves as part of a link resulted in locking into an entire link.
+ // However, such behavior has since been deemed counter-intuitive.
+ // https://www.smogon.com/forums/threads/3776838
+ //
+ // Outrage/Thrash/Petal Dance should be consistent with Choice items.
+ lockedmove: {
+ inherit: true,
+ onStart(target, source, effect) {
+ this.effectState.trueDuration = this.random(2, 4);
+ this.effectState.move = effect.id;
+ this.queue.cancelMove(source);
+ },
+ },
+ // A general rule of thumb to keep in mind is that all effects of move 1
+ // will follow through before the next move activates. However, apparently,
+ // moves such as Skull Bash/Meteor Beam/etc never respected that prior to Gen 9.
+ //
+ // Ensure we lock into Skull Bash/Meteor Beam/etc.
+ twoturnmove: {
+ inherit: true,
+ onOverrideAction(pokemon, target, move) {
+ return this.effectState.move;
+ },
+ },
};
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index cb82c8f7f5..eb3fce6e79 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -242,15 +242,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const lastMove = pokemon.lastMove;
if (!lastMove || lastMove.id === 'struggle') return;
+ pokemon.disableMove(lastMove.id);
// @ts-expect-error
- if (pokemon.hasLinkedMove(lastMove)) {
- // @ts-expect-error
- for (const move of pokemon.getLinkedMoves()) {
- pokemon.disableMove(move.id);
- }
- } else {
- pokemon.disableMove(lastMove.id);
- }
+ const { index: linkIndex, link: linkedMoves } = pokemon.queryLinkMove(lastMove);
+ if (linkIndex >= 0) pokemon.disableMove(linkedMoves[1 - linkIndex].id);
},
},
},
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index 93cc97ef32..ae561390f9 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -1,5 +1,20 @@
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
+ init() {
+ // Since twoturnmove isn't currently implemented using linked volatiles,
+ // patch related moves so that 'twoturnmove' and e.g. 'skullbash' end simultaneously.
+ const removeTwoTurnMove = function (target: Pokemon) {
+ // Cannot use target.removeVolatile, since it would cause stack overflow.
+ delete target.volatiles['twoturnmove'];
+ };
+ for (const id in this.data.Moves) {
+ if (this.data.Moves[id].flags['charge'] && id !== 'skydrop') {
+ this.modData("Moves", id).condition ||= {};
+ if ('onEnd' in this.modData("Moves", id).condition) throw new Error(`onEnd needs manual override for move ${id}`);
+ this.modData("Moves", id).condition.onEnd = removeTwoTurnMove;
+ }
+ }
+ },
getActionSpeed(action) {
if (action.choice === 'move') {
let move = action.move;
@@ -25,11 +40,8 @@ export const Scripts: ModdedBattleScriptsData = {
// (instead of compounding every time `getActionSpeed` is called)
let priority = this.dex.moves.get(move.id).priority;
// Linked mod
- const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
- let linkIndex = -1;
- if (linkedMoves.length && !action.pokemon.hasItem(['choiceband', 'choicescarf', 'choicespecs']) &&
- !action.pokemon.hasAbility('gorillatactics') && !move.isZ && !move.isMax &&
- (linkIndex = linkedMoves.findIndex(x => x.id === this.toID(action.move))) >= 0) {
+ const { index: linkIndex, link: linkedMoves } = action.pokemon.queryLinkMove(action.move);
+ if (linkIndex >= 0 && action.pokemon.getCanLinkMove(action.move)) {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
let thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
@@ -619,8 +631,10 @@ export const Scripts: ModdedBattleScriptsData = {
action.fractionalPriority = this.battle.runEvent('FractionalPriority', action.pokemon, null, action.move, 0);
const linkedMoves: [ActiveMove, ActiveMove] = action.pokemon.getLinkedMoves();
if (
- linkedMoves.length && !action.pokemon.hasItem(['choiceband', 'choicescarf', 'choicespecs']) &&
- !action.pokemon.hasAbility('gorillatactics') && !action.zmove && !action.maxMove
+ linkedMoves.length &&
+ !action.pokemon.getWillLockMove!() &&
+ !action.pokemon.getIsMoveLocked!() &&
+ !action.zmove && !action.maxMove
) {
const decisionMove = this.battle.toID(action.move);
if (linkedMoves.some(x => x.id === decisionMove)) {
@@ -689,9 +703,27 @@ export const Scripts: ModdedBattleScriptsData = {
},
hasLinkedMove(move) {
// @ts-expect-error modded
- const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves(true);
+ const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves!(true);
if (!linkedMoves.length) return false;
return linkedMoves.some(x => x.id === move.id);
},
+ getIsMoveLocked() {
+ // Detects active Outrage.
+ return !!this.volatiles['choicelock'] || !!this.volatiles['lockedmove'];
+ },
+ getWillLockMove() {
+ // Ignores Outrage, etc, since they can miss.
+ return this.hasItem(['choiceband', 'choicescarf', 'choicespecs']) || this.hasAbility('gorillatactics');
+ },
+ getCanLinkMove(move) {
+ // @ts-expect-error modded
+ return !move.isZ && !move.isMax && !this.getWillLockMove() && !this.getIsMoveLocked();
+ },
+ queryLinkMove(move, ignoreDisabled) {
+ // @ts-expect-error modded
+ const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves!(ignoreDisabled);
+ if (!linkedMoves.length) return { index: -1, link: linkedMoves };
+ return { index: linkedMoves.findIndex(x => x.id === move.id), link: linkedMoves };
+ },
},
};
diff --git a/sim/global-types.ts b/sim/global-types.ts
index dcad5b529a..0d9fb3ddab 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -330,6 +330,12 @@ interface ModdedBattlePokemon {
// OM
getLinkedMoves?: (this: Pokemon, ignoreDisabled?: boolean) => [ActiveMove, ActiveMove] | [];
hasLinkedMove?: (this: Pokemon, move: ActiveMove) => boolean;
+ getIsMoveLocked?: (this: Pokemon) => boolean;
+ getWillLockMove?: (this: Pokemon) => boolean;
+ getCanLinkMove?: (this: Pokemon, move: ActiveMove) => boolean;
+ queryLinkMove?: (
+ this: Pokemon, move: ActiveMove, ignoreDisabled?: boolean
+ ) => { index: number, link: [ActiveMove, ActiveMove] };
}
interface ModdedBattleQueue extends Partial {
From e78411f6e716b4be1c580bc1ff02d5bfa1aebb53 Mon Sep 17 00:00:00 2001
From: Caznovia <104919647+Caznovia@users.noreply.github.com>
Date: Sun, 8 Mar 2026 14:06:55 -0400
Subject: [PATCH 120/233] [Gen 4] VGC 2009: Fix future event legality (#11805)
---
data/mods/gen4pt/learnsets.ts | 2 --
1 file changed, 2 deletions(-)
diff --git a/data/mods/gen4pt/learnsets.ts b/data/mods/gen4pt/learnsets.ts
index b28cfa9ad2..26deb90b84 100644
--- a/data/mods/gen4pt/learnsets.ts
+++ b/data/mods/gen4pt/learnsets.ts
@@ -1475,7 +1475,6 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
hiddenpower: ["4M", "3M"],
irontail: ["4M", "4S21", "3M"],
knockoff: ["4T"],
- lastresort: ["4S18"],
lightscreen: ["4M", "4L42", "4S11", "3M", "3L50", "3S0", "3S6", "3S7", "3S8"],
magnetrise: ["4T"],
megakick: ["3T"],
@@ -2916,7 +2915,6 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
steelwing: ["4M", "3M"],
substitute: ["4M", "3T"],
sunnyday: ["4M", "3M"],
- superfang: ["4S0"],
supersonic: ["4L1", "3L1"],
swagger: ["4M", "3T"],
swift: ["4T", "3T"],
From d57d100065787dc705f4aa3964c147cc09f175f6 Mon Sep 17 00:00:00 2001
From: livid washed <115855253+livid-washed@users.noreply.github.com>
Date: Mon, 9 Mar 2026 05:40:26 +1100
Subject: [PATCH 121/233] Hotfix Sitrus Iron Bundle in gen 9 randdubs (#11801)
---
data/random-battles/gen9/doubles-sets.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json
index bfbaada009..8de6b658cf 100644
--- a/data/random-battles/gen9/doubles-sets.json
+++ b/data/random-battles/gen9/doubles-sets.json
@@ -6698,7 +6698,7 @@
"level": 78,
"sets": [
{
- "role": "Doubles Bulky Attacker",
+ "role": "Doubles Wallbreaker",
"movepool": ["Encore", "Freeze-Dry", "Hydro Pump", "Icy Wind", "Protect"],
"abilities": ["Quark Drive"],
"teraTypes": ["Dragon", "Water"]
From 802c1c1d99ce6373c3c2509244ced31f13fe3982 Mon Sep 17 00:00:00 2001
From: livid washed <115855253+livid-washed@users.noreply.github.com>
Date: Mon, 9 Mar 2026 05:41:18 +1100
Subject: [PATCH 122/233] Add March 2026 Randomized Format Spotlight (#11792)
* Add March 2026 Randomized Format Spotlight
* Make message clearer ( I think)
* lint
* Move to gen9/teams.ts
* Move to gen9/teams.ts pt 2
* done
* lint
* Prevent mons from being harmed by Godly Gift stat passing
---
config/formats.ts | 12 +-
data/random-battles/gen9/teams.ts | 210 ++++++++++++++++++++++++++++++
2 files changed, 217 insertions(+), 5 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index d7a1671c93..89a8384568 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -488,11 +488,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
column: 2,
},
{
- name: "[Gen 9] BSS Factory (Bo3)",
- desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Stadium Singles.`,
- mod: 'gen9',
- team: 'randomBSSFactory',
- ruleset: ['Flat Rules', 'VGC Timer', 'Best of = 3'],
+ name: "[Gen 9] Godly Gift Random Battle",
+ desc: `Each Pokémon receives one base stat from the God in the first slot depending on its position in the team.`,
+ team: 'randomGodlyGift',
+ ruleset: ['[Gen 9] Random Battle', 'Godly Gift Mod', 'Team Preview'],
+ onBegin() {
+ this.add(`raw|In this format, the "God" in the first slot has "gifted" (shared) its base attack to the Pokémon in the second slot, defense to the one in the third slot, etc."`);
+ },
},
{
name: "[Gen 9] Linked",
diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts
index 4569c1dabc..266f9b65ec 100644
--- a/data/random-battles/gen9/teams.ts
+++ b/data/random-battles/gen9/teams.ts
@@ -1920,6 +1920,216 @@ export class RandomTeams {
return pokemon;
}
+ randomGodlyGiftTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.getSeed();
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = this.format.gameType !== 'singles';
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ // PotD stuff
+ const usePotD = global.Config && Config.potd && ruleTable.has('potd');
+ const potd = usePotD ? this.dex.species.get(Config.potd) : null;
+
+ const baseFormes: { [k: string]: number } = {};
+
+ const typeCount: { [k: string]: number } = {};
+ const typeComboCount: { [k: string]: number } = {};
+ const typeWeaknesses: { [k: string]: number } = {};
+ const typeDoubleWeaknesses: { [k: string]: number } = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = isDoubles ? Object.keys(this.randomDoublesSets) : Object.keys(this.randomSets);
+ // God Pokemon are those with at least 510 BST, not including HP
+ const godPokemonList = pokemonList.filter(poke => {
+ const baseStats = this.dex.species.get(poke).baseStats;
+ return baseStats.atk + baseStats.def + baseStats.spa + baseStats.spd + baseStats.spe >= 510;
+ });
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+ const [godPokemonPool, godBaseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, godPokemonList);
+
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ let baseSpecies, species;
+ // Generate a God Pokemon in the lead slot
+ if (pokemon.length === 0) {
+ baseSpecies = this.sampleNoReplace(godBaseSpeciesPool);
+ species = this.dex.species.get(this.sample(godPokemonPool[baseSpecies]));
+ } else {
+ baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+
+ // Ensure that the species isn't harmed by Godly Gift stat passing
+ if (pokemon.length < 6) {
+ const s: StatID[] = ["hp", "atk", "def", "spa", "spd", "spe"];
+ const passedStatName = s[pokemon.length];
+ const passedStat = (this.dex.species.get(pokemon[0].speciesId).baseStats[passedStatName]);
+ // If Deoxys-Attack is the god, just make sure the def/spd stat is <= 50
+ if (Math.max(passedStat, 50) < species.baseStats[passedStatName]) continue;
+ }
+ }
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already
+ if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon, isDoubles)) continue;
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+
+ // The Pokemon of the Day
+ if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
+
+ const 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();
From 8539330f7ed426b63e436459d6b2c14081ddd75d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 8 Mar 2026 18:41:35 +0000
Subject: [PATCH 123/233] National Dex: Re-ban Zamazenta after suspect test
(#11795)
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index ccaea84c80..922c5c0320 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -5209,7 +5209,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
zamazentacrowned: {
tier: "Uber",
doublesTier: "DUber",
- natDexTier: "OU",
+ natDexTier: "Uber",
},
eternatus: {
tier: "Uber",
From 3f071d4b8ac9b56d98b49ece80b49cda254b5a1b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 8 Mar 2026 18:42:16 +0000
Subject: [PATCH 124/233] Add and use the Standard AG ruleset in previous
generations (#11796)
* Add and use the Standard AG ruleset in previous generations
* Fix gen1 and gen1stadium
* Fix Gen 1 again
---
config/formats.ts | 8 ++++----
data/mods/gen1/rulesets.ts | 11 ++++++++++-
data/mods/gen1jpn/rulesets.ts | 5 ++++-
data/mods/gen1stadium/rulesets.ts | 11 ++++++++++-
data/mods/gen2/rulesets.ts | 5 ++++-
data/mods/gen2stadium2/rulesets.ts | 11 ++++++++++-
data/mods/gen3/rulesets.ts | 5 ++++-
data/mods/gen4/rulesets.ts | 11 ++++++++++-
data/mods/gen5/rulesets.ts | 3 ++-
data/mods/gen7/rulesets.ts | 10 ++++++++--
data/mods/gen7letsgo/rulesets.ts | 10 ++++++++--
data/mods/gen8/rulesets.ts | 9 ++++++---
12 files changed, 80 insertions(+), 19 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 89a8384568..da45051510 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -4300,7 +4300,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 8] Anything Goes",
mod: 'gen8',
searchShow: false,
- ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
+ ruleset: ['Standard AG'],
},
{
name: "[Gen 8] ZU",
@@ -4512,7 +4512,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 7] Anything Goes",
mod: 'gen7',
searchShow: false,
- ruleset: ['Obtainable', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause'],
+ ruleset: ['Standard AG'],
},
{
name: "[Gen 7] ZU",
@@ -4706,7 +4706,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 6] Anything Goes",
mod: 'gen6',
searchShow: false,
- ruleset: ['Obtainable', 'Team Preview', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: ['Standard AG'],
},
{
name: "[Gen 6] ZU",
@@ -5032,7 +5032,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 4] Anything Goes",
mod: 'gen4',
searchShow: false,
- ruleset: ['Obtainable', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: ['Standard AG'],
},
{
name: "[Gen 4] 1v1",
diff --git a/data/mods/gen1/rulesets.ts b/data/mods/gen1/rulesets.ts
index 6d246c9793..d6bfeaa805 100644
--- a/data/mods/gen1/rulesets.ts
+++ b/data/mods/gen1/rulesets.ts
@@ -1,8 +1,17 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standardag: {
+ inherit: true,
+ ruleset: [
+ 'Obtainable', 'Desync Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
+ ],
+ },
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
- ruleset: ['Obtainable', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
+ ],
banlist: ['Dig', 'Fly'],
},
'350cupmod': {
diff --git a/data/mods/gen1jpn/rulesets.ts b/data/mods/gen1jpn/rulesets.ts
index 29d433d8d3..201cc114e6 100644
--- a/data/mods/gen1jpn/rulesets.ts
+++ b/data/mods/gen1jpn/rulesets.ts
@@ -2,7 +2,10 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
- ruleset: ['Obtainable', 'Desync Clause Mod', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
+ ],
banlist: ['Dig', 'Fly'],
},
nc1997movelegality: {
diff --git a/data/mods/gen1stadium/rulesets.ts b/data/mods/gen1stadium/rulesets.ts
index 716eb00d5a..88053197e3 100644
--- a/data/mods/gen1stadium/rulesets.ts
+++ b/data/mods/gen1stadium/rulesets.ts
@@ -1,7 +1,16 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standardag: {
+ inherit: true,
+ ruleset: [
+ 'Obtainable', 'Exact HP Mod', 'Cancel Mod',
+ ],
+ },
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
- ruleset: ['Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Exact HP Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
+ ],
},
};
diff --git a/data/mods/gen2/rulesets.ts b/data/mods/gen2/rulesets.ts
index 72919d415c..ad992422e1 100644
--- a/data/mods/gen2/rulesets.ts
+++ b/data/mods/gen2/rulesets.ts
@@ -28,7 +28,10 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
- ruleset: ['Obtainable', 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ ],
banlist: [
'Hypnosis + Mean Look',
'Hypnosis + Spider Web',
diff --git a/data/mods/gen2stadium2/rulesets.ts b/data/mods/gen2stadium2/rulesets.ts
index 0bbab70192..0a6f65af5d 100644
--- a/data/mods/gen2stadium2/rulesets.ts
+++ b/data/mods/gen2stadium2/rulesets.ts
@@ -1,8 +1,17 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standardag: {
+ inherit: true,
+ ruleset: [
+ 'Obtainable', 'Team Preview', 'Exact HP Mod', 'Cancel Mod',
+ ],
+ },
standard: {
effectType: 'ValidatorRule',
name: 'Standard',
- ruleset: ['Obtainable', 'Team Preview', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Self-KO Clause', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Exact HP Mod', 'Cancel Mod', 'Stadium Items Clause'],
+ ruleset: [
+ 'Standard AG',
+ 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Self-KO Clause', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Stadium Items Clause',
+ ],
},
selfkoclause: {
effectType: 'Rule',
diff --git a/data/mods/gen3/rulesets.ts b/data/mods/gen3/rulesets.ts
index 1c6b949767..66f9ff2408 100644
--- a/data/mods/gen3/rulesets.ts
+++ b/data/mods/gen3/rulesets.ts
@@ -3,7 +3,10 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
effectType: 'ValidatorRule',
name: 'Standard',
desc: "The standard ruleset for all official Smogon singles tiers (Ubers, OU, etc.)",
- ruleset: ['Obtainable', 'Sleep Clause Mod', 'Switch Priority Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Switch Priority Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ ],
},
standarddraft: {
effectType: 'ValidatorRule',
diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts
index bbcb4232d2..941bd745da 100644
--- a/data/mods/gen4/rulesets.ts
+++ b/data/mods/gen4/rulesets.ts
@@ -1,7 +1,16 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standardag: {
+ inherit: true,
+ ruleset: [
+ 'Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
+ ],
+ },
standard: {
inherit: true,
- ruleset: ['Obtainable', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ ],
},
flatrules: {
inherit: true,
diff --git a/data/mods/gen5/rulesets.ts b/data/mods/gen5/rulesets.ts
index 09d83f7635..d32f7c2cae 100644
--- a/data/mods/gen5/rulesets.ts
+++ b/data/mods/gen5/rulesets.ts
@@ -2,7 +2,8 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standard: {
inherit: true,
ruleset: [
- 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'Standard AG',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
],
},
obtainablemoves: {
diff --git a/data/mods/gen7/rulesets.ts b/data/mods/gen7/rulesets.ts
index 7114fc638b..03d6318251 100644
--- a/data/mods/gen7/rulesets.ts
+++ b/data/mods/gen7/rulesets.ts
@@ -1,11 +1,17 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
standard: {
inherit: true,
- ruleset: ['Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ ],
},
standarddoubles: {
inherit: true,
- ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause',
+ ],
},
obtainablemoves: {
inherit: true,
diff --git a/data/mods/gen7letsgo/rulesets.ts b/data/mods/gen7letsgo/rulesets.ts
index 477ad861e6..d01a6d2f48 100644
--- a/data/mods/gen7letsgo/rulesets.ts
+++ b/data/mods/gen7letsgo/rulesets.ts
@@ -1,10 +1,16 @@
export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
standard: {
inherit: true,
- ruleset: ['LGPE Normal Rules', 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'LGPE Normal Rules', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Sleep Clause Mod',
+ ],
},
standarddoubles: {
inherit: true,
- ruleset: ['LGPE Normal Rules', 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'],
+ ruleset: [
+ 'Standard AG',
+ 'LGPE Normal Rules', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
+ ],
},
};
diff --git a/data/mods/gen8/rulesets.ts b/data/mods/gen8/rulesets.ts
index 866c2568da..b430474530 100644
--- a/data/mods/gen8/rulesets.ts
+++ b/data/mods/gen8/rulesets.ts
@@ -2,19 +2,22 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standard: {
inherit: true,
ruleset: [
- 'Obtainable', 'Team Preview', 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
],
},
standarddoubles: {
inherit: true,
ruleset: [
- 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'Standard AG',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause',
],
},
standardoms: {
inherit: true,
ruleset: [
- 'Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'Dynamax Clause', 'HP Percentage Mod', 'Cancel Mod', 'Overflow Stat Mod',
+ 'Standard AG',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'Overflow Stat Mod',
],
},
teampreview: {
From 7af1d0e48f6205d35c0f2066a6612fd97cd1a04d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 8 Mar 2026 18:46:22 +0000
Subject: [PATCH 125/233] Simplify Gen 3 Colosseum implementation (#11799)
* Simplify Gen 3 Colosseum implementation
* Remove formats-data
* Re-add
---
config/formats.ts | 3 +--
data/mods/gen3colosseum/formats-data.ts | 11 +++++++++++
2 files changed, 12 insertions(+), 2 deletions(-)
create mode 100644 data/mods/gen3colosseum/formats-data.ts
diff --git a/config/formats.ts b/config/formats.ts
index da45051510..de8e9db217 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5264,8 +5264,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 4', 'Exact HP Mod', 'Item Clause = 1', 'Open Team Sheets',
],
- banlist: ['Soul Dew', 'Deoxys-Defense', 'Deoxys-Attack', 'Deoxys-Speed', 'Restricted Legendary', 'Mythical'],
- unbanlist: ['Latios', 'Latias', 'Wobbuffet', 'Wynaut'],
+ banlist: ['Restricted Legendary', 'Mythical', 'Soul Dew'],
bestOfDefault: true,
onBegin() {
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect, you will lose the battle');
diff --git a/data/mods/gen3colosseum/formats-data.ts b/data/mods/gen3colosseum/formats-data.ts
new file mode 100644
index 0000000000..8d3187d413
--- /dev/null
+++ b/data/mods/gen3colosseum/formats-data.ts
@@ -0,0 +1,11 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ deoxysattack: {
+ isNonstandard: "Past",
+ },
+ deoxysdefense: {
+ isNonstandard: "Past",
+ },
+ deoxysspeed: {
+ isNonstandard: "Past",
+ },
+};
From b809f86f099c135f2bdb98fca71ecf720573aaf6 Mon Sep 17 00:00:00 2001
From: Marty-D
Date: Sun, 8 Mar 2026 19:52:29 -0400
Subject: [PATCH 126/233] Add new avatars
---
server/chat-commands/avatars.tsx | 3 +++
1 file changed, 3 insertions(+)
diff --git a/server/chat-commands/avatars.tsx b/server/chat-commands/avatars.tsx
index 2e0692f31d..48a4e0db80 100644
--- a/server/chat-commands/avatars.tsx
+++ b/server/chat-commands/avatars.tsx
@@ -554,6 +554,7 @@ const OFFICIAL_AVATARS_BRUMIRAGE = new Set([
'oleana', 'opal', 'peony', 'pesselle', 'phoebe-gen6', 'piers', 'raihan', 'rei', 'rose', 'sabi', 'sada-ai',
'sanqua', 'shielbert', 'sonia', 'sonia-professor', 'sordward', 'sordward-shielbert', 'tateandliza-gen6',
'turo-ai', 'victor', 'victor-dojo', 'volo', 'yellgrunt', 'yellgruntf', 'zisu', 'miku-flying', 'miku-ground',
+ 'jacinthe', 'rainbowrocketgrunt', 'rainbowrocketgruntf',
]);
const OFFICIAL_AVATARS_ZACWEAVILE = new Set([
@@ -644,6 +645,8 @@ const OFFICIAL_AVATARS_KYLEDOVE = new Set([
'baoba', 'bill', 'daisy', 'harmony', 'paxton', 'trace', 'az-lza', 'brendan-masters2', 'bugsy-masters',
'cynthia-masters4', 'elesa-masters3', 'elio-masters', 'erika-masters3', 'iono-masters', 'iono-masters2',
'lance-masters2', 'marley-masters', 'may-masters4', 'morty-masters3', 'selene-masters2', 'shauntal-masters',
+ 'ansha', 'ansha-cook', 'canari', 'corbeau', 'grisham', 'gwynn', 'ivor', 'lebanne', 'phillipe', 'sbcmember',
+ 'tarragon', 'taunie', 'urbain',
]);
const OFFICIAL_AVATARS_HYOOPPA = new Set([
From cc68e3e967cdcd3d8a76f4c8a6f4b011965e5a83 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 9 Mar 2026 12:00:37 -0600
Subject: [PATCH 127/233] Linked: Fix modified-priority moves in a link
---
data/mods/linked/moves.ts | 2 +-
data/mods/linked/scripts.ts | 20 +++++++++++---------
sim/global-types.ts | 2 +-
3 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index eb3fce6e79..1cdc9bc522 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -244,7 +244,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.disableMove(lastMove.id);
// @ts-expect-error
- const { index: linkIndex, link: linkedMoves } = pokemon.queryLinkMove(lastMove);
+ const { linkIndex, linkedMoves } = pokemon.queryLinkMove(lastMove);
if (linkIndex >= 0) pokemon.disableMove(linkedMoves[1 - linkIndex].id);
},
},
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index ae561390f9..c8a6c186ba 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -36,19 +36,18 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
}
- // 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;
// Linked mod
- const { index: linkIndex, link: linkedMoves } = action.pokemon.queryLinkMove(action.move);
+ const { linkIndex, linkedMoves } = action.pokemon.queryLinkMove(action.move);
if (linkIndex >= 0 && action.pokemon.getCanLinkMove(action.move)) {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
- let thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
+ let thisPriority = this.dex.moves.get(linkedActions[linkIndex].id).priority;
+ thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, thisPriority);
thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], thisPriority);
- let thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, altMove.priority);
+ let thatPriority = this.dex.moves.get(altMove.id).priority;
+ thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, thatPriority);
thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, thatPriority);
- priority = Math.min(thisPriority, thatPriority);
+ const priority = Math.min(thisPriority, thatPriority);
action.priority = priority + action.fractionalPriority;
if (this.gen > 5) {
// Gen 6+: Quick Guard blocks moves with artificially enhanced priority.
@@ -57,6 +56,9 @@ export const Scripts: ModdedBattleScriptsData = {
altMove.priority = priority;
}
} else {
+ // 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;
priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority);
action.priority = priority + action.fractionalPriority;
@@ -722,8 +724,8 @@ export const Scripts: ModdedBattleScriptsData = {
queryLinkMove(move, ignoreDisabled) {
// @ts-expect-error modded
const linkedMoves: [ActiveMove, ActiveMove] = this.getLinkedMoves!(ignoreDisabled);
- if (!linkedMoves.length) return { index: -1, link: linkedMoves };
- return { index: linkedMoves.findIndex(x => x.id === move.id), link: linkedMoves };
+ if (!linkedMoves.length) return { linkIndex: -1, linkedMoves };
+ return { linkIndex: linkedMoves.findIndex(x => x.id === move.id), linkedMoves };
},
},
};
diff --git a/sim/global-types.ts b/sim/global-types.ts
index 0d9fb3ddab..8eea0b7c38 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -335,7 +335,7 @@ interface ModdedBattlePokemon {
getCanLinkMove?: (this: Pokemon, move: ActiveMove) => boolean;
queryLinkMove?: (
this: Pokemon, move: ActiveMove, ignoreDisabled?: boolean
- ) => { index: number, link: [ActiveMove, ActiveMove] };
+ ) => { linkIndex: number, linkedMoves: [ActiveMove, ActiveMove] };
}
interface ModdedBattleQueue extends Partial {
From 8d87bb5a9c159264aa45234efc5d2a10259ff70e Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 9 Mar 2026 12:03:23 -0600
Subject: [PATCH 128/233] Fix typo
---
data/mods/linked/scripts.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index c8a6c186ba..a4f7a17b02 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -42,7 +42,7 @@ export const Scripts: ModdedBattleScriptsData = {
const linkedActions = action.linked || linkedMoves;
const altMove = linkedActions[1 - linkIndex];
let thisPriority = this.dex.moves.get(linkedActions[linkIndex].id).priority;
- thisPriority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, thisPriority);
+ thisPriority = this.singleEvent('ModifyPriority', linkedActions[linkIndex], null, action.pokemon, null, null, thisPriority);
thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], thisPriority);
let thatPriority = this.dex.moves.get(altMove.id).priority;
thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, thatPriority);
From e5c7fe52ed8d158aeee97f147e0ce62a8937e4b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Mon, 9 Mar 2026 18:21:04 +0000
Subject: [PATCH 129/233] Orre Colosseum: Allow Deoxys formes (#11811)
---
data/mods/gen3colosseum/formats-data.ts | 11 -----------
1 file changed, 11 deletions(-)
delete mode 100644 data/mods/gen3colosseum/formats-data.ts
diff --git a/data/mods/gen3colosseum/formats-data.ts b/data/mods/gen3colosseum/formats-data.ts
deleted file mode 100644
index 8d3187d413..0000000000
--- a/data/mods/gen3colosseum/formats-data.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
- deoxysattack: {
- isNonstandard: "Past",
- },
- deoxysdefense: {
- isNonstandard: "Past",
- },
- deoxysspeed: {
- isNonstandard: "Past",
- },
-};
From c6504627ecacb39b5888498c1639440a09dc868b Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 9 Mar 2026 12:28:27 -0600
Subject: [PATCH 130/233] Appease linter
---
data/mods/linked/scripts.ts | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/data/mods/linked/scripts.ts b/data/mods/linked/scripts.ts
index a4f7a17b02..30770f2651 100644
--- a/data/mods/linked/scripts.ts
+++ b/data/mods/linked/scripts.ts
@@ -40,10 +40,11 @@ export const Scripts: ModdedBattleScriptsData = {
const { linkIndex, linkedMoves } = action.pokemon.queryLinkMove(action.move);
if (linkIndex >= 0 && action.pokemon.getCanLinkMove(action.move)) {
const linkedActions = action.linked || linkedMoves;
+ const originalMove = linkedActions[linkIndex];
const altMove = linkedActions[1 - linkIndex];
- let thisPriority = this.dex.moves.get(linkedActions[linkIndex].id).priority;
- thisPriority = this.singleEvent('ModifyPriority', linkedActions[linkIndex], null, action.pokemon, null, null, thisPriority);
- thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, linkedActions[linkIndex], thisPriority);
+ let thisPriority = this.dex.moves.get(originalMove.id).priority;
+ thisPriority = this.singleEvent('ModifyPriority', originalMove, null, action.pokemon, null, null, thisPriority);
+ thisPriority = this.runEvent('ModifyPriority', action.pokemon, null, originalMove, thisPriority);
let thatPriority = this.dex.moves.get(altMove.id).priority;
thatPriority = this.singleEvent('ModifyPriority', altMove, null, action.pokemon, null, null, thatPriority);
thatPriority = this.runEvent('ModifyPriority', action.pokemon, null, altMove, thatPriority);
@@ -52,7 +53,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.gen > 5) {
// Gen 6+: Quick Guard blocks moves with artificially enhanced priority.
// This also applies to Psychic Terrain.
- linkedActions[linkIndex].priority = priority;
+ originalMove.priority = priority;
altMove.priority = priority;
}
} else {
From 03fc6de00ee547d4053688edfd8700c8fe41cdcf Mon Sep 17 00:00:00 2001
From: Leonard Craft III
Date: Fri, 13 Mar 2026 12:44:38 -0500
Subject: [PATCH 131/233] VGC: Update Regulation I ladders
https://x.com/playpokemon/status/2032502235205366020
---
config/formats.ts | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index de8e9db217..c42249813d 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -232,14 +232,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets', 'Limit One Restricted'],
restricted: ['Restricted Legendary'],
},
- {
- name: "[Gen 9] VGC 2026 Reg I", // Change back to 2025 after removing the ladder
- mod: 'gen9',
- gameType: 'doubles',
- bestOfDefault: true,
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Limit Two Restricted'],
- restricted: ['Restricted Legendary'],
- },
{
name: "[Gen 9] VGC 2026 Reg F",
@@ -255,6 +247,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [
gameType: 'doubles',
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'],
},
+ {
+ name: "[Gen 9] VGC 2026 Reg I", // Change back to 2025 after removing the ladder
+ mod: 'gen9',
+ gameType: 'doubles',
+ bestOfDefault: true,
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets', 'Limit Two Restricted'],
+ restricted: ['Restricted Legendary'],
+ },
+ {
+ name: "[Gen 9] VGC 2026 Reg I (Bo3)",
+ mod: 'gen9',
+ gameType: 'doubles',
+ ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3', 'Limit Two Restricted'],
+ restricted: ['Restricted Legendary'],
+ },
{
name: "[Gen 9] Doubles Custom Game",
mod: 'gen9',
From 4a736e5af1b9a955357602c1c533cbd5fc7b034a Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 12:54:33 -0600
Subject: [PATCH 132/233] Pokebilities: Update Neutralizing Gas to modern code
---
data/mods/pokebilities/abilities.ts | 28 +++++++++++++++++++++++++++-
data/mods/pokebilities/scripts.ts | 29 ++++++++++++++---------------
2 files changed, 41 insertions(+), 16 deletions(-)
diff --git a/data/mods/pokebilities/abilities.ts b/data/mods/pokebilities/abilities.ts
index 6b8574d196..33b7a31fbe 100644
--- a/data/mods/pokebilities/abilities.ts
+++ b/data/mods/pokebilities/abilities.ts
@@ -41,14 +41,24 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onSwitchIn(pokemon) {
this.add('-ability', pokemon, 'Neutralizing Gas');
pokemon.abilityState.ending = false;
+ const strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];
// Remove setter's innates before the ability starts
- if (pokemon.m.innates) {
+ if (pokemon.m.innates && !pokemon.hasItem('Ability Shield')) {
for (const innate of pokemon.m.innates) {
if (this.dex.abilities.get(innate).flags['cantsuppress'] || innate === 'neutralizinggas') continue;
pokemon.removeVolatile('ability:' + innate);
}
}
for (const target of this.getAllActive()) {
+ if (target === pokemon) continue;
+ if (target.hasItem('Ability Shield')) {
+ this.add('-block', target, 'item: Ability Shield');
+ continue;
+ }
+ // Can't suppress a Tatsugiri inside of Dondozo already
+ if (target.volatiles['commanding']) {
+ continue;
+ }
if (target.illusion) {
this.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas');
}
@@ -56,6 +66,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
delete target.volatiles['slowstart'];
this.add('-end', target, 'Slow Start', '[silent]');
}
+ if (strongWeathers.includes(target.getAbility().id)) {
+ this.singleEvent('End', this.dex.abilities.get(target.getAbility().id), target.abilityState, target, pokemon, 'neutralizinggas');
+ }
if (target.m.innates) {
for (const innate of target.m.innates) {
if (this.dex.abilities.get(innate).flags['cantsuppress']) continue;
@@ -65,6 +78,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
}
},
onEnd(source) {
+ if (source.transformed) return;
+ for (const pokemon of this.getAllActive()) {
+ if (pokemon !== source && pokemon.hasAbility('Neutralizing Gas')) {
+ return;
+ }
+ }
this.add('-end', source, 'ability: Neutralizing Gas');
// FIXME this happens before the pokemon switches out, should be the opposite order.
@@ -79,12 +98,19 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
this.speedSort(sortedActive);
for (const pokemon of sortedActive) {
if (pokemon !== source) {
+ if (pokemon.getAbility().flags['cantsuppress']) continue; // does not interact with e.g Ice Face, Zen Mode
+ if (pokemon.hasItem('abilityshield')) continue; // don't restart abilities that weren't suppressed
+
// Will be suppressed by Pokemon#ignoringAbility if needed
this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon);
+ if (pokemon.ability === "gluttony") {
+ pokemon.abilityState.gluttony = false;
+ }
if (pokemon.m.innates) {
for (const innate of pokemon.m.innates) {
// permanent abilities
if (pokemon.volatiles['ability:' + innate]) continue;
+ if (innate === "gluttony") pokemon.abilityState.gluttony = false;
pokemon.addVolatile('ability:' + innate, pokemon);
}
}
diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts
index 45da0faf92..4996715dc0 100644
--- a/data/mods/pokebilities/scripts.ts
+++ b/data/mods/pokebilities/scripts.ts
@@ -14,27 +14,26 @@ export const Scripts: ModdedBattleScriptsData = {
},
pokemon: {
ignoringAbility() {
+ if (this.battle.gen >= 5 && !this.isActive) return true;
+
+ // Certain Abilities won't activate while Transformed, even if they ordinarily couldn't be suppressed (e.g. Disguise)
+ if (this.getAbility().flags['notransform'] && this.transformed) return true;
+ if (this.getAbility().flags['cantsuppress']) return false;
+ if (this.volatiles['gastroacid']) return true;
+
// Check if any active pokemon have the ability Neutralizing Gas
- let neutralizinggas = false;
+ if (this.hasItem('Ability Shield') || this.m.innates?.includes('neutralizinggas') ||
+ this.ability === ('neutralizinggas' as ID)) return 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.m.innates?.some((k: string) => k === 'neutralizinggas')) &&
- !pokemon.volatiles['gastroacid'] && !pokemon.abilityState.ending
- ) {
- neutralizinggas = true;
- break;
+ if ((pokemon.m.innates?.includes('neutralizinggas') || pokemon.ability === ('neutralizinggas' as ID)) &&
+ !pokemon.volatiles['gastroacid'] && !pokemon.transformed &&
+ !pokemon.abilityState.ending && !this.volatiles['commanding']) {
+ return true;
}
}
- return !!(
- (this.battle.gen >= 5 && !this.isActive) ||
- ((this.volatiles['gastroacid'] ||
- (neutralizinggas && (this.ability !== ('neutralizinggas' as ID) ||
- this.m.innates?.some((k: string) => k === 'neutralizinggas'))
- )) && !this.getAbility().flags['cantsuppress']
- )
- );
+ return false;
},
hasAbility(ability) {
if (this.ignoringAbility()) return false;
From 834cca8b8ea2068e0a7543ada77eee7389baeb05 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 12:57:30 -0600
Subject: [PATCH 133/233] Pokebilities AAA: Update bans
---
config/formats.ts | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index c42249813d..8ad29c81d0 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -549,20 +549,22 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
banlist: [
'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
- 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dondozo', 'Dragapult',
- 'Dragonite', 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hawlucha',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite',
+ 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', 'Hawlucha',
'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin',
'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon',
- 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zapdos-Galar', 'Zekrom', 'Zoroark-Hisui',
- 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim',
- 'Drought + Chlorophyll', 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive',
- 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
- 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
+ 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap',
+ 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Shadow Tag',
+ 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll',
+ 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive',
+ 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush',
+ 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
],
restricted: [
'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Neutralizing Gas',
- 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Simple', 'Speed Boost', 'Stakeout', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard',
+ 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris',
+ 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard',
],
onValidateSet(set) {
const species = this.dex.species.get(set.species);
From 400a7c54bcaf50c424bcab7ebd260722c9c20d42 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 12:57:59 -0600
Subject: [PATCH 134/233] Shared Power: Ban Sturdy
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 8ad29c81d0..cd90e8f962 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -831,15 +831,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Conkeldurr', 'Deoxys-Attack', 'Eternatus', 'Greninja', 'Kingambit', 'Kyogre', 'Kyurem-Black',
'Kyurem-White', 'Koraidon', 'Lunala', 'Magearna', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin', 'Rayquaza',
'Regieleki', 'Reshiram', 'Rillaboom', 'Scizor', 'Shaymin-Sky', 'Spectrier', 'Sneasler', 'Zacian', 'Zacian-Crowned', 'Zamazenta', 'Zamazenta-Crowned', 'Zekrom',
- 'Arena Trap', 'Moody', 'Neutralizing Gas', 'Shadow Tag', 'Speed Boost', 'Stench', 'Swift Swim', 'King\'s Rock', 'Leppa Berry', 'Razor Fang', 'Starf Berry',
+ 'Arena Trap', 'Moody', 'Neutralizing Gas', 'Shadow Tag', 'Speed Boost', 'Stench', 'Sturdy', 'Swift Swim', 'King\'s Rock', 'Leppa Berry', 'Razor Fang', 'Starf Berry',
'Baton Pass', 'Extreme Speed', 'Last Respects',
],
unbanlist: ['Arceus-Bug', 'Arceus-Dragon', 'Arceus-Fire', 'Arceus-Ice'],
restricted: [
'Armor Tail', 'Chlorophyll', 'Comatose', 'Contrary', 'Dazzling', 'Fur Coat', 'Gale Wings', 'Good as Gold', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter',
'Magic Bounce', 'Magic Guard', 'Magnet Pull', 'Mold Breaker', 'Multiscale', 'Poison Heal', 'Prankster', 'Protosynthesis', 'Psychic Surge', 'Pure Power',
- 'Quark Drive', 'Queenly Majesty', 'Quick Draw', 'Quick Feet', 'Regenerator', 'Sand Rush', 'Simple', 'Slush Rush', 'Stakeout', 'Stamina', 'Sturdy',
- 'Surge Surfer', 'Technician', 'Tinted Lens', 'Triage', 'Unaware', 'Unburden', 'Water Bubble',
+ 'Quark Drive', 'Queenly Majesty', 'Quick Draw', 'Quick Feet', 'Regenerator', 'Sand Rush', 'Simple', 'Slush Rush', 'Stakeout', 'Stamina', 'Surge Surfer',
+ 'Technician', 'Tinted Lens', 'Triage', 'Unaware', 'Unburden', 'Water Bubble',
],
onValidateRule() {
if (this.format.gameType !== 'singles') {
From c4d659391a409b75f6d7e51c4916308d1ab83369 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 12:59:42 -0600
Subject: [PATCH 135/233] STABmons: Update bans
---
config/formats.ts | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index cd90e8f962..912105c19a 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -881,14 +881,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Arceus', 'Azumarill', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult',
'Dragonite', 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Gyarados', 'Ho-Oh', 'Iron Bundle',
'Komala', 'Koraidon', 'Kyogre', 'Kyurem-Base', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon',
- 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Rayquaza', 'Reshiram', 'Roaring Moon',
- 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom',
- 'Zoroark-Hisui', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', 'Palkia-Origin', 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram',
+ 'Roaring Moon', 'Shaymin-Sky', 'Solgaleo', 'Spectrier', 'Terapagos', 'Ting-Lu', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike',
+ 'Walking Wake', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'King\'s Rock', 'Razor Fang',
+ 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
'Astral Barrage', 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Combat Torque', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Esper Wing', 'Extreme Speed', 'Fillet Away',
- 'Final Gambit', 'Flower Trick', 'Gigaton Hammer', 'No Retreat', 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Torch Song', 'Triple Arrows', 'V-create',
- 'Victory Dance', 'Water Shuriken', 'Wicked Blow', 'Wicked Torque',
+ 'Final Gambit', 'Flower Trick', 'Gigaton Hammer', 'No Retreat', 'Rage Fist', 'Revival Blessing', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Torch Song', 'Triple Arrows',
+ 'V-create', 'Victory Dance', 'Water Shuriken', 'Wicked Blow', 'Wicked Torque',
],
},
{
From 2742d9dd47ac098dcf956986f66bac74ccec1488 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 13:23:06 -0600
Subject: [PATCH 136/233] Remove unused mods
---
data/mods/gen5pokebilities/abilities.ts | 117 ----------
data/mods/gen5pokebilities/moves.ts | 17 --
data/mods/gen5pokebilities/scripts.ts | 215 ------------------
data/mods/gen7pokebilities/abilities.ts | 117 ----------
data/mods/gen7pokebilities/moves.ts | 17 --
data/mods/gen7pokebilities/scripts.ts | 215 ------------------
data/random-battles/gen5pokebilities/teams.ts | 5 -
7 files changed, 703 deletions(-)
delete mode 100644 data/mods/gen5pokebilities/abilities.ts
delete mode 100644 data/mods/gen5pokebilities/moves.ts
delete mode 100644 data/mods/gen5pokebilities/scripts.ts
delete mode 100644 data/mods/gen7pokebilities/abilities.ts
delete mode 100644 data/mods/gen7pokebilities/moves.ts
delete mode 100644 data/mods/gen7pokebilities/scripts.ts
delete mode 100644 data/random-battles/gen5pokebilities/teams.ts
diff --git a/data/mods/gen5pokebilities/abilities.ts b/data/mods/gen5pokebilities/abilities.ts
deleted file mode 100644
index a56b598724..0000000000
--- a/data/mods/gen5pokebilities/abilities.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-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.flags['cantsuppress'] || sourceAbility.id === 'mummy') {
- return;
- }
- if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
- const oldAbility = source.setAbility('mummy', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
- }
- } else {
- const possibleAbilities = [source.ability, ...(source.m.innates || [])]
- .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);
- if (abil === source.ability) {
- const oldAbility = source.setAbility('mummy', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
- } else {
- source.removeVolatile('ability:' + abil);
- source.addVolatile('ability:mummy', source);
- if (abil) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(abil).name, `[of] ${source}`);
- }
- }
- }
- }
- },
- },
- powerofalchemy: {
- inherit: true,
- onAllyFaint(ally) {
- const pokemon = this.effectState.target;
- if (!pokemon.hp) return;
- const isAbility = pokemon.ability === 'powerofalchemy';
- let possibleAbilities = [ally.ability];
- if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .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}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:powerofalchemy");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- },
- },
- receiver: {
- inherit: true,
- onAllyFaint(ally) {
- const pokemon = this.effectState.target;
- if (!pokemon.hp) return;
- const isAbility = pokemon.ability === 'receiver';
- let possibleAbilities = [ally.ability];
- if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .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}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:receiver");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- },
- },
- trace: {
- inherit: true,
- onUpdate(pokemon) {
- if (!this.effectState.seek) return;
- const isAbility = pokemon.ability === 'trace';
- const possibleTargets: Pokemon[] = [];
- for (const target of pokemon.side.foe.active) {
- if (target && !target.fainted) {
- possibleTargets.push(target);
- }
- }
- while (possibleTargets.length) {
- const rand = this.random(possibleTargets.length);
- const target = possibleTargets[rand];
- let possibleAbilities = [target.ability];
- if (target.m.innates) possibleAbilities.push(...target.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .filter(val => !this.dex.abilities.get(val).flags['notrace'] && !additionalBannedAbilities.includes(val));
- if (!possibleAbilities.length) {
- possibleTargets.splice(rand, 1);
- continue;
- }
- const ability = this.dex.abilities.get(this.sample(possibleAbilities));
- this.add('-ability', pokemon, ability, '[from] ability: Trace', `[of] ${target}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:trace");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- return;
- }
- },
- },
-};
diff --git a/data/mods/gen5pokebilities/moves.ts b/data/mods/gen5pokebilities/moves.ts
deleted file mode 100644
index c473cb8bba..0000000000
--- a/data/mods/gen5pokebilities/moves.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
- 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');
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- pokemon.removeVolatile("ability" + innate);
- }
- }
- },
- },
- },
-};
diff --git a/data/mods/gen5pokebilities/scripts.ts b/data/mods/gen5pokebilities/scripts.ts
deleted file mode 100644
index 1cf7fbee15..0000000000
--- a/data/mods/gen5pokebilities/scripts.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- inherit: 'gen5',
- field: {
- suppressingWeather() {
- for (const pokemon of this.battle.getAllActive()) {
- if (pokemon && !pokemon.fainted && !pokemon.ignoringAbility() &&
- (pokemon.getAbility().suppressWeather ||
- pokemon.m.innates?.some((k: string) => this.battle.dex.abilities.get(k).suppressWeather))) {
- return true;
- }
- }
- return false;
- },
- },
- pokemon: {
- 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.m.innates?.some((k: string) => k === '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.m.innates?.some((k: string) => k === 'neutralizinggas'))
- )) && !this.getAbility().flags['cantsuppress']
- )
- );
- },
- hasAbility(ability) {
- if (this.ignoringAbility()) return false;
- if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
- ability = this.battle.toID(ability);
- return this.ability === ability || !!this.volatiles['ability:' + ability];
- },
- transformInto(pokemon, effect) {
- 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') {
- return false;
- }
-
- if (!this.setSpecies(species, effect, true)) return false;
-
- this.transformed = true;
- this.weighthg = pokemon.weighthg;
-
- 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;
- this.apparentType = pokemon.apparentType;
-
- let statName: StatIDExceptHP;
- for (statName in this.storedStats) {
- this.storedStats[statName] = pokemon.storedStats[statName];
- 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 (moveSlot.id === 'hiddenpower') {
- moveName = 'Hidden Power ' + this.hpType;
- }
- this.moveSlots.push({
- move: moveName,
- id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
- target: moveSlot.target,
- disabled: false,
- used: false,
- virtual: true,
- });
- }
- let boostName: BoostID;
- for (boostName in pokemon.boosts) {
- this.boosts[boostName] = pokemon.boosts[boostName];
- }
- if (this.battle.gen >= 6) {
- // we need to be sure to remove all the overlapping crit volatiles before trying to add any of them
- const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
- for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
- for (const volatile of volatilesToCopy) {
- if (pokemon.volatiles[volatile]) {
- this.addVolatile(volatile);
- if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
- if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
- }
- }
- }
- if (effect) {
- this.battle.add('-transform', this, pokemon, '[from] ' + effect.fullname);
- } else {
- this.battle.add('-transform', this, pokemon);
- }
- if (this.terastallized && this.terastallized !== this.apparentType) {
- this.battle.add('-start', this, 'typechange', this.terastallized, '[silent]');
- this.apparentType = this.terastallized;
- }
- if (this.battle.gen > 2) {
- this.setAbility(pokemon.ability, this, null, true);
- if (this.m.innates) {
- for (const innate of this.m.innates) {
- this.removeVolatile('ability:' + innate);
- }
- }
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- this.addVolatile('ability:' + innate, this);
- }
- }
- }
-
- // Change formes based on held items (for Transform)
- // Only ever relevant in Generation 4 since Generation 3 didn't have item-based forme changes
- if (this.battle.gen === 4) {
- if (this.species.num === 487) {
- // Giratina formes
- if (this.species.name === 'Giratina' && this.item === 'griseousorb') {
- this.formeChange('Giratina-Origin');
- } else if (this.species.name === 'Giratina-Origin' && this.item !== 'griseousorb') {
- this.formeChange('Giratina');
- }
- }
- if (this.species.num === 493) {
- // Arceus formes
- const item = this.getItem();
- const targetForme = (item?.onPlate ? 'Arceus-' + item.onPlate : 'Arceus');
- if (this.species.name !== targetForme) {
- this.formeChange(targetForme);
- }
- }
- }
-
- return true;
- },
- /**
- * Changes this Pokemon's forme to match the given speciesId (or species).
- * This function handles all changes to stats, ability, type, species, etc.
- * as well as sending all relevant messages sent to the client.
- */
- formeChange(speciesId, source, isPermanent, message) {
- if (!source) source = this.battle.effect;
-
- const rawSpecies = this.battle.dex.species.get(speciesId);
-
- const species = this.setSpecies(rawSpecies, source);
- if (!species) return false;
-
- if (this.battle.gen <= 2) return true;
-
- // The species the opponent sees
- const apparentSpecies =
- this.illusion ? this.illusion.species.name : species.baseSpecies;
- if (isPermanent) {
- this.baseSpecies = rawSpecies;
- this.details = this.getUpdatedDetails();
- 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
- } else if (source.isPrimalOrb) {
- if (this.illusion) {
- this.ability = '';
- this.battle.add('-primal', this.illusion);
- } else {
- this.battle.add('-primal', this);
- }
- } else {
- this.battle.add('-mega', this, apparentSpecies, species.requiredItem);
- this.moveThisTurnResult = true; // Mega Evolution counts as an action for Truant
- }
- } else if (source.effectType === 'Status') {
- // Shaymin-Sky -> Shaymin
- this.battle.add('-formechange', this, species.name, message);
- }
- } else {
- if (source.effectType === 'Ability') {
- this.battle.add('-formechange', this, species.name, message, `[from] ability: ${source.name}`);
- } else {
- this.battle.add('-formechange', this, this.illusion ? this.illusion.species.name : species.name, message);
- }
- }
- if (isPermanent && !['disguise', 'iceface', 'ability:disguise', 'ability:iceface'].includes(source.id)) {
- if (this.illusion) {
- this.ability = ''; // Don't allow Illusion to wear off
- }
- this.setAbility(species.abilities['0'], null, null, true);
- this.baseAbility = this.ability;
- }
- if (this.terastallized && this.terastallized !== this.apparentType) {
- this.battle.add('-start', this, 'typechange', this.terastallized, '[silent]');
- this.apparentType = this.terastallized;
- }
- return true;
- },
- },
-};
diff --git a/data/mods/gen7pokebilities/abilities.ts b/data/mods/gen7pokebilities/abilities.ts
deleted file mode 100644
index a56b598724..0000000000
--- a/data/mods/gen7pokebilities/abilities.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-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.flags['cantsuppress'] || sourceAbility.id === 'mummy') {
- return;
- }
- if (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {
- const oldAbility = source.setAbility('mummy', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
- }
- } else {
- const possibleAbilities = [source.ability, ...(source.m.innates || [])]
- .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);
- if (abil === source.ability) {
- const oldAbility = source.setAbility('mummy', target);
- if (oldAbility) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, `[of] ${source}`);
- }
- } else {
- source.removeVolatile('ability:' + abil);
- source.addVolatile('ability:mummy', source);
- if (abil) {
- this.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(abil).name, `[of] ${source}`);
- }
- }
- }
- }
- },
- },
- powerofalchemy: {
- inherit: true,
- onAllyFaint(ally) {
- const pokemon = this.effectState.target;
- if (!pokemon.hp) return;
- const isAbility = pokemon.ability === 'powerofalchemy';
- let possibleAbilities = [ally.ability];
- if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .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}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:powerofalchemy");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- },
- },
- receiver: {
- inherit: true,
- onAllyFaint(ally) {
- const pokemon = this.effectState.target;
- if (!pokemon.hp) return;
- const isAbility = pokemon.ability === 'receiver';
- let possibleAbilities = [ally.ability];
- if (ally.m.innates) possibleAbilities.push(...ally.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .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}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:receiver");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- },
- },
- trace: {
- inherit: true,
- onUpdate(pokemon) {
- if (!this.effectState.seek) return;
- const isAbility = pokemon.ability === 'trace';
- const possibleTargets: Pokemon[] = [];
- for (const target of pokemon.side.foe.active) {
- if (target && !target.fainted) {
- possibleTargets.push(target);
- }
- }
- while (possibleTargets.length) {
- const rand = this.random(possibleTargets.length);
- const target = possibleTargets[rand];
- let possibleAbilities = [target.ability];
- if (target.m.innates) possibleAbilities.push(...target.m.innates);
- const additionalBannedAbilities = [pokemon.ability, ...(pokemon.m.innates || [])];
- possibleAbilities = possibleAbilities
- .filter(val => !this.dex.abilities.get(val).flags['notrace'] && !additionalBannedAbilities.includes(val));
- if (!possibleAbilities.length) {
- possibleTargets.splice(rand, 1);
- continue;
- }
- const ability = this.dex.abilities.get(this.sample(possibleAbilities));
- this.add('-ability', pokemon, ability, '[from] ability: Trace', `[of] ${target}`);
- if (isAbility) {
- pokemon.setAbility(ability);
- } else {
- pokemon.removeVolatile("ability:trace");
- pokemon.addVolatile(`ability:${ability}`, pokemon);
- }
- return;
- }
- },
- },
-};
diff --git a/data/mods/gen7pokebilities/moves.ts b/data/mods/gen7pokebilities/moves.ts
deleted file mode 100644
index c473cb8bba..0000000000
--- a/data/mods/gen7pokebilities/moves.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
- 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');
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- pokemon.removeVolatile("ability" + innate);
- }
- }
- },
- },
- },
-};
diff --git a/data/mods/gen7pokebilities/scripts.ts b/data/mods/gen7pokebilities/scripts.ts
deleted file mode 100644
index 22e71225a7..0000000000
--- a/data/mods/gen7pokebilities/scripts.ts
+++ /dev/null
@@ -1,215 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- inherit: 'gen7',
- field: {
- suppressingWeather() {
- for (const pokemon of this.battle.getAllActive()) {
- if (pokemon && !pokemon.fainted && !pokemon.ignoringAbility() &&
- (pokemon.getAbility().suppressWeather ||
- pokemon.m.innates?.some((k: string) => this.battle.dex.abilities.get(k).suppressWeather))) {
- return true;
- }
- }
- return false;
- },
- },
- pokemon: {
- 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.m.innates?.some((k: string) => k === '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.m.innates?.some((k: string) => k === 'neutralizinggas'))
- )) && !this.getAbility().flags['cantsuppress']
- )
- );
- },
- hasAbility(ability) {
- if (this.ignoringAbility()) return false;
- if (Array.isArray(ability)) return ability.some(abil => this.hasAbility(abil));
- ability = this.battle.toID(ability);
- return this.ability === ability || !!this.volatiles['ability:' + ability];
- },
- transformInto(pokemon, effect) {
- 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') {
- return false;
- }
-
- if (!this.setSpecies(species, effect, true)) return false;
-
- this.transformed = true;
- this.weighthg = pokemon.weighthg;
-
- 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;
- this.apparentType = pokemon.apparentType;
-
- let statName: StatIDExceptHP;
- for (statName in this.storedStats) {
- this.storedStats[statName] = pokemon.storedStats[statName];
- 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 (moveSlot.id === 'hiddenpower') {
- moveName = 'Hidden Power ' + this.hpType;
- }
- this.moveSlots.push({
- move: moveName,
- id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
- target: moveSlot.target,
- disabled: false,
- used: false,
- virtual: true,
- });
- }
- let boostName: BoostID;
- for (boostName in pokemon.boosts) {
- this.boosts[boostName] = pokemon.boosts[boostName];
- }
- if (this.battle.gen >= 6) {
- // we need to be sure to remove all the overlapping crit volatiles before trying to add any of them
- const volatilesToCopy = ['dragoncheer', 'focusenergy', 'gmaxchistrike', 'laserfocus'];
- for (const volatile of volatilesToCopy) this.removeVolatile(volatile);
- for (const volatile of volatilesToCopy) {
- if (pokemon.volatiles[volatile]) {
- this.addVolatile(volatile);
- if (volatile === 'gmaxchistrike') this.volatiles[volatile].layers = pokemon.volatiles[volatile].layers;
- if (volatile === 'dragoncheer') this.volatiles[volatile].hasDragonType = pokemon.volatiles[volatile].hasDragonType;
- }
- }
- }
- if (effect) {
- this.battle.add('-transform', this, pokemon, '[from] ' + effect.fullname);
- } else {
- this.battle.add('-transform', this, pokemon);
- }
- if (this.terastallized && this.terastallized !== this.apparentType) {
- this.battle.add('-start', this, 'typechange', this.terastallized, '[silent]');
- this.apparentType = this.terastallized;
- }
- if (this.battle.gen > 2) {
- this.setAbility(pokemon.ability, this, null, true);
- if (this.m.innates) {
- for (const innate of this.m.innates) {
- this.removeVolatile('ability:' + innate);
- }
- }
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- this.addVolatile('ability:' + innate, this);
- }
- }
- }
-
- // Change formes based on held items (for Transform)
- // Only ever relevant in Generation 4 since Generation 3 didn't have item-based forme changes
- if (this.battle.gen === 4) {
- if (this.species.num === 487) {
- // Giratina formes
- if (this.species.name === 'Giratina' && this.item === 'griseousorb') {
- this.formeChange('Giratina-Origin');
- } else if (this.species.name === 'Giratina-Origin' && this.item !== 'griseousorb') {
- this.formeChange('Giratina');
- }
- }
- if (this.species.num === 493) {
- // Arceus formes
- const item = this.getItem();
- const targetForme = (item?.onPlate ? 'Arceus-' + item.onPlate : 'Arceus');
- if (this.species.name !== targetForme) {
- this.formeChange(targetForme);
- }
- }
- }
-
- return true;
- },
- /**
- * Changes this Pokemon's forme to match the given speciesId (or species).
- * This function handles all changes to stats, ability, type, species, etc.
- * as well as sending all relevant messages sent to the client.
- */
- formeChange(speciesId, source, isPermanent, message) {
- if (!source) source = this.battle.effect;
-
- const rawSpecies = this.battle.dex.species.get(speciesId);
-
- const species = this.setSpecies(rawSpecies, source);
- if (!species) return false;
-
- if (this.battle.gen <= 2) return true;
-
- // The species the opponent sees
- const apparentSpecies =
- this.illusion ? this.illusion.species.name : species.baseSpecies;
- if (isPermanent) {
- this.baseSpecies = rawSpecies;
- this.details = this.getUpdatedDetails();
- 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
- } else if (source.isPrimalOrb) {
- if (this.illusion) {
- this.ability = '';
- this.battle.add('-primal', this.illusion);
- } else {
- this.battle.add('-primal', this);
- }
- } else {
- this.battle.add('-mega', this, apparentSpecies, species.requiredItem);
- this.moveThisTurnResult = true; // Mega Evolution counts as an action for Truant
- }
- } else if (source.effectType === 'Status') {
- // Shaymin-Sky -> Shaymin
- this.battle.add('-formechange', this, species.name, message);
- }
- } else {
- if (source.effectType === 'Ability') {
- this.battle.add('-formechange', this, species.name, message, `[from] ability: ${source.name}`);
- } else {
- this.battle.add('-formechange', this, this.illusion ? this.illusion.species.name : species.name, message);
- }
- }
- if (isPermanent && !['disguise', 'iceface', 'ability:disguise', 'ability:iceface'].includes(source.id)) {
- if (this.illusion) {
- this.ability = ''; // Don't allow Illusion to wear off
- }
- this.setAbility(species.abilities['0'], null, null, true);
- this.baseAbility = this.ability;
- }
- if (this.terastallized && this.terastallized !== this.apparentType) {
- this.battle.add('-start', this, 'typechange', this.terastallized, '[silent]');
- this.apparentType = this.terastallized;
- }
- return true;
- },
- },
-};
diff --git a/data/random-battles/gen5pokebilities/teams.ts b/data/random-battles/gen5pokebilities/teams.ts
deleted file mode 100644
index f69104146d..0000000000
--- a/data/random-battles/gen5pokebilities/teams.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import RandomGen5Teams from '../gen5/teams';
-
-export class RandomGen5PokebilitiesTeams extends RandomGen5Teams {}
-
-export default RandomGen5PokebilitiesTeams;
From 3b326cfa83c83ccf8fb9d06216bc22f500747045 Mon Sep 17 00:00:00 2001
From: EvGym <67931795+EvGym@users.noreply.github.com>
Date: Fri, 13 Mar 2026 20:32:36 -0500
Subject: [PATCH 137/233] Adding Gen 3 Hoenn Stadium format (#11797)
* Adding gen 3 colosseum format, updating win check
* Update formats.ts
* Adding Gen 3 Hoenn Stadium format
* They want open team sheets on the format
* Fixing selfKO clause code for the gen3colosseum mod.
- Perish song only cares if the user is the last mon, we had that wrong.
- Corrected the game resolution code to properly calculate winners/draws (Has been tested on a dev server)
* forgot Destiny bond
* Cleaning up ban and unban lists for hoenn stadium
* Deoxys is not nonstandard
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 22 ++++++++++++++++++
data/mods/gen3colosseum/moves.ts | 36 +++++++++++-------------------
data/mods/gen3colosseum/scripts.ts | 14 ++++++++++--
3 files changed, 47 insertions(+), 25 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 912105c19a..d042ded955 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5280,6 +5280,28 @@ export const Formats: import('../sim/dex-formats').FormatList = [
this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect, you will lose the battle');
},
},
+ {
+ name: "[Gen 3] Hoenn Stadium",
+ threads: [
+ `• ADV Sample Teams`,
+ `• Orre Colosseum`,
+ `• Join the discord server`,
+ ],
+
+ mod: 'gen3colosseum',
+ searchShow: false,
+ gameType: 'singles',
+ ruleset: [
+ 'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
+ 'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 3', 'Exact HP Mod', "Item Clause = 1", 'Open Team Sheets',
+ ],
+ banlist: ['Soul Dew', 'Restricted Legendary', 'Mythical', 'Wobbuffet + Leftovers', 'Wynaut + Leftovers'],
+ restricted: [],
+ bestOfDefault: true,
+ onBegin() {
+ this.add('rule', 'Self-KO Clause: If your last Pok\u00e9mon faints to a self-KO move or effect you will lose the battle');
+ },
+ },
{
name: "[Gen 3] Custom Game",
mod: 'gen3',
diff --git a/data/mods/gen3colosseum/moves.ts b/data/mods/gen3colosseum/moves.ts
index 5ed069932f..c8f9e6f5d0 100644
--- a/data/mods/gen3colosseum/moves.ts
+++ b/data/mods/gen3colosseum/moves.ts
@@ -5,30 +5,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
perishsong: {
inherit: true,
onTryMove(attacker, defender, move) {
- let immuneMon = false;
-
- for (const mon of attacker.side.active) {
- if (this.runEvent('Immunity', mon, attacker, move)) {
- immuneMon = true;
- }
+ if (attacker.side.pokemonLeft === 1) {
+ this.add('-fail', attacker, 'move: Perish Song');
+ this.hint("Self KO Clause: The last pokemon on a team cannot use moves that force fainting");
+ return false;
}
-
- for (const mon of attacker.side.foe.active) {
- if (this.runEvent('Immunity', mon, attacker, move)) {
- immuneMon = true;
- }
- }
-
- if (immuneMon) return;
-
- if (this.format.gameType === 'singles') {
- if (attacker.side.pokemonLeft === 1 && attacker.side.foe.pokemonLeft === 1) {
- return false;
- }
- } else if (this.format.gameType === 'doubles') {
- if (attacker.side.pokemonLeft === 2 && attacker.side.foe.pokemonLeft === 2) {
- return false;
- }
+ },
+ },
+ destinybond: {
+ inherit: true,
+ onTryMove(attacker, defender, move) {
+ if (attacker.side.pokemonLeft === 1) {
+ this.add('-fail', attacker, 'move: Perish Song');
+ this.hint("Self KO Clause: The last pokemon on a team cannot use moves that force fainting");
+ return false;
}
},
},
diff --git a/data/mods/gen3colosseum/scripts.ts b/data/mods/gen3colosseum/scripts.ts
index b5dd69344a..3e949ea8c7 100644
--- a/data/mods/gen3colosseum/scripts.ts
+++ b/data/mods/gen3colosseum/scripts.ts
@@ -4,8 +4,18 @@ export const Scripts: ModdedBattleScriptsData = {
checkWin(faintData?: Battle['faintQueue'][0]) {
if (this.sides.every(side => !side.pokemonLeft)) {
- this.win(faintData ? faintData.target.side : null);
- return true;
+ let isSelfKo = false;
+ if (faintData?.effect) {
+ isSelfKo = isSelfKo || this.dex.moves.getByID(faintData?.effect?.id).selfdestruct !== undefined;
+ isSelfKo = isSelfKo || this.dex.moves.getByID(faintData?.effect?.id).recoil !== undefined;
+ }
+ if (isSelfKo) {
+ this.win(faintData ? faintData.target.side : null);
+ return true;
+ } else {
+ this.win(undefined);
+ return true;
+ }
}
for (const side of this.sides) {
if (!side.foePokemonLeft()) {
From bf6e6efbe7bc93d882cec3c816e1c0aa768cd35d Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 13 Mar 2026 22:31:59 -0600
Subject: [PATCH 138/233] Add [Gen 1] Stadium Rentals
---
config/formats.ts | 14 +++
data/mods/gen1stadium/rulesets.ts | 182 ++++++++++++++++++++++++++++++
data/rulesets.ts | 6 +
3 files changed, 202 insertions(+)
diff --git a/config/formats.ts b/config/formats.ts
index d042ded955..a62ddb5588 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5477,6 +5477,20 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Exeggutor + Stun Spore + Stomp', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Focus Energy + Ember',
],
},
+ {
+ name: "[Gen 1] Stadium Rentals",
+ desc: `Only Pokémon sets that can be rented through the American Stadium Poké Cup are legal.`,
+ mod: 'gen1stadium',
+ searchShow: false,
+ ruleset: ['Standard', 'Team Preview', 'Stadium Poke Cup Rentals'],
+ banlist: ['All Pokemon'],
+ unbanlist: [
+ 'Abra', 'Aerodactyl', 'Alakazam', 'Arbok', 'Articuno', 'Chansey', 'Charizard', 'Clefable', 'Cloyster', 'Dewgong', 'Dodrio', 'Dragonair',
+ 'Electabuzz', 'Exeggutor', 'Gengar', 'Geodude', 'Graveler', 'Gyarados', 'Haunter', 'Ivysaur', 'Jolteon', 'Jynx', 'Kabutops', 'Kadabra',
+ 'Lapras', 'Meowth', 'Moltres', 'Ninetales', 'Omanyte', 'Omastar', 'Paras', 'Persian', 'Poliwhirl', 'Poliwrath', 'Rapidash', 'Raticate',
+ 'Rhyhorn', 'Snorlax', 'Starmie', 'Tangela', 'Tauros', 'Wartortle', 'Zapdos',
+ ],
+ },
{
name: "[Gen 1] Tradebacks OU",
desc: `RBY OU with movepool additions from the Time Capsule.`,
diff --git a/data/mods/gen1stadium/rulesets.ts b/data/mods/gen1stadium/rulesets.ts
index 88053197e3..abee0a3394 100644
--- a/data/mods/gen1stadium/rulesets.ts
+++ b/data/mods/gen1stadium/rulesets.ts
@@ -13,4 +13,186 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
],
},
+ stadiumpokecuprentals: {
+ inherit: true,
+ onChangeSet(set, format, setHas, teamHas) {
+ set.level = 50;
+ set.ivs = { hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30 };
+ switch (this.dex.species.get(set.species).name) {
+ case 'Abra':
+ set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.moves = ['Psychic', 'Seismic Toss', 'Reflect', 'Thunder Wave'];
+ break;
+ case 'Aerodactyl':
+ set.evs = { hp: 7, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Fly', 'Hyper Beam', 'Supersonic', 'Dragon Rage'];
+ break;
+ case 'Alakazam':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Psybeam', 'Metronome', 'Disable', 'Tri Attack'];
+ break;
+ case 'Arbok':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.moves = ['Glare', 'Wrap', 'Dig', 'Strength'];
+ break;
+ case 'Articuno':
+ set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Ice Beam', 'Sky Attack', 'Razor Wind', 'Substitute'];
+ break;
+ case 'Chansey':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Thunder', 'Fire Blast', 'Minimize', 'Rest'];
+ break;
+ case 'Charizard':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Fly', 'Swords Dance', 'Fire Spin', 'Fire Blast'];
+ break;
+ case 'Clefable':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.moves = ['Sing', 'Tri Attack', 'Minimize', 'Ice Beam'];
+ break;
+ case 'Cloyster':
+ set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Clamp', 'Spike Cannon', 'Ice Beam', 'Supersonic'];
+ break;
+ case 'Dewgong':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Aurora Beam', 'Headbutt', 'Rest', 'Surf'];
+ break;
+ case 'Dodrio':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.moves = ['Fly', 'Tri Attack', 'Agility', 'Reflect'];
+ break;
+ case 'Dragonair':
+ set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Hyper Beam', 'Swift', 'Ice Beam', 'Thunder Wave'];
+ break;
+ case 'Electabuzz':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 28, spd: 28, spe: 28 };
+ set.moves = ['Thunder Punch', 'Mega Punch', 'Psychic', 'Thunder Wave'];
+ break;
+ case 'Exeggutor':
+ set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Mega Drain', 'Stun Spore', 'Leech Seed', 'Egg Bomb'];
+ break;
+ case 'Gengar':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Thunderbolt', 'Night Shade', 'Hypnosis', 'Confuse Ray'];
+ break;
+ case 'Geodude':
+ set.evs = { hp: 73, atk: 72, def: 64, spa: 72, spd: 72, spe: 64 };
+ set.moves = ['Earthquake', 'Seismic Toss', 'Rock Slide', 'Explosion'];
+ break;
+ case 'Graveler':
+ set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 44 };
+ set.moves = ['Earthquake', 'Seismic Toss', 'Strength', 'Self-Destruct'];
+ break;
+ case 'Gyarados':
+ set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Surf', 'Dragon Rage', 'Bite', 'Fire Blast'];
+ break;
+ case 'Haunter':
+ set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Mega Drain', 'Psychic', 'Explosion', 'Confuse Ray'];
+ break;
+ case 'Ivysaur':
+ set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Sleep Powder', 'Razor Leaf', 'Growth', 'Double-Edge'];
+ break;
+ case 'Jolteon':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Thunderbolt', 'Pin Missile', 'Toxic', 'Sand Attack'];
+ break;
+ case 'Jynx':
+ set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Ice Punch', 'Mega Punch', 'Psychic', 'Lovely Kiss'];
+ break;
+ case 'Kabutops':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Surf', 'Swords Dance', 'Mega Kick', 'Submission'];
+ break;
+ case 'Kadabra':
+ set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Psychic', 'Counter', 'Recover', 'Dig'];
+ break;
+ case 'Lapras':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Ice Beam', 'Solar Beam', 'Body Slam', 'Sing'];
+ break;
+ case 'Meowth':
+ set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.moves = ['Slash', 'Thunderbolt', 'Swift', 'Double Team'];
+ break;
+ case 'Moltres':
+ set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Fire Blast', 'Fly', 'Swift', 'Substitute'];
+ break;
+ case 'Ninetales':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Fire Blast', 'Skull Bash', 'Confuse Ray', 'Tail Whip'];
+ break;
+ case 'Omanyte':
+ set.evs = { hp: 73, atk: 72, def: 64, spa: 72, spd: 72, spe: 64 };
+ set.moves = ['Surf', 'Ice Beam', 'Double-Edge', 'Double Team'];
+ break;
+ case 'Omastar':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Hydro Pump', 'Submission', 'Spike Cannon', 'Withdraw'];
+ break;
+ case 'Paras':
+ set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.moves = ['Spore', 'Slash', 'Dig', 'Mega Drain'];
+ break;
+ case 'Persian':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.moves = ['Slash', 'Bubble Beam', 'Mimic', 'Growl'];
+ break;
+ case 'Poliwhirl':
+ set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Hypnosis', 'Surf', 'Ice Beam', 'Earthquake'];
+ break;
+ case 'Poliwrath':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Hypnosis', 'Submission', 'Counter', 'Hydro Pump'];
+ break;
+ case 'Rapidash':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Fire Blast', 'Stomp', 'Toxic', 'Fire Spin'];
+ break;
+ case 'Rhyhorn':
+ set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Earthquake', 'Body Slam', 'Rock Slide', 'Fire Blast'];
+ break;
+ case 'Snorlax':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Mega Kick', 'Rock Slide', 'Metronome', 'Rest'];
+ break;
+ case 'Starmie':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Surf', 'Thunder', 'Swift', 'Harden'];
+ break;
+ case 'Tangela':
+ set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.moves = ['Mega Drain', 'Growth', 'Toxic', 'Double-Edge'];
+ break;
+ case 'Tauros':
+ set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.moves = ['Double-Edge', 'Fire Blast', 'Tail Whip', 'Bide'];
+ break;
+ case 'Wartortle':
+ set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
+ set.moves = ['Surf', 'Strength', 'Rest', 'Ice Beam'];
+ break;
+ case 'Zapdos':
+ set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Thunderbolt', 'Sky Attack', 'Thunder Wave', 'Flash'];
+ }
+ },
+ },
};
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 08f6a9583d..8a3aacee91 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -2210,6 +2210,12 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
desc: "Bans move combinations on Pok\u00e9mon that weren't legal in NC 1997.",
// Implemented in mods/gen1jpn/rulesets.ts
},
+ stadiumpokecuprentals: {
+ effectType: 'ValidatorRule',
+ name: "Stadium Poke Cup Rentals",
+ desc: `Enforces Stadium Poké Cup Rentals legality`,
+ // Implemented in mods/gen1stadium/rulesets.ts
+ },
noswitching: {
effectType: 'Rule',
name: 'No Switching',
From be33fc1ee6e2e15aa457416be12c3f0b95ec3dbd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 15 Mar 2026 21:12:23 +0000
Subject: [PATCH 139/233] LC: Ban Shellder (#11819)
* LC: Ban Shellder
https://www.smogon.com/forums/threads/dirty-little-secret-shellder-suspect-test.3778358/post-10909234
* Ban Shellder in formats
* Remove Shellder from LC UU banlist
---
config/formats.ts | 7 ++++---
data/formats-data.ts | 2 +-
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index a62ddb5588..4a8010d2ee 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -112,8 +112,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Little Cup', 'Standard'],
banlist: [
'Aipom', 'Basculin-White-Striped', 'Cutiefly', 'Diglett-Base', 'Dunsparce', 'Duraludon', 'Flittle', 'Gastly', 'Girafarig', 'Gligar',
- 'Magby', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Qwilfish-Hisui', 'Rufflet', 'Scraggy', 'Scyther', 'Sneasel', 'Sneasel-Hisui',
- 'Snivy', 'Stantler', 'Torchic', 'Voltorb-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma', 'Moody', 'Heat Rock', 'Baton Pass', 'Sticky Web',
+ 'Magby', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Qwilfish-Hisui', 'Rufflet', 'Scraggy', 'Scyther', 'Shellder', 'Sneasel',
+ 'Sneasel-Hisui', 'Snivy', 'Stantler', 'Torchic', 'Voltorb-Hisui', 'Vulpix', 'Vulpix-Alola', 'Yanma', 'Moody', 'Heat Rock', 'Baton Pass',
+ 'Sticky Web',
],
},
{
@@ -347,7 +348,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 9] LC'],
banlist: [
'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray',
- 'Pawniard', 'Sandshrew-Alola', 'Shellder', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
+ 'Pawniard', 'Sandshrew-Alola', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
// LC UUBL
'Deerling', 'Minccino', 'Light Clay',
],
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 922c5c0320..249e442540 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -696,7 +696,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
shellder: {
- tier: "LC",
+ tier: "NFE",
},
cloyster: {
tier: "NUBL",
From 6bd082af475b0e402dcae299f5af4e960ff939b2 Mon Sep 17 00:00:00 2001
From: demir
Date: Mon, 16 Mar 2026 00:12:43 +0300
Subject: [PATCH 140/233] 35 Pokes: Ban Tyranitar, unban Wo-Chien (#11814)
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index 4a8010d2ee..7ed18ec9cf 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3214,7 +3214,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Aerodactyl-Base', 'Arctozolt', 'Armaldo', 'Armarouge', 'Bronzong', 'Centiskorch', 'Cherrim-Base', 'Cyclizar', 'Dhelmise', 'Dondozo',
'Drakloak', 'Empoleon', 'Glaceon', 'Golduck', 'Gyarados-Base', 'Jellicent', 'Jumpluff', 'Kecleon', 'Kilowattrel', 'Kingdra', 'Lunatone',
'Musharna', 'Noivern', 'Palossand', 'Pincurchin', 'Reuniclus', 'Revavroom', 'Sandslash-Alola', 'Snorlax', 'Solrock', 'Stonjourner',
- 'Tyranitar-Base', 'Vaporeon', 'Virizion', 'Wigglytuff', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
+ 'Vaporeon', 'Virizion', 'Wigglytuff', 'Wo-Chien', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
],
// Stupid hardcode
onValidateSet(set, format, setHas, teamHas) {
From 4ceb02536c5bb81914f136f28e13456ba0b81c5f Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 15 Mar 2026 19:31:23 -0600
Subject: [PATCH 141/233] Linked: Update bans
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 7ed18ec9cf..09bc7b3429 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -516,11 +516,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin',
'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody',
- 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Razor Fang', 'Baton Pass',
- 'Last Respects', 'Shed Tail',
+ 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Quick Claw', 'Razor Fang',
+ 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Electric Terrain', 'Encore', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
+ 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
],
onValidateSet(set) {
From 0c78853bc6987951e009115929e889635765e760 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 15 Mar 2026 19:32:28 -0600
Subject: [PATCH 142/233] 350 Cup: Update bans
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index 09bc7b3429..0b058857b3 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -540,7 +540,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen9',
// searchShow: false,
ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'],
- banlist: ['Calyrex-Shadow', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
+ banlist: ['Calyrex-Shadow', 'Clefairy', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Smeargle', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
},
{
name: "[Gen 9] Pokebilities AAA",
From c0c337ec45b98c35fbac2a611a2a6102990f7d3c Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 15 Mar 2026 19:33:10 -0600
Subject: [PATCH 143/233] Pokebilities AAA: Fix bans
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 0b058857b3..e1cd0f807d 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -563,9 +563,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
],
restricted: [
- 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Neutralizing Gas',
- 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris',
- 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard',
+ 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Orichalcum Pulse',
+ 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden',
+ 'Water Bubble', 'Wonder Guard',
],
onValidateSet(set) {
const species = this.dex.species.get(set.species);
From f01268f26cea393700e79e9ad28db29c7b995b32 Mon Sep 17 00:00:00 2001
From: Mia <49593536+mia-pi-git@users.noreply.github.com>
Date: Mon, 16 Mar 2026 01:12:02 -0500
Subject: [PATCH 144/233] Moderation: Fix /offlineforcerename modlogging
---
server/chat-commands/moderation.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/chat-commands/moderation.ts b/server/chat-commands/moderation.ts
index 442d12f971..38e9e21261 100644
--- a/server/chat-commands/moderation.ts
+++ b/server/chat-commands/moderation.ts
@@ -1841,7 +1841,7 @@ export const commands: Chat.ChatCommands = {
targetUser.send(`|nametaken||${user.name} considers your name inappropriate${(publicReason ? `: ${publicReason}` : ``)}`);
} else {
forceRenameMessage = `was forced to choose a new name by ${user.name} while offline${(publicReason ? `: ${publicReason}` : ``)}`;
- this.globalModlog('FORCERENAME OFFLINE', targetUser, privateReason);
+ this.globalModlog('FORCERENAME OFFLINE', targetID, privateReason);
}
Monitor.forceRenames.set(targetID, false);
From 2b55cb90fc740b37092028c6f5e5e223e341a23b Mon Sep 17 00:00:00 2001
From: Mia <49593536+mia-pi-git@users.noreply.github.com>
Date: Mon, 16 Mar 2026 15:24:56 -0500
Subject: [PATCH 145/233] Rooms: Ensure minor activity queue is restored on
startup
---
server/rooms.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/server/rooms.ts b/server/rooms.ts
index b98bb0331a..f95481c634 100644
--- a/server/rooms.ts
+++ b/server/rooms.ts
@@ -301,7 +301,7 @@ export abstract class BasicRoom {
if (!options.isPersonal) this.persist = true;
this.minorActivity = null;
- this.minorActivityQueue = null;
+ this.minorActivityQueue = this.settings.minorActivityQueue || null;
if (options.parentid) {
this.setParent(Rooms.get(options.parentid) || null);
}
@@ -532,6 +532,7 @@ export abstract class BasicRoom {
if (!this.minorActivityQueue) this.minorActivityQueue = [];
this.minorActivityQueue.push(activity);
this.settings.minorActivityQueue = this.minorActivityQueue;
+ this.saveSettings();
}
clearMinorActivityQueue(slot?: number, depth = 1) {
if (!this.minorActivityQueue) return;
From 84f6e93478e47072e360ea4bc4e382a75b0d26ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 17 Mar 2026 02:54:59 +0000
Subject: [PATCH 146/233] Remove single-ban clauses (#11822)
---
config/formats.ts | 91 ++++++++++++++++++++------------------
data/mods/gen5/rulesets.ts | 2 +-
data/mods/gen7/rulesets.ts | 6 ++-
data/rulesets.ts | 18 --------
4 files changed, 54 insertions(+), 63 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index e1cd0f807d..f5ddd4640c 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -464,22 +464,25 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 6] Draft",
mod: 'gen6',
searchShow: false,
- ruleset: ['Standard Draft', 'Moody Clause', 'Swagger Clause'],
- banlist: ['Soul Dew'],
+ ruleset: ['Standard Draft'],
+ banlist: ['Moody', 'Soul Dew', 'Swagger'],
},
{
name: "[Gen 5] Draft",
mod: 'gen5',
searchShow: false,
- ruleset: ['Standard Draft', '-Unreleased', 'Moody Clause', 'Swagger Clause', 'DryPass Clause', 'Gems Clause', 'Sleep Moves Clause'],
- banlist: ['King\'s Rock', 'Quick Claw', 'Soul Dew', 'Assist', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Stream ++ Sand Rush', 'Landorus + Sheer Force', 'Excadrill + Sand Rush'],
+ ruleset: ['Standard Draft', '-Unreleased', 'DryPass Clause', 'Gems Clause', 'Sleep Moves Clause'],
+ banlist: [
+ 'Moody', 'King\'s Rock', 'Quick Claw', 'Soul Dew', 'Assist', 'Swagger', 'Drizzle ++ Swift Swim',
+ 'Drought ++ Chlorophyll', 'Sand Stream ++ Sand Rush', 'Landorus + Sheer Force', 'Excadrill + Sand Rush',
+ ],
},
{
name: "[Gen 4] Draft",
mod: 'gen4',
searchShow: false,
- ruleset: ['Standard Draft', 'Swagger Clause', 'DryPass Clause', '!Team Preview', '!Evasion Abilities Clause', 'Accuracy Moves Clause'],
- banlist: ['King\'s Rock', 'Quick Claw', 'Assist', 'Sand Stream ++ Sand Veil', 'Snow Warning ++ Snow Cloak', 'No Guard + Dynamic Punch'],
+ ruleset: ['Standard Draft', 'DryPass Clause', '!Team Preview', '!Evasion Abilities Clause', 'Accuracy Moves Clause'],
+ banlist: ['King\'s Rock', 'Quick Claw', 'Assist', 'Swagger', 'Sand Stream ++ Sand Veil', 'Snow Warning ++ Snow Cloak', 'No Guard + Dynamic Punch'],
},
{
name: "[Gen 3] Draft",
@@ -3118,12 +3121,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, with no limit.`,
mod: 'gen6mixandmega',
searchShow: false,
- ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause', 'Overflow Stat Mod', '!Sleep Clause Mod', 'Sleep Moves Clause'],
+ ruleset: ['Standard', 'Mega Rayquaza Clause', 'Overflow Stat Mod', '!Sleep Clause Mod', 'Sleep Moves Clause'],
banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
restricted: [
'Beedrillite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Arceus', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
'Dialga', 'Dragonite', 'Entei', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Xerneas', 'Yveltal', 'Zekrom',
+ 'Swagger',
],
onValidateTeam(team) {
const itemTable = new Set();
@@ -3480,8 +3484,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`,
mod: 'gen6megasrevisited',
searchShow: false,
- ruleset: ['Standard', 'Swagger Clause', 'Mega Data Mod'],
- banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Blaziken + Speed Boost'],
+ ruleset: ['Standard', 'Mega Data Mod'],
+ banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Swagger', 'Blaziken + Speed Boost'],
onBegin() {
this.add(`raw|Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
this.add('-message', `Welcome to Megas Revisited!`);
@@ -4135,14 +4139,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
name: "[Gen 6] OU",
mod: 'gen6',
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause'],
- banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Soul Dew', 'Baton Pass'],
+ ruleset: ['Standard', 'Evasion Abilities Clause'],
+ banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Soul Dew', 'Baton Pass', 'Swagger'],
},
{
name: "[Gen 5] OU",
mod: 'gen5',
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Swagger Clause', 'Gems Clause', 'Baton Pass Stat Clause'],
- banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist'],
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Gems Clause', 'Baton Pass Stat Clause'],
+ banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Swagger'],
},
{
name: "[Gen 4] OU",
@@ -4180,30 +4184,30 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 8] Doubles OU",
mod: 'gen8',
gameType: 'doubles',
- ruleset: ['Standard Doubles', 'Dynamax Clause', 'Swagger Clause'],
- banlist: ['DUber', 'Power Construct', 'Shadow Tag'],
+ ruleset: ['Standard Doubles', 'Dynamax Clause'],
+ banlist: ['DUber', 'Power Construct', 'Shadow Tag', 'Swagger'],
},
{
name: "[Gen 7] Doubles OU",
mod: 'gen7',
gameType: 'doubles',
- ruleset: ['Standard Doubles', 'Swagger Clause'],
- banlist: ['DUber', 'Power Construct', 'Eevium Z', 'Dark Void'],
+ ruleset: ['Standard Doubles'],
+ banlist: ['DUber', 'Power Construct', 'Eevium Z', 'Dark Void', 'Swagger'],
},
{
name: "[Gen 6] Doubles OU",
mod: 'gen6',
gameType: 'doubles',
- ruleset: ['Standard Doubles', 'Swagger Clause'],
- banlist: ['DUber', 'Soul Dew', 'Dark Void'],
+ ruleset: ['Standard Doubles'],
+ banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Swagger'],
},
{
name: "[Gen 5] Doubles OU",
mod: 'gen5',
gameType: 'doubles',
searchShow: false,
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
- banlist: ['DUber', 'Shadow Tag', 'Soul Dew', 'Dark Void', 'Gravity'],
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Clause Mod'],
+ banlist: ['DUber', 'Shadow Tag', 'Soul Dew', 'Dark Void', 'Gravity', 'Swagger'],
},
{
name: "[Gen 4] Doubles OU",
@@ -4481,11 +4485,11 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 7] LC",
mod: 'gen7',
searchShow: false,
- ruleset: ['Little Cup', 'Standard', 'Swagger Clause'],
+ ruleset: ['Little Cup', 'Standard'],
banlist: [
'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon',
'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Trapinch', 'Vulpix-Base', 'Vulpix-Alola', 'Wingull', 'Yanma',
- 'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web',
+ 'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Sticky Web', 'Swagger',
],
},
{
@@ -4493,13 +4497,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: `All the Pokémon on a team must share a type.`,
mod: 'gen7',
searchShow: false,
- ruleset: ['Same Type Clause', 'Standard', 'Evasion Abilities Clause', 'Swagger Clause'],
+ ruleset: ['Same Type Clause', 'Standard', 'Evasion Abilities Clause'],
banlist: [
'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Giratina-Origin',
'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna',
'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia',
'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde',
'Battle Bond', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang', 'Smooth Rock', 'Terrain Extender', 'Baton Pass',
+ 'Swagger',
],
},
{
@@ -4509,14 +4514,14 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: [
'Picked Team Size = 1', 'Max Team Size = 3',
- 'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Swagger Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
+ 'Obtainable', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
],
banlist: [
'Arceus', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mew', 'Mewtwo',
'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Grass Whistle', 'Hypnosis',
- 'Perish Song', 'Sing', 'Detect + Fightinium Z',
+ 'Perish Song', 'Sing', 'Swagger', 'Detect + Fightinium Z',
],
},
{
@@ -4650,14 +4655,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 6] Ubers",
mod: 'gen6',
searchShow: false,
- ruleset: ['Standard', 'Swagger Clause', 'Mega Rayquaza Clause'],
+ ruleset: ['Standard', 'Mega Rayquaza Clause'],
+ banlist: ['Swagger'],
},
{
name: "[Gen 6] UU",
mod: 'gen6',
searchShow: false,
- ruleset: ['Standard', 'Swagger Clause'],
- banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drizzle', 'Drought', 'Shadow Tag', 'Soul Dew', 'Baton Pass'],
+ ruleset: ['Standard'],
+ banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drizzle', 'Drought', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Swagger'],
},
{
name: "[Gen 6] RU",
@@ -4688,13 +4694,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: `All the Pokémon on a team must share a type.`,
mod: 'gen6',
searchShow: false,
- ruleset: ['Standard', 'Swagger Clause', 'Evasion Abilities Clause', 'Same Type Clause'],
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Same Type Clause'],
banlist: [
'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Genesect', 'Gengar-Mega',
'Giratina', 'Giratina-Origin', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Keldeo', 'Kyogre', 'Kyurem-White', 'Lucario-Mega',
'Lugia', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega', 'Salamence-Mega', 'Shaymin-Sky',
'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom', 'Shadow Tag', 'Damp Rock', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Razor Fang',
- 'Smooth Rock', 'Soul Dew', 'Baton Pass',
+ 'Smooth Rock', 'Soul Dew', 'Baton Pass', 'Swagger',
],
},
{
@@ -4703,14 +4709,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen6',
searchShow: false,
ruleset: [
- 'Max Team Size = 3', 'Picked Team Size = 1', 'Obtainable', 'Nickname Clause', 'Moody Clause', 'OHKO Clause',
- 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod',
+ 'Max Team Size = 3', 'Picked Team Size = 1', 'Obtainable', 'Nickname Clause', 'OHKO Clause',
+ 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod',
'Cancel Mod', 'Team Preview',
],
banlist: [
'Arceus', 'Charizard-Mega-X', 'Charizard-Mega-Y', 'Deoxys-Normal', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon',
'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mew', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky',
- 'Snorlax', 'Xerneas', 'Yveltal', 'Zekrom', 'Focus Sash', 'Soul Dew', 'Dark Void', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Sleep Powder', 'Yawn',
+ 'Snorlax', 'Xerneas', 'Yveltal', 'Zekrom', 'Moody', 'Focus Sash', 'Soul Dew', 'Dark Void', 'Grass Whistle', 'Hypnosis', 'Perish Song', 'Sing', 'Sleep Powder',
+ 'Swagger', 'Yawn',
],
},
{
@@ -4840,8 +4847,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 5] UU",
mod: 'gen5',
searchShow: false,
- ruleset: ['Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Sleep Clause Mod'],
- banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass'],
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Clause Mod'],
+ banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning', 'Prankster + Assist', 'Prankster + Copycat', 'Baton Pass', 'Swagger'],
},
{
name: "[Gen 5] RU",
@@ -4891,13 +4898,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: [
'Picked Team Size = 1', 'Max Team Size = 3',
- 'Standard', 'Baton Pass Clause', 'Swagger Clause', 'Accuracy Moves Clause', 'Sleep Moves Clause',
+ 'Standard', 'Baton Pass Clause', 'Accuracy Moves Clause', 'Sleep Moves Clause',
],
banlist: [
'Arceus', 'Blaziken', 'Cottonee', 'Darkrai', 'Deoxys', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh',
'Jirachi', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Mew', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram',
'Shaymin-Sky', 'Thundurus-Incarnate', 'Togekiss', 'Victini', 'Whimsicott', 'Zekrom', 'Focus Band', 'Focus Sash',
- 'Quick Claw', 'Soul Dew', 'Perish Song',
+ 'Quick Claw', 'Soul Dew', 'Perish Song', 'Swagger',
],
},
{
@@ -4930,8 +4937,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 5] BW1 OU",
mod: 'gen5bw1',
searchShow: false,
- ruleset: ['Standard', 'Sleep Clause Mod', 'Swagger Clause', 'Baton Pass Stat Clause'],
- banlist: ['Uber', 'Drizzle ++ Swift Swim', 'King\'s Rock', 'Razor Fang', 'Soul Dew'],
+ ruleset: ['Standard', 'Sleep Clause Mod', 'Baton Pass Stat Clause'],
+ banlist: ['Uber', 'Drizzle ++ Swift Swim', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Swagger'],
},
{
name: "[Gen 5] GBU Singles",
@@ -5248,8 +5255,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 3] ZU",
mod: 'gen3',
searchShow: false,
- ruleset: ['Standard', 'Sleep Moves Clause', 'Baton Pass Stat Trap Clause', 'Swagger Clause'],
- banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'NUBL', 'NU', 'PUBL', 'PU', 'ZUBL', 'Baton Pass + Substitute'],
+ ruleset: ['Standard', 'Sleep Moves Clause', 'Baton Pass Stat Trap Clause'],
+ banlist: ['Uber', 'OU', 'UUBL', 'UU', 'RUBL', 'RU', 'NUBL', 'NU', 'PUBL', 'PU', 'ZUBL', 'Swagger', 'Baton Pass + Substitute'],
},
{
name: "[Gen 3] ADV 200",
diff --git a/data/mods/gen5/rulesets.ts b/data/mods/gen5/rulesets.ts
index d32f7c2cae..00e9e52bbf 100644
--- a/data/mods/gen5/rulesets.ts
+++ b/data/mods/gen5/rulesets.ts
@@ -3,7 +3,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
ruleset: [
'Standard AG',
- 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
],
},
obtainablemoves: {
diff --git a/data/mods/gen7/rulesets.ts b/data/mods/gen7/rulesets.ts
index 03d6318251..3416d4e202 100644
--- a/data/mods/gen7/rulesets.ts
+++ b/data/mods/gen7/rulesets.ts
@@ -3,15 +3,17 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
ruleset: [
'Standard AG',
- 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ 'Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
],
+ banlist: ['Moody'],
},
standarddoubles: {
inherit: true,
ruleset: [
'Standard AG',
- 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause',
+ 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'Gravity Sleep Clause',
],
+ banlist: ['Moody'],
},
obtainablemoves: {
inherit: true,
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 8a3aacee91..854b188ad4 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1054,24 +1054,6 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
this.add('rule', 'Endless Battle Clause: Forcing endless battles is banned');
},
},
- moodyclause: {
- effectType: 'ValidatorRule',
- name: 'Moody Clause',
- desc: "Bans the ability Moody",
- banlist: ['Moody'],
- onBegin() {
- this.add('rule', 'Moody Clause: Moody is banned');
- },
- },
- swaggerclause: {
- effectType: 'ValidatorRule',
- name: 'Swagger Clause',
- desc: "Bans the move Swagger",
- banlist: ['Swagger'],
- onBegin() {
- this.add('rule', 'Swagger Clause: Swagger is banned');
- },
- },
drypassclause: {
effectType: 'ValidatorRule',
name: 'DryPass Clause',
From 1832b39b7bfa0b0b2c20e148a69560a56dddf759 Mon Sep 17 00:00:00 2001
From: Slayer95
Date: Tue, 17 Mar 2026 00:03:01 -0500
Subject: [PATCH 147/233] Allow highlighting on broadcast
!faq,rfaq,daily,avatars (#11818)
---
server/chat-commands/avatars.tsx | 7 +++----
server/chat-commands/info.ts | 2 +-
server/chat-plugins/daily-spotlight.ts | 2 +-
server/chat-plugins/room-faqs.ts | 2 +-
4 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/server/chat-commands/avatars.tsx b/server/chat-commands/avatars.tsx
index 48a4e0db80..abc604f42a 100644
--- a/server/chat-commands/avatars.tsx
+++ b/server/chat-commands/avatars.tsx
@@ -772,12 +772,11 @@ export const commands: Chat.ChatCommands = {
const targetUser = this.broadcasting && !target ? null : this.getUserOrSelf(target);
const targetUserids = targetUser ? new Set([targetUser.id, ...targetUser.previousIDs]) :
target ? new Set([toID(target)]) : null;
- if (targetUserids && targetUser !== user && !user.can('alts')) {
- throw new Chat.ErrorMessage("You don't have permission to look at another user's avatars!");
- }
const out = [];
- if (targetUserids) {
+ if (targetUserids && (targetUser === user || user.can('alts'))) {
+ // If the user lacks permission to view avatars, the argument is ignored silently,
+ // so that it can highlight the target user.
const hasButton = !this.broadcasting && targetUser === user;
for (const id of targetUserids) {
const allowed = customAvatars[id]?.allowed;
diff --git a/server/chat-commands/info.ts b/server/chat-commands/info.ts
index ca1eb36bf0..926174b18c 100644
--- a/server/chat-commands/info.ts
+++ b/server/chat-commands/info.ts
@@ -2128,7 +2128,7 @@ export const commands: Chat.ChatCommands = {
],
faq(target, room, user) {
- target = toID(target);
+ target = toID(this.splitOne(target)[0]);
const showAll = target === 'all';
if (showAll && this.shouldBroadcast()) {
throw new Chat.ErrorMessage(this.tr`You cannot broadcast all FAQs at once.`);
diff --git a/server/chat-plugins/daily-spotlight.ts b/server/chat-plugins/daily-spotlight.ts
index 4dad14fc0b..c8bb39ec37 100644
--- a/server/chat-plugins/daily-spotlight.ts
+++ b/server/chat-plugins/daily-spotlight.ts
@@ -279,7 +279,7 @@ export const commands: Chat.ChatCommands = {
daily(target, room, user) {
room = this.requireRoom();
if (!room.persist) throw new Chat.ErrorMessage("This command is unavailable in temporary rooms.");
- const key = toID(target);
+ const key = toID(this.splitOne(target)[0]);
if (!key) return this.parse('/help daily');
if (!spotlights[room.roomid]?.[key]) {
diff --git a/server/chat-plugins/room-faqs.ts b/server/chat-plugins/room-faqs.ts
index d1b462e2a6..7400f406f7 100644
--- a/server/chat-plugins/room-faqs.ts
+++ b/server/chat-plugins/room-faqs.ts
@@ -161,7 +161,7 @@ export const commands: Chat.ChatCommands = {
roomfaq(target, room, user, connection, cmd) {
room = this.requireRoom();
if (!roomFaqs[room.roomid]) throw new Chat.ErrorMessage("This room has no FAQ topics.");
- let topic: string = toID(target);
+ let topic: string = toID(this.splitOne(target)[0]);
if (topic === 'constructor') return false;
if (!topic) {
return this.parse(`/join view-roomfaqs-${room.roomid}`);
From 79483f6616731b7947a7093aee87b29f1af26d1f Mon Sep 17 00:00:00 2001
From: Aurastic <33085835+ISenseAura@users.noreply.github.com>
Date: Tue, 17 Mar 2026 12:47:03 +0530
Subject: [PATCH 148/233] Explicitly set type="submit" on form buttons (#11726)
---
server/room-battle.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/server/room-battle.ts b/server/room-battle.ts
index 65862681dd..f7b9b298ef 100644
--- a/server/room-battle.ts
+++ b/server/room-battle.ts
@@ -1233,9 +1233,9 @@ export class RoomBattle extends RoomGame {
player.id ? (
``
) : player.invite ? (
- ``
+ ``
) : (
- ``
+ ``
)
));
if (this.gameType === 'multi') {
From c7717be292d186bc248fec384ef11b7cc6df6786 Mon Sep 17 00:00:00 2001
From: Sunny <165436526+Sunny-Krys@users.noreply.github.com>
Date: Tue, 17 Mar 2026 17:58:19 -0400
Subject: [PATCH 149/233] Gen 1 Stadium Rentals: Fix implementation (#11824)
* Implementing Stadium Rentals
* pidgeot fix
* Duplicate Fixing
---
config/formats.ts | 10 +-
data/mods/gen1stadium/rulesets.ts | 823 +++++++++++++++++++++++++-----
2 files changed, 696 insertions(+), 137 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index f5ddd4640c..3d6dc81ada 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5490,14 +5490,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
desc: `Only Pokémon sets that can be rented through the American Stadium Poké Cup are legal.`,
mod: 'gen1stadium',
searchShow: false,
- ruleset: ['Standard', 'Team Preview', 'Stadium Poke Cup Rentals'],
- banlist: ['All Pokemon'],
- unbanlist: [
- 'Abra', 'Aerodactyl', 'Alakazam', 'Arbok', 'Articuno', 'Chansey', 'Charizard', 'Clefable', 'Cloyster', 'Dewgong', 'Dodrio', 'Dragonair',
- 'Electabuzz', 'Exeggutor', 'Gengar', 'Geodude', 'Graveler', 'Gyarados', 'Haunter', 'Ivysaur', 'Jolteon', 'Jynx', 'Kabutops', 'Kadabra',
- 'Lapras', 'Meowth', 'Moltres', 'Ninetales', 'Omanyte', 'Omastar', 'Paras', 'Persian', 'Poliwhirl', 'Poliwrath', 'Rapidash', 'Raticate',
- 'Rhyhorn', 'Snorlax', 'Starmie', 'Tangela', 'Tauros', 'Wartortle', 'Zapdos',
- ],
+ ruleset: ['Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Nickname Clause', 'Team Preview', 'Stadium Poke Cup Rentals'],
+ banlist: ['Uber'],
},
{
name: "[Gen 1] Tradebacks OU",
diff --git a/data/mods/gen1stadium/rulesets.ts b/data/mods/gen1stadium/rulesets.ts
index abee0a3394..6d81137ec5 100644
--- a/data/mods/gen1stadium/rulesets.ts
+++ b/data/mods/gen1stadium/rulesets.ts
@@ -17,181 +17,746 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
onChangeSet(set, format, setHas, teamHas) {
set.level = 50;
- set.ivs = { hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30 };
switch (this.dex.species.get(set.species).name) {
- case 'Abra':
- set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
+ case 'Bulbasaur':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Leech Seed', 'Toxic', 'Body Slam', 'Razor Leaf'];
+ break;
+ case 'Ivysaur':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Razor Leaf', 'Sleep Powder', 'Growth', 'Double-Edge'];
+ break;
+ case 'Venusaur':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
set.moves = ['Psychic', 'Seismic Toss', 'Reflect', 'Thunder Wave'];
break;
- case 'Aerodactyl':
- set.evs = { hp: 7, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Fly', 'Hyper Beam', 'Supersonic', 'Dragon Rage'];
+ case 'Charmander':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Flamethrower', 'Slash', 'Dig', 'Fire Spin'];
break;
- case 'Alakazam':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Psybeam', 'Metronome', 'Disable', 'Tri Attack'];
- break;
- case 'Arbok':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
- set.moves = ['Glare', 'Wrap', 'Dig', 'Strength'];
- break;
- case 'Articuno':
- set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
- set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
- set.moves = ['Ice Beam', 'Sky Attack', 'Razor Wind', 'Substitute'];
- break;
- case 'Chansey':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Thunder', 'Fire Blast', 'Minimize', 'Rest'];
+ case 'Charmeleon':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Flamethrower', 'Counter', 'Seismic Toss', 'Strength'];
break;
case 'Charizard':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
set.moves = ['Fly', 'Swords Dance', 'Fire Spin', 'Fire Blast'];
break;
+ case 'Squirtle':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Surf', 'Blizzard', 'Body Slam', 'Dig'];
+ break;
+ case 'Wartortle':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Surf', 'Strength', 'Rest', 'Ice Beam'];
+ break;
+ case 'Blastoise':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Hydro Pump', 'Skull Bash', 'Withdraw', 'Seismic Toss'];
+ break;
+ case 'Caterpie':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['String Shot', 'Tackle'];
+ break;
+ case 'Metapod':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['String Shot', 'Tackle'];
+ break;
+ case 'Butterfree':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Psychic', 'Supersonic', 'Mega Drain', 'Stun Spore'];
+ break;
+ case 'Weedle':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['String Shot', 'Poison Sting'];
+ break;
+ case 'Kakuna':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['String Shot', 'Poison Sting'];
+ break;
+ case 'Beedrill':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Twineedle', 'Hyper Beam', 'Toxic', 'Focus Energy'];
+ break;
+ case 'Pidgey':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Fly', 'Toxic', 'Double-Edge', 'Double Team'];
+ break;
+ case 'Pidgeotto':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Fly', 'Quick Attack', 'Sand Attack', 'Take Down'];
+ break;
+ case 'Pidgeot':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Mirror Move', 'Fly', 'Quick Attack', 'Sand Attack'];
+ break;
+ case 'Rattata':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Super Fang', 'Blizzard', 'Quick Attack', 'Hyper Fang'];
+ break;
+ case 'Raticate':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Hyper Fang', 'Hyper Beam', 'Focus Energy', 'Thunder'];
+ break;
+ case 'Spearow':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Drill Peck', 'Mirror Move', 'Double Team', 'Double-Edge'];
+ break;
+ case 'Fearow':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Drill Peck', 'Mirror Move', 'Fury Attack', 'Swift'];
+ break;
+ case 'Ekans':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Earthquake', 'Acid', 'Screech', 'Body Slam'];
+ break;
+ case 'Arbok':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Glare', 'Wrap', 'Dig', 'Strength'];
+ break;
+ case 'Pikachu':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Thunderbolt', 'Slam', 'Thunder Wave', 'Seismic Toss'];
+ break;
+ case 'Raichu':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Thunder', 'Thunder Wave', 'Flash', 'Mega Kick'];
+ break;
+ case 'Sandshrew':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Earthquake', 'Slash', 'Seismic Toss', 'Sand Attack'];
+ break;
+ case 'Sandslash':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Dig', 'Swift', 'Seismic Toss', 'Sand Attack'];
+ break;
+ case 'Nidoran-F':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Toxic', 'Thunderbolt', 'Body Slam', 'Blizzard'];
+ break;
+ case 'Nidorina':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Toxic', 'Thunder', 'Double-Edge', 'Ice Beam'];
+ break;
+ case 'Nidoqueen':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Toxic', 'Double Kick', 'Bite', 'Earthquake'];
+ break;
+ case 'Nidoran-M':
+ set.evs = { hp: 177, atk: 176, def: 176, spa: 176, spd: 176, spe: 176 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Blizzard', 'Body Slam', 'Thunderbolt', 'Focus Energy'];
+ break;
+ case 'Nidorino':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Double-Edge', 'Horn Drill', 'Focus Energy', 'Thunder'];
+ break;
+ case 'Nidoking':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Earthquake', 'Horn Drill', 'Rage', 'Substitute'];
+ break;
+ case 'Clefairy':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Thunderbolt', 'Psychic', 'Body Slam', 'Blizzard'];
+ break;
case 'Clefable':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
set.moves = ['Sing', 'Tri Attack', 'Minimize', 'Ice Beam'];
break;
+ case 'Vulpix':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Flamethrower', 'Dig', 'Confuse Ray', 'Double-Edge'];
+ break;
+ case 'Ninetales':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Fire Blast', 'Skull Bash', 'Confuse Ray', 'Tail Whip'];
+ break;
+ case 'Jigglypuff':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Sing', 'Body Slam', 'Seismic Toss', 'Psychic'];
+ break;
+ case 'Wigglytuff':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Sing', 'Double-Edge', 'Submission', 'Thunderbolt'];
+ break;
+ case 'Zubat':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Confuse Ray', 'Mega Drain', 'Toxic', 'Double-Edge'];
+ break;
+ case 'Golbat':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Confuse Ray', 'Mega Drain', 'Bite', 'Haze'];
+ break;
+ case 'Oddish':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Petal Dance', 'Toxic', 'Mega Drain', 'Double-Edge'];
+ break;
+ case 'Gloom':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Petal Dance', 'Take Down', 'Mega Drain', 'Stun Spore'];
+ break;
+ case 'Vileplume':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Petal Dance', 'Sleep Powder', 'Acid', 'Cut'];
+ break;
+ case 'Paras':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Spore', 'Slash', 'Dig', 'Mega Drain'];
+ break;
+ case 'Parasect':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Spore', 'Take Down', 'Dig', 'Solar Beam'];
+ break;
+ case 'Venonat':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Psychic', 'Mega Drain', 'Double-Edge', 'Stun Spore'];
+ break;
+ case 'Venomoth':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Psychic', 'Supersonic', 'Solar Beam', 'Swift'];
+ break;
+ case 'Diglett':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Earthquake', 'Slash', 'Sand Attack', 'Rock Slide'];
+ break;
+ case 'Dugtrio':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Dig', 'Sand Attack', 'Toxic', 'Hyper Beam'];
+ break;
+ case 'Meowth':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Slash', 'Thunderbolt', 'Swift', 'Double Team'];
+ break;
+ case 'Persian':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Slash', 'Bubble Beam', 'Mimic', 'Growl'];
+ break;
+ case 'Psyduck':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Surf', 'Confusion', 'Dig', 'Blizzard'];
+ break;
+ case 'Golduck':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Ice Beam', 'Surf', 'Toxic', 'Disable'];
+ break;
+ case 'Mankey':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Submission', 'Rock Slide', 'Seismic Toss', 'Screech'];
+ break;
+ case 'Primeape':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Fury Swipes', 'Rock Slide', 'Low Kick', 'Screech'];
+ break;
+ case 'Growlithe':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Flamethrower', 'Body Slam', 'Reflect', 'Dig'];
+ break;
+ case 'Arcanine':
+ set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Fire Blast', 'Take Down', 'Dragon Rage', 'Substitute'];
+ break;
+ case 'Poliwag':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Body Slam', 'Blizzard', 'Surf', 'Amnesia'];
+ break;
+ case 'Poliwhirl':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Hypnosis', 'Surf', 'Ice Beam', 'Earthquake'];
+ break;
+ case 'Poliwrath':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Hypnosis', 'Submission', 'Counter', 'Hydro Pump'];
+ break;
+ case 'Abra':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Psychic', 'Seismic Toss', 'Reflect', 'Thunder Wave'];
+ break;
+ case 'Kadabra':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Psychic', 'Counter', 'Recover', 'Dig'];
+ break;
+ case 'Alakazam':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Psybeam', 'Metronome', 'Disable', 'Tri Attack'];
+ break;
+ case 'Machop':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Submission', 'Rock Slide', 'Earthquake', 'Focus Energy'];
+ break;
+ case 'Machoke':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Submission', 'Strength', 'Rock Slide', 'Focus Energy'];
+ break;
+ case 'Machamp':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Low Kick', 'Strength', 'Counter', 'Focus Energy'];
+ break;
+ case 'Bellsprout':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Razor Leaf', 'Growth', 'Mega Drain', 'Stun Spore'];
+ break;
+ case 'Weepinbell':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Razor Leaf', 'Acid', 'Wrap', 'Toxic'];
+ break;
+ case 'Victreebel':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Solar Beam', 'Acid', 'Reflect', 'Slam'];
+ break;
+ case 'Tentacool':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Surf', 'Supersonic', 'Mega Drain', 'Blizzard'];
+ break;
+ case 'Tentacruel':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Acid', 'Supersonic', 'Hydro Pump', 'Cut'];
+ break;
+ case 'Geodude':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Earthquake', 'Seismic Toss', 'Rock Slide', 'Explosion'];
+ break;
+ case 'Graveler':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Earthquake', 'Seismic Toss', 'Strength', 'Self-Destruct'];
+ break;
+ case 'Golem':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Dig', 'Seismic Toss', 'Fire Blast', 'Metronome'];
+ break;
+ case 'Ponyta':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Fire Blast', 'Agility', 'Horn Drill', 'Body Slam'];
+ break;
+ case 'Rapidash':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Fire Blast', 'Stomp', 'Toxic', 'Fire Spin'];
+ break;
+ case 'Slowpoke':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Surf', 'Psychic', 'Thunder Wave', 'Amnesia'];
+ break;
+ case 'Slowbro':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Surf', 'Psychic', 'Disable', 'Withdraw'];
+ break;
+ case 'Magnemite':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Thunderbolt', 'Thunder Wave', 'Supersonic', 'Double-Edge'];
+ break;
+ case 'Magneton':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Thunderbolt', 'Screech', 'Supersonic', 'Swift'];
+ break;
+ case 'Farfetch\u2019d':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Slash', 'Sand Attack', 'Toxic', 'Fly'];
+ break;
+ case 'Doduo':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Drill Peck', 'Tri Attack', 'Double Team', 'Reflect'];
+ break;
+ case 'Dodrio':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Fly', 'Tri Attack', 'Agility', 'Reflect'];
+ break;
+ case 'Seel':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Ice Beam', 'Body Slam', 'Horn Drill', 'Surf'];
+ break;
+ case 'Dewgong':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Aurora Beam', 'Heabutt', 'Rest', 'Surf'];
+ break;
+ case 'Grimer':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Sludge', 'Body Slam', 'Explosion', 'Screech'];
+ break;
+ case 'Muk':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Sludge', 'Thunderbolt', 'Hyper Beam', 'Self-Destruct'];
+ break;
+ case 'Shellder':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Surf', 'Explosion', 'Blizzard', 'Tri Attack'];
+ break;
case 'Cloyster':
set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
set.moves = ['Clamp', 'Spike Cannon', 'Ice Beam', 'Supersonic'];
break;
- case 'Dewgong':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Aurora Beam', 'Headbutt', 'Rest', 'Surf'];
+ case 'Gastly':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Hypnosis', 'Dream Eater', 'Psychic', 'Confuse Ray'];
break;
- case 'Dodrio':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
- set.moves = ['Fly', 'Tri Attack', 'Agility', 'Reflect'];
+ case 'Haunter':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Mega Drain', 'Psychic', 'Explosion', 'Confuse Ray'];
break;
- case 'Dragonair':
- set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Hyper Beam', 'Swift', 'Ice Beam', 'Thunder Wave'];
+ case 'Gengar':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Thunderbolt', 'Night Shade', 'Hypnosis', 'Confuse Ray'];
break;
- case 'Electabuzz':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 28, spd: 28, spe: 28 };
- set.moves = ['Thunder Punch', 'Mega Punch', 'Psychic', 'Thunder Wave'];
+ case 'Onix':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Earthquake', 'Rock Slide', 'Strength', 'Explosion'];
+ break;
+ case 'Drowzee':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Hypnois', 'Dream Eater', 'Psychic', 'Tri Attack'];
+ break;
+ case 'Hypno':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Hypnosis', 'Headbutt', 'Dream Eater', 'Meditate'];
+ break;
+ case 'Krabby':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Crabhammer', 'Guillotine', 'Double-Edge', 'Blizzard'];
+ break;
+ case 'Kingler':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Crabhammer', 'Guillotine', 'Stomp', 'Substitute'];
+ break;
+ case 'Voltorb':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Thunderbolt', 'Thunder Wave', 'Swift', 'Explosion'];
+ break;
+ case 'Electrode':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Thunder', 'Thunder Wave', 'Swift', 'Self-Destruct'];
+ break;
+ case 'Exeggcute':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Psychic', 'Explosion', 'Leech Seed', 'Toxic'];
break;
case 'Exeggutor':
set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
set.moves = ['Mega Drain', 'Stun Spore', 'Leech Seed', 'Egg Bomb'];
break;
- case 'Gengar':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Thunderbolt', 'Night Shade', 'Hypnosis', 'Confuse Ray'];
+ case 'Cubone':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Earthquake', 'Submission', 'Blizzard', 'Strength'];
break;
- case 'Geodude':
- set.evs = { hp: 73, atk: 72, def: 64, spa: 72, spd: 72, spe: 64 };
- set.moves = ['Earthquake', 'Seismic Toss', 'Rock Slide', 'Explosion'];
+ case 'Marowak':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Bonemerang', 'Thrash', 'Fire Blast', 'Focus Energy'];
break;
- case 'Graveler':
- set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 44 };
- set.moves = ['Earthquake', 'Seismic Toss', 'Strength', 'Self-Destruct'];
+ case 'Hitmonlee':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['High Jump Kick', 'Mega Kick', 'Metronome', 'Seismic Toss'];
+ break;
+ case 'Hitmonchan':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Submission', 'Thunder Punch', 'Ice Punch', 'Strength'];
+ break;
+ case 'Lickitung':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Strength', 'Blizzard', 'Thunder', 'Fire Blast'];
+ break;
+ case 'Koffing':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Sludge', 'Toxic', 'Thunderbolt', 'Explosion'];
+ break;
+ case 'Weezing':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Sludge', 'Hyper Beam', 'Fire Blast', 'Self-Destruct'];
+ break;
+ case 'Rhyhorn':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Earthquake', 'Body Slam', 'Rock Slide', 'Fire Blast'];
+ break;
+ case 'Rhydon':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Dig', 'Strength', 'Thunder', 'Surf'];
+ break;
+ case 'Chansey':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Thunder', 'Fire Blast', 'Minimize', 'Rest'];
+ break;
+ case 'Tangela':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Mega Drain', 'Growth', 'Toxic', 'Double-Edge'];
+ break;
+ case 'Kangaskhan':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Dizzy Punch', 'Rock Slide', 'Surf', 'Thunderbolt'];
+ break;
+ case 'Horsea':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Hydro Pump', 'Toxic', 'Smokescreen', 'Ice Beam'];
+ break;
+ case 'Seadra':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Surf', 'Toxic', 'Smokescreen', 'Swift'];
+ break;
+ case 'Goldeen':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Surf', 'Supersonic', 'Horn Drill', 'Blizzard'];
+ break;
+ case 'Seaking':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Waterfall', 'Supersonic', 'Horn Attack', 'Ice Beam'];
+ break;
+ case 'Staryu':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Hydro Pump', 'Recover', 'Thunderbolt', 'Psychic'];
+ break;
+ case 'Starmie':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Surf', 'Thunder', 'Swift', 'Harden'];
+ break;
+ case 'Mr. Mime':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Barrier', 'Psychic', 'Metronome', 'Seismic Toss'];
+ break;
+ case 'Scyther':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Slash', 'Wing Attack', 'Leer', 'Double Team'];
+ break;
+ case 'Jynx':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Ice Punch', 'Mega Punch', 'Psychic', 'Lovely Kiss'];
+ break;
+ case 'Electabuzz':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Thunder Punch', 'Mega Punch', 'Psychic', 'Thunder Wave'];
+ break;
+ case 'Magmar':
+ set.evs = { hp: 121, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 };
+ set.ivs = { hp: 6, atk: 8, def: 8, spa: 6, spd: 6, spe: 6 };
+ set.moves = ['Fire Punch', 'Mega Punch', 'Psychic', 'Smokescreen'];
+ break;
+ case 'Pinsir':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Strength', 'Harden', 'Seismic Toss', 'Guillotine'];
+ break;
+ case 'Tauros':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Double-Edge', 'Fire Blast', 'Tail Whip', 'Bide'];
+ break;
+ case 'Magikarp':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Splash', 'Tackle'];
break;
case 'Gyarados':
set.evs = { hp: 105, atk: 104, def: 104, spa: 104, spd: 104, spe: 104 };
set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
set.moves = ['Surf', 'Dragon Rage', 'Bite', 'Fire Blast'];
break;
- case 'Haunter':
- set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Mega Drain', 'Psychic', 'Explosion', 'Confuse Ray'];
- break;
- case 'Ivysaur':
- set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Sleep Powder', 'Razor Leaf', 'Growth', 'Double-Edge'];
- break;
- case 'Jolteon':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Thunderbolt', 'Pin Missile', 'Toxic', 'Sand Attack'];
- break;
- case 'Jynx':
- set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Ice Punch', 'Mega Punch', 'Psychic', 'Lovely Kiss'];
- break;
- case 'Kabutops':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Surf', 'Swords Dance', 'Mega Kick', 'Submission'];
- break;
- case 'Kadabra':
- set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Psychic', 'Counter', 'Recover', 'Dig'];
- break;
case 'Lapras':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
set.moves = ['Ice Beam', 'Solar Beam', 'Body Slam', 'Sing'];
break;
- case 'Meowth':
- set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
- set.moves = ['Slash', 'Thunderbolt', 'Swift', 'Double Team'];
+ case 'Ditto':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Transform'];
+ break;
+ case 'Eevee':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Body Slam', 'Swift', 'Sand Attack', 'Toxic'];
+ break;
+ case 'Vaporeon':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Surf', 'Quick Attack', 'Sand Attack', 'Acid Armor'];
+ break;
+ case 'Jolteon':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Thunderbolt', 'Pin Missile', 'Toxic', 'Sand Attack'];
+ break;
+ case 'Flareon':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Fire Blast', 'Take Down', 'Smog', 'Sand Attack'];
+ break;
+ case 'Omanyte':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Surf', 'Ice Beam', 'Double Edge', 'Double Team'];
+ break;
+ case 'Omastar':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Hydro Pump', 'Submission', 'Spike Cannon', 'Withdraw'];
+ break;
+ case 'Kabuto':
+ set.evs = { hp: 145, atk: 144, def: 144, spa: 144, spd: 144, spe: 144 };
+ set.ivs = { hp: 12, atk: 12, def: 10, spa: 12, spd: 12, spe: 10 };
+ set.moves = ['Hydro Pump', 'Blizzard', 'Slash', 'Double Team'];
+ break;
+ case 'Kabutops':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Surf', 'Swords Dance', 'Mega Kick', 'Submission'];
+ break;
+ case 'Aerodactyl':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Fly', 'Hyper Beam', 'Supersonic', 'Dragon Rage'];
+ break;
+ case 'Snorlax':
+ set.evs = { hp: 113, atk: 112, def: 112, spa: 112, spd: 112, spe: 112 };
+ set.ivs = { hp: 4, atk: 4, def: 4, spa: 4, spd: 4, spe: 6 };
+ set.moves = ['Mega Kick', 'Rock Slide', 'Metronome', 'Rest'];
+ break;
+ case 'Articuno':
+ set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Ice Beam', 'Sky Attack', 'Razor Wind', 'Substitute'];
+ break;
+ case 'Zapdos':
+ set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
+ set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
+ set.moves = ['Thunderbolt', 'Sky Attack', 'Thunder Wave', 'Flash'];
break;
case 'Moltres':
set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
set.moves = ['Fire Blast', 'Fly', 'Swift', 'Substitute'];
break;
- case 'Ninetales':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Fire Blast', 'Skull Bash', 'Confuse Ray', 'Tail Whip'];
+ case 'Dratini':
+ set.evs = { hp: 161, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 };
+ set.ivs = { hp: 14, atk: 12, def: 14, spa: 14, spd: 14, spe: 14 };
+ set.moves = ['Hyper Beam', 'Body Slam', 'Thunderbolt', 'Thunder Wave'];
break;
- case 'Omanyte':
- set.evs = { hp: 73, atk: 72, def: 64, spa: 72, spd: 72, spe: 64 };
- set.moves = ['Surf', 'Ice Beam', 'Double-Edge', 'Double Team'];
+ case 'Dragonair':
+ set.evs = { hp: 129, atk: 128, def: 128, spa: 128, spd: 128, spe: 128 };
+ set.ivs = { hp: 10, atk: 8, def: 10, spa: 10, spd: 10, spe: 8 };
+ set.moves = ['Hyper Beam', 'Swift', 'Ice Beam', 'Thunder Wave'];
break;
- case 'Omastar':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Hydro Pump', 'Submission', 'Spike Cannon', 'Withdraw'];
- break;
- case 'Paras':
- set.evs = { hp: 97, atk: 88, def: 96, spa: 96, spd: 96, spe: 96 };
- set.moves = ['Spore', 'Slash', 'Dig', 'Mega Drain'];
- break;
- case 'Persian':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
- set.moves = ['Slash', 'Bubble Beam', 'Mimic', 'Growl'];
- break;
- case 'Poliwhirl':
- set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Hypnosis', 'Surf', 'Ice Beam', 'Earthquake'];
- break;
- case 'Poliwrath':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Hypnosis', 'Submission', 'Counter', 'Hydro Pump'];
- break;
- case 'Rapidash':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Fire Blast', 'Stomp', 'Toxic', 'Fire Spin'];
- break;
- case 'Rhyhorn':
- set.evs = { hp: 49, atk: 44, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Earthquake', 'Body Slam', 'Rock Slide', 'Fire Blast'];
- break;
- case 'Snorlax':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Mega Kick', 'Rock Slide', 'Metronome', 'Rest'];
- break;
- case 'Starmie':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Surf', 'Thunder', 'Swift', 'Harden'];
- break;
- case 'Tangela':
- set.evs = { hp: 25, atk: 32, def: 32, spa: 24, spd: 24, spe: 24 };
- set.moves = ['Mega Drain', 'Growth', 'Toxic', 'Double-Edge'];
- break;
- case 'Tauros':
- set.evs = { hp: 9, atk: 8, def: 8, spa: 8, spd: 8, spe: 16 };
- set.moves = ['Double-Edge', 'Fire Blast', 'Tail Whip', 'Bide'];
- break;
- case 'Wartortle':
- set.evs = { hp: 49, atk: 40, def: 48, spa: 48, spd: 48, spe: 40 };
- set.moves = ['Surf', 'Strength', 'Rest', 'Ice Beam'];
- break;
- case 'Zapdos':
+ case 'Dragonite':
set.evs = { hp: 97, atk: 96, def: 96, spa: 96, spd: 96, spe: 96 };
set.ivs = { hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0 };
- set.moves = ['Thunderbolt', 'Sky Attack', 'Thunder Wave', 'Flash'];
+ set.moves = ['Slam', 'Dragon Rage', 'Thunder', 'Agility'];
}
},
},
From 9e270bebe4c39966371f75dd050d8c6aaa1e6443 Mon Sep 17 00:00:00 2001
From: SantiagoRR2004 <114857078+SantiagoRR2004@users.noreply.github.com>
Date: Tue, 17 Mar 2026 23:04:07 +0100
Subject: [PATCH 150/233] Fix #11744; Importing mysql2 and pg when it is not
required (#11747)
---
lib/database.ts | 33 +++++++++++++++++++++++++++------
1 file changed, 27 insertions(+), 6 deletions(-)
diff --git a/lib/database.ts b/lib/database.ts
index 86027214b4..13ccb5ba61 100644
--- a/lib/database.ts
+++ b/lib/database.ts
@@ -6,14 +6,31 @@
* @author Zarel
*/
-import * as mysql from 'mysql2';
-import * as pg from 'pg';
+import type * as mysql from 'mysql2';
+import type * as pg from 'pg';
export type BasicSQLValue = string | number | null;
export type SQLRow = { [k: string]: BasicSQLValue };
export type SQLValue =
BasicSQLValue | SQLStatement | SQLStatement[] | PartialOrSQL | BasicSQLValue[] | undefined;
+let mysqlRuntime: typeof import('mysql2');
+let pgRuntime: typeof import('pg');
+
+// Lazy-load mysql2
+try {
+ mysqlRuntime = require('mysql2');
+} catch {
+ // Only throw if someone tries to use MySQL
+}
+
+// Lazy-load pg
+try {
+ pgRuntime = require('pg');
+} catch {
+ // Only throw if someone tries to use Postgres
+}
+
export function isSQL(value: any): value is SQLStatement {
/**
* This addresses a scenario where objects get out of sync due to hotpatching.
@@ -333,12 +350,13 @@ export class DatabaseTable {
export class MySQLDatabase extends Database {
override type = 'mysql' as const;
constructor(config: mysql.PoolOptions & { prefix?: string }) {
+ if (!mysqlRuntime) throw new Error(`Install the 'mysql2' module to use a MySQL database`);
const prefix = config.prefix || "";
if (config.prefix) {
config = { ...config };
delete config.prefix;
}
- super(mysql.createPool(config), prefix);
+ super(mysqlRuntime.createPool(config), prefix);
}
override _resolveSQL(query: SQLStatement): [query: string, values: BasicSQLValue[]] {
let sql = query.sql[0];
@@ -375,14 +393,16 @@ export class MySQLDatabase extends Database {
return this._query(sql, values);
}
override escapeId(id: string) {
- return mysql.escapeId(id);
+ if (!mysqlRuntime) throw new Error(`Install the 'mysql2' module to use a MySQL database`);
+ return mysqlRuntime.escapeId(id);
}
}
export class PGDatabase extends Database {
override type = 'pg' as const;
constructor(config: pg.PoolConfig) {
- super(config ? new pg.Pool(config) : null!);
+ if (!pgRuntime) throw new Error(`Install the 'pg' module to use a Postgres database`);
+ super(config ? new pgRuntime.Pool(config) : null!);
}
override _resolveSQL(query: SQLStatement): [query: string, values: BasicSQLValue[]] {
let sql = query.sql[0];
@@ -407,7 +427,8 @@ export class PGDatabase extends Database(query, values).then(res => ({ affectedRows: res.rowCount }));
}
override escapeId(id: string) {
+ if (!pgRuntime) throw new Error(`Install the 'pg' module to use a Postgres database`);
// @ts-expect-error @types/pg really needs to be updated
- return pg.escapeIdentifier(id);
+ return pgRuntime.escapeIdentifier(id);
}
}
From 307b84fe4cc993001095c2c253fa87cdb06d621e Mon Sep 17 00:00:00 2001
From: Slayer95
Date: Tue, 17 Mar 2026 18:30:54 -0500
Subject: [PATCH 151/233] Make Beat Up info withholding a rule: Beat Up
Nicknames Mod (#11825)
---
config/formats.ts | 8 +++++---
data/mods/gen2stadium2/rulesets.ts | 2 +-
data/mods/gen3/moves.ts | 6 ++++--
data/mods/gen3/rulesets.ts | 2 +-
data/mods/gen4/moves.ts | 6 ++++--
data/mods/gen4/rulesets.ts | 4 ++--
data/rulesets.ts | 16 ++++++++++++++--
7 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 3d6dc81ada..5bf614a994 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -5280,7 +5280,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
gameType: 'doubles',
ruleset: [
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
- 'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 4', 'Exact HP Mod', 'Item Clause = 1', 'Open Team Sheets',
+ 'Nickname Clause', 'Beat Up Nicknames Mod', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 4', 'Exact HP Mod', 'Item Clause = 1', 'Open Team Sheets',
],
banlist: ['Restricted Legendary', 'Mythical', 'Soul Dew'],
bestOfDefault: true,
@@ -5301,7 +5301,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
gameType: 'singles',
ruleset: [
'Obtainable', 'Team Preview', 'Species Clause', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Max Team Size = 6', 'VGC Timer',
- 'Nickname Clause', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 3', 'Exact HP Mod', "Item Clause = 1", 'Open Team Sheets',
+ 'Nickname Clause', 'Beat Up Nicknames Mod', 'Endless Battle Clause', 'Cancel Mod', 'Picked Team Size = 3', 'Exact HP Mod', "Item Clause = 1", 'Open Team Sheets',
],
banlist: ['Soul Dew', 'Restricted Legendary', 'Mythical', 'Wobbuffet + Leftovers', 'Wynaut + Leftovers'],
restricted: [],
@@ -5386,7 +5386,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: [
'Picked Team Size = 3', 'Min Level = 50', 'Max Level = 55', 'Max Total Level = 155',
- 'Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Item Clause = 1', 'Endless Battle Clause', 'Cancel Mod', 'Event Moves Clause', 'Nickname Clause', 'Team Preview',
+ 'Obtainable', 'Stadium Sleep Clause', 'Freeze Clause Mod', 'Species Clause', 'Item Clause = 1',
+ 'Endless Battle Clause', 'Cancel Mod', 'Event Moves Clause', 'Nickname Clause', 'Beat Up Nicknames Mod',
+ 'Team Preview',
],
banlist: ['Uber'],
},
diff --git a/data/mods/gen2stadium2/rulesets.ts b/data/mods/gen2stadium2/rulesets.ts
index 0a6f65af5d..7da1a4ed93 100644
--- a/data/mods/gen2stadium2/rulesets.ts
+++ b/data/mods/gen2stadium2/rulesets.ts
@@ -2,7 +2,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standardag: {
inherit: true,
ruleset: [
- 'Obtainable', 'Team Preview', 'Exact HP Mod', 'Cancel Mod',
+ 'Obtainable', 'Team Preview', 'Exact HP Mod', 'Cancel Mod', 'Beat Up Nicknames Mod',
],
},
standard: {
diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts
index 191b050808..11dccce120 100644
--- a/data/mods/gen3/moves.ts
+++ b/data/mods/gen3/moves.ts
@@ -44,8 +44,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 1,
onModifySpAPriority: -101,
onModifySpA(atk, pokemon, defender, move) {
- // https://www.smogon.com/forums/posts/8992145/
- // this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0].name);
+ if (!this.ruleTable.has('beatupnicknamesmod')) {
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
+ this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0]!.name);
+ }
this.event.modifier = 1;
return this.dex.species.get(move.allies!.shift()!.set.species).baseStats.atk;
},
diff --git a/data/mods/gen3/rulesets.ts b/data/mods/gen3/rulesets.ts
index 66f9ff2408..637f7d2197 100644
--- a/data/mods/gen3/rulesets.ts
+++ b/data/mods/gen3/rulesets.ts
@@ -13,7 +13,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
name: 'Standard Draft',
desc: "The custom Draft League ruleset",
ruleset: [
- 'Obtainable', 'Nickname Clause', '+Unreleased', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'Obtainable', 'Nickname Clause', 'Beat Up Nicknames Mod', '+Unreleased', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
'One Boost Passer Clause', 'Freeze Clause Mod', 'Accuracy Moves Clause', 'Baton Pass Trap Clause',
],
banlist: [
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 848090153c..44903ec997 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -92,8 +92,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 1,
onModifyAtkPriority: -101,
onModifyAtk(atk, pokemon, defender, move) {
- // https://www.smogon.com/forums/posts/8992145/
- // this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0].name);
+ if (!this.ruleTable.has('beatupnicknamesmod')) {
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
+ this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0]!.name);
+ }
this.event.modifier = 1;
return this.dex.species.get(move.allies!.shift()!.set.species).baseStats.atk;
},
diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts
index 941bd745da..1a75078179 100644
--- a/data/mods/gen4/rulesets.ts
+++ b/data/mods/gen4/rulesets.ts
@@ -2,7 +2,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
standardag: {
inherit: true,
ruleset: [
- 'Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Endless Battle Clause',
+ 'Obtainable', 'HP Percentage Mod', 'Cancel Mod', 'Beat Up Nicknames Mod', 'Endless Battle Clause',
],
},
standard: {
@@ -14,7 +14,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
},
flatrules: {
inherit: true,
- ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
},
teampreview: {
inherit: true,
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 854b188ad4..fbe552ff14 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -38,7 +38,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
effectType: 'ValidatorRule',
name: 'Flat Rules',
desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.",
- ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
banlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'],
},
limittworestricted: {
@@ -159,7 +159,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
name: 'Standard Draft',
desc: "The custom Draft League ruleset",
ruleset: [
- 'Obtainable', 'Nickname Clause', '+Unreleased', '+CAP', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'Obtainable', 'Nickname Clause', 'Beat Up Nicknames Mod', '+Unreleased', '+CAP', 'Sketch Post-Gen 7 Moves', 'Team Preview', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
],
// timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true},
},
@@ -823,6 +823,18 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
// hardcoded in team-validator.js, so we are done.
},
},
+ beatupnicknamesmod: {
+ effectType: 'Rule',
+ name: 'Beat Up Nicknames Mod',
+ desc: "Prevents Beat Up from revealing any party members, enforcing gameplay that assumes optimal Pokémon nicknaming strategies.",
+ onBegin() {
+ if (this.gen <= 4) {
+ this.add('rule', `Beat Up Nicknames Mod: Beat Up will not reveal any party members`);
+ }
+ },
+ // https://www.smogon.com/forums/posts/8992145/
+ // hardcoded in data/mods/gen3/moves.ts, data/mods/gen4/moves.ts
+ },
itemclause: {
effectType: 'ValidatorRule',
name: 'Item Clause',
From e7b13b7df362fb50c4612ae9f3f19ab7a6d1ead4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 17 Mar 2026 23:37:23 +0000
Subject: [PATCH 152/233] Implement Pomeg Glitch Clause (#11800)
---
config/formats.ts | 10 +++++-----
data/rulesets.ts | 22 +++++++++++++++++-----
sim/team-validator.ts | 4 ++--
test/sim/team-validator/breeding.js | 4 +++-
4 files changed, 27 insertions(+), 13 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 5bf614a994..b2fb884b51 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -4683,7 +4683,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 6] LC",
mod: 'gen6',
searchShow: false,
- ruleset: ['Standard', 'Little Cup'],
+ ruleset: ['Standard', 'Little Cup', 'Pomeg Glitch Clause'],
banlist: [
'Drifloon', 'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Yanma',
'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
@@ -4885,7 +4885,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 5] LC",
mod: 'gen5',
searchShow: false,
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause'],
+ ruleset: ['Standard', 'Little Cup', 'Pomeg Glitch Clause', 'Sleep Moves Clause'],
banlist: [
'Gligar', 'Meditite', 'Misdreavus', 'Murkrow', 'Scraggy', 'Scyther', 'Sneasel', 'Tangela', 'Vulpix', 'Yanma',
'Sand Rush', 'Sand Veil', 'Berry Juice', 'Soul Dew', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger',
@@ -5040,7 +5040,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 4] LC",
mod: 'gen4',
searchShow: false,
- ruleset: ['Standard', 'Little Cup', 'Evasion Abilities Clause', 'Sleep Moves Clause'],
+ ruleset: ['Standard', 'Little Cup', 'Pomeg Glitch Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause'],
banlist: [
'Meditite', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma',
'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom', 'Swagger',
@@ -5187,7 +5187,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 3] Ubers",
mod: 'gen3',
searchShow: false,
- ruleset: ['Standard', 'Deoxys Camouflage Clause', 'One Baton Pass Clause'],
+ ruleset: ['Standard', 'Deoxys Camouflage Clause Mod', 'One Baton Pass Clause'],
banlist: ['Wobbuffet + Leftovers', 'Wynaut + Leftovers', 'Baton Pass'],
},
{
@@ -5222,7 +5222,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 3] LC",
mod: 'gen3',
searchShow: false,
- ruleset: ['Standard', 'Little Cup', 'Sleep Moves Clause', 'Accuracy Moves Clause'],
+ ruleset: ['Standard', 'Little Cup', 'Pomeg Glitch Clause', 'Sleep Moves Clause', 'Accuracy Moves Clause'],
banlist: ['Chansey', 'Diglett', 'Meditite', 'Omanyte', 'Porygon', 'Scyther', 'Wynaut', 'Zigzagoon', 'Deep Sea Tooth', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', 'Swagger', 'Thunder Wave'],
},
{
diff --git a/data/rulesets.ts b/data/rulesets.ts
index fbe552ff14..0bb49b3aac 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -1439,13 +1439,13 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
// Hardcoded in gen1/moves.ts
// Can't be disabled (no precedent for how else to handle desyncs)
},
- deoxyscamouflageclause: {
+ deoxyscamouflageclausemod: {
effectType: 'Rule',
- name: 'Deoxys Camouflage Clause',
+ name: 'Deoxys Camouflage Clause Mod',
desc: "Reveals the Deoxys forme when it is sent in battle.",
// Hardcoded into effect, cannot be disabled.
onBegin() {
- this.add('rule', 'Deoxys Camouflage Clause: Reveals the Deoxys forme when it is sent in battle.');
+ this.add('rule', 'Deoxys Camouflage Clause Mod: Reveals the Deoxys forme when it is sent in battle.');
},
},
freezeclausemod: {
@@ -1839,11 +1839,23 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
desc: "Allows Pokémon who learn Sketch to learn any Gen 8+ move (normally, Sketch is not usable in Gen 8 or Gen 9 Pre-DLC2).",
// Implemented in sim/team-validator.ts
},
- mimicglitch: {
+ mimicglitchclause: {
effectType: 'ValidatorRule',
- name: 'Mimic Glitch',
+ name: 'Mimic Glitch Clause',
desc: "Allows any Pokemon with access to Assist, Copycat, Metronome, Mimic, or Transform to gain access to almost any other move.",
// Implemented in sim/team-validator.ts
+ onBegin() {
+ this.add('rule', 'Mimic Glitch Clause: Pokemon that learn Assist, Copycat, Metronome, Mimic, or Transform can have any move.');
+ },
+ },
+ pomegglitchclause: {
+ effectType: 'ValidatorRule',
+ name: 'Pomeg Glitch Clause',
+ desc: "Allows any Pokémon from Generation 3 at level 5 or higher to have any of its level-up moves. This implementation is allowed only to enable an otherwise legal Pokémon to obtain moves it would not normally have access to at an earlier level.",
+ // Implemented in sim/team-validator.ts
+ onBegin() {
+ this.add('rule', 'Pomeg Glitch Clause: Gen 3 Pokémon at level 5+ can have any of their level-up moves.');
+ },
},
overflowstatmod: {
effectType: 'Rule',
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index c1ee6cf1a8..90befa2195 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -2652,7 +2652,7 @@ export class TeamValidator {
// we're past the required level to learn it
// (gen 7 level-up moves can be relearnered at any level)
// falls through to LMT check below
- } else if (level >= 5 && learnedGen === 3 && species.canHatch) {
+ } else if (this.ruleTable.has('pomegglitchclause') && level >= 5 && learnedGen === 3 && species.canHatch) {
// Pomeg Glitch
learned = `${learnedGen}Epomeg` as MoveSource;
} else if (species.gender !== 'N' &&
@@ -2770,7 +2770,7 @@ export class TeamValidator {
return null;
}
}
- if (ruleTable.has('mimicglitch') && species.gen < 5) {
+ if (ruleTable.has('mimicglitchclause') && species.gen < 5) {
// include the Mimic Glitch when checking this mon's learnset
const glitchMoves = ['metronome', 'copycat', 'transform', 'mimic', 'assist'];
let getGlitch = false;
diff --git a/test/sim/team-validator/breeding.js b/test/sim/team-validator/breeding.js
index 65c202766f..6e9a55ad48 100644
--- a/test/sim/team-validator/breeding.js
+++ b/test/sim/team-validator/breeding.js
@@ -192,6 +192,7 @@ describe('Team Validator', () => {
it("should allow previously illegal level up egg moves in Gen 7", () => {
team = [
{ species: 'smoochum', level: 5, ability: 'hydration', moves: ['powdersnow'], evs: { hp: 1 } },
+ { species: 'staryu', level: 5, ability: 'illuminate', moves: ['hydropump'], evs: { hp: 1 } },
];
assert.legalTeam(team, 'gen7lc');
});
@@ -200,7 +201,8 @@ describe('Team Validator', () => {
team = [
{ species: 'zigzagoon', level: 5, ability: 'pickup', moves: ['bellydrum', 'extremespeed'], evs: { hp: 1 } },
];
- assert.legalTeam(team, 'gen3ou');
+ assert.false.legalTeam(team, 'gen3ou');
+ assert.legalTeam(team, 'gen3ou@@@pomegglitchclause');
});
it("should disallow illegal egg move combinations containing past gen universal moves", () => {
From e57a806630c9fd58ba0f466e89f048d4a2bb0e3e Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Tue, 17 Mar 2026 22:58:12 -0600
Subject: [PATCH 153/233] Linked: Fix Upper Hand
---
data/mods/linked/moves.ts | 96 ++++++++++++++++-----------------------
1 file changed, 39 insertions(+), 57 deletions(-)
diff --git a/data/mods/linked/moves.ts b/data/mods/linked/moves.ts
index 1cdc9bc522..fd685b0a86 100644
--- a/data/mods/linked/moves.ts
+++ b/data/mods/linked/moves.ts
@@ -41,29 +41,23 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onTry(source, target) {
const action = this.queue.willMove(target);
- if (!action || action.choice !== 'move' ||
+ if (!action || action.choice !== 'move') return false;
+ // @ts-expect-error modded
+ if (!action.linked) {
+ const move = action.move;
+ if (move.category === 'Status' && move.id !== 'mefirst') {
+ return false;
+ }
+ } else {
// @ts-expect-error modded
- (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ if (action.linked.every(move => move.category === 'Status' && move.id !== 'mefirst')) {
+ return false;
+ }
}
- if (target.volatiles.mustrecharge && target.volatiles.mustrecharge.duration! < 2) {
+ if (target.volatiles['mustrecharge'] && target.volatiles['mustrecharge'].duration! < 2) {
// Duration may not be lower than 2 if Sucker Punch is used as a low-priority move
// i.e. if Sucker Punch is linked with a negative priority move
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
- }
- // @ts-expect-error modded
- if (action.linked) {
- // @ts-expect-error modded
- for (const linkedMove of action.linked) {
- if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
- }
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ return false;
}
},
},
@@ -71,29 +65,23 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onTry(source, target) {
const action = this.queue.willMove(target);
- if (!action || action.choice !== 'move' ||
+ if (!action || action.choice !== 'move') return false;
+ // @ts-expect-error modded
+ if (!action.linked) {
+ const move = action.move;
+ if (move.category === 'Status' && move.id !== 'mefirst') {
+ return false;
+ }
+ } else {
// @ts-expect-error modded
- (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ if (action.linked.every(move => move.category === 'Status' && move.id !== 'mefirst')) {
+ return false;
+ }
}
- if (target.volatiles.mustrecharge && target.volatiles.mustrecharge.duration! < 2) {
+ if (target.volatiles['mustrecharge'] && target.volatiles['mustrecharge'].duration! < 2) {
// Duration may not be lower than 2 if Sucker Punch is used as a low-priority move
// i.e. if Sucker Punch is linked with a negative priority move
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
- }
- // @ts-expect-error modded
- if (action.linked) {
- // @ts-expect-error modded
- for (const linkedMove of action.linked) {
- if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
- }
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ return false;
}
},
},
@@ -101,29 +89,23 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onTry(source, target) {
const action = this.queue.willMove(target);
- if (!action || action.choice !== 'move' || action.move.priority < 0.1 ||
+ if (!action || action.choice !== 'move') return false;
+ // @ts-expect-error modded
+ if (!action.linked) {
+ const move = action.move;
+ if (move.priority < 0.1 || move.category === 'Status') {
+ return false;
+ }
+ } else {
// @ts-expect-error modded
- (!action.linked && action.move.category === 'Status' && action.move.id !== 'mefirst')) {
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ if (action.linked.every(move => move.priority < 0.1 || move.category === 'Status')) {
+ return false;
+ }
}
- if (target.volatiles.mustrecharge && target.volatiles.mustrecharge.duration! < 2) {
+ if (target.volatiles['mustrecharge'] && target.volatiles['mustrecharge'].duration! < 2) {
// Duration may not be lower than 2 if Sucker Punch is used as a low-priority move
// i.e. if Sucker Punch is linked with a negative priority move
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
- }
- // @ts-expect-error modded
- if (action.linked) {
- // @ts-expect-error modded
- for (const linkedMove of action.linked) {
- if (linkedMove.category !== 'Status' || linkedMove.id === 'mefirst') return;
- }
- this.attrLastMove('[still]');
- this.add('-fail', source);
- return null;
+ return false;
}
},
},
From 6938f1f8075eb035a678af9b78a40b96d3b83640 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 18 Mar 2026 05:40:12 +0000
Subject: [PATCH 154/233] Show the hint message for Ogerpon Terastallization
only on one side (#11810)
---
sim/battle-actions.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 5a16ebbc97..acbc63a485 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1928,7 +1928,7 @@ export class BattleActions {
terastallize(pokemon: Pokemon) {
if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water'].includes(pokemon.teraType) &&
(!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) {
- this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks.");
+ this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks.", false, pokemon.side);
return;
}
From 2dfe57c13ae245d1d3df9b16e66386d6cfbeee59 Mon Sep 17 00:00:00 2001
From: TurboRx <187360786+TurboRx@users.noreply.github.com>
Date: Thu, 19 Mar 2026 06:33:59 +0530
Subject: [PATCH 155/233] Bump GitHub Actions versions (#11826)
Co-authored-by: TurboRx
---
.github/workflows/publish.yml | 6 +++---
.github/workflows/test.yml | 8 ++++----
.github/workflows/update_version.yml | 6 +++---
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index b38105fbb9..4a444aec31 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -15,7 +15,7 @@ jobs:
last_version: ${{ steps.last_version.outputs.version }}
token_exists: ${{ steps.check_token.outputs.token }}
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
fetch-depth: 50
# Check if the package.json version field has changed since the last push
@@ -40,8 +40,8 @@ jobs:
# We only want to publish if the package.json version field has changed
if: needs.get-version.outputs.current_version != needs.get-version.outputs.last_version && needs.get-version.outputs.token_exists == 'true'
steps:
- - uses: actions/checkout@v4
- - uses: actions/setup-node@v4
+ - uses: actions/checkout@v6
+ - uses: actions/setup-node@v6
with:
node-version: 18
cache: 'npm'
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9884a87c4c..861d79c597 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -28,12 +28,12 @@ jobs:
node-version: ['18.x']
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
fetch-depth: 100 # assumes PR/push to master is no larger than 100 commits. Other solutions are needlessly complex.
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
@@ -43,7 +43,7 @@ jobs:
- name: Determine which files to lint (if pull request)
if: ${{ github.event_name == 'pull_request' }}
id: changed-files
- uses: tj-actions/changed-files@v35
+ uses: tj-actions/changed-files@v47
with:
files: |
./config/*.ts
@@ -66,7 +66,7 @@ jobs:
- name: Determine whether test/sim or test/random-battles need to run (if pull request)
if: ${{ github.event_name == 'pull_request' }}
id: changed-directories
- uses: tj-actions/changed-files@v35
+ uses: tj-actions/changed-files@v47
with:
files: |
config/formats.ts
diff --git a/.github/workflows/update_version.yml b/.github/workflows/update_version.yml
index 413613f1af..b102c1b847 100644
--- a/.github/workflows/update_version.yml
+++ b/.github/workflows/update_version.yml
@@ -21,9 +21,9 @@ jobs:
update_version:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/setup-node@v4
+ - uses: actions/setup-node@v6
with:
node-version: 18
cache: 'npm'
@@ -34,7 +34,7 @@ jobs:
npm version ${{ github.event.inputs.version }} --no-git-tag-version
echo "new_version=$(jq -r .version package.json)" >> "$GITHUB_OUTPUT"
- - uses: peter-evans/create-pull-request@v7
+ - uses: peter-evans/create-pull-request@v8
with:
title: Bump package.json version to v${{ steps.bump_version.outputs.new_version }}
body: |
From 815b5f260a8598036ddddcf9836e98d9f027e81b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Thu, 19 Mar 2026 10:44:48 +0000
Subject: [PATCH 156/233] Support inheritance of ability, item, and move
conditions (#11754)
---
data/mods/gen1/moves.ts | 97 ++----
data/mods/gen1jpn/moves.ts | 10 +-
data/mods/gen1stadium/moves.ts | 12 +-
data/mods/gen2/moves.ts | 221 ++-----------
data/mods/gen3/abilities.ts | 6 +-
data/mods/gen3/items.ts | 1 +
data/mods/gen3/moves.ts | 187 ++---------
data/mods/gen3rs/items.ts | 4 -
data/mods/gen4/abilities.ts | 108 +++----
data/mods/gen4/items.ts | 11 +-
data/mods/gen4/moves.ts | 553 ++++----------------------------
data/mods/gen5/moves.ts | 95 ++----
data/mods/gen6/moves.ts | 131 +-------
data/mods/gen7/abilities.ts | 10 +-
data/mods/gen7/moves.ts | 109 +------
data/mods/gen7letsgo/moves.ts | 1 +
data/mods/gen8/moves.ts | 21 +-
data/mods/gen9dlc1/abilities.ts | 55 +---
data/moves.ts | 32 +-
sim/dex-abilities.ts | 7 +-
sim/dex-items.ts | 3 +-
sim/dex-moves.ts | 4 +-
sim/dex.ts | 9 +
23 files changed, 278 insertions(+), 1409 deletions(-)
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index a219633070..0aff641cd6 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -211,22 +211,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
disable: {
- num: 50,
- accuracy: 55,
- basePower: 0,
- category: "Status",
- name: "Disable",
- pp: 20,
- priority: 0,
- flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
- volatileStatus: 'disable',
+ inherit: true,
onTryHit(target) {
- // This function should not return if the checks are met. Adding && undefined ensures this happens.
- return target.moveSlots.some(ms => ms.pp > 0) &&
- !('disable' in target.volatiles) &&
- undefined;
+ return target.moveSlots.some(ms => ms.pp > 0);
},
condition: {
+ inherit: true,
+ durationCallback: undefined,
onStart(pokemon) {
// disable can only select moves that have pp > 0, hence the onTryHit modification
const moveSlot = this.sample(pokemon.moveSlots.filter(ms => ms.pp > 0));
@@ -235,9 +226,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
// 1-8 turns (which will in effect translate to 0-7 missed turns for the target)
this.effectState.time = this.random(1, 9);
},
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Disable');
- },
onBeforeMovePriority: 6,
onBeforeMove(pokemon, target, move) {
pokemon.volatiles['disable'].time--;
@@ -252,17 +240,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return false;
}
},
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
},
- secondary: null,
- target: "normal",
- type: "Normal",
},
dizzypunch: {
inherit: true,
@@ -319,11 +297,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
focusenergy: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Focus Energy');
- },
+ inherit: true,
// This does nothing as it's dealt with on critical hit calculation.
- onModifyMove() {},
+ onModifyCritRatio() {},
},
},
glare: {
@@ -408,9 +384,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onHit() {},
condition: {
- onStart(target) {
- this.add('-start', target, 'move: Leech Seed');
- },
+ inherit: true,
onAfterMoveSelfPriority: 1,
onAfterMoveSelf(pokemon) {
const leecher = this.getAtSlot(pokemon.volatiles['leechseed'].sourceSlot);
@@ -436,15 +410,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
lightscreen: {
- num: 113,
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Light Screen",
- pp: 30,
- priority: 0,
- flags: { metronome: 1 },
+ inherit: true,
volatileStatus: 'lightscreen',
+ sideCondition: undefined,
onTryHit(pokemon) {
if (pokemon.volatiles['lightscreen']) {
return false;
@@ -456,7 +424,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
target: "self",
- type: "Psychic",
},
metronome: {
inherit: true,
@@ -497,6 +464,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', source, 'Mimic', move.name);
},
},
+ minimize: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onSourceModifyDamage() {},
+ },
+ },
mirrormove: {
inherit: true,
onHit(pokemon) {
@@ -511,9 +485,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mist: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'Mist');
- },
+ inherit: true,
onTryBoost(boost, target, source, effect) {
if (effect.effectType === 'Move' && effect.category !== 'Status') return;
if (source && target !== source) {
@@ -629,15 +601,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
reflect: {
- num: 115,
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Reflect",
- pp: 20,
- priority: 0,
- flags: { metronome: 1 },
+ inherit: true,
volatileStatus: 'reflect',
+ sideCondition: undefined,
onTryHit(pokemon) {
if (pokemon.volatiles['reflect']) {
return false;
@@ -648,9 +614,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', pokemon, 'Reflect');
},
},
- secondary: null,
target: "self",
- type: "Psychic",
},
rest: {
inherit: true,
@@ -782,15 +746,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onModifyMove() {},
},
substitute: {
- num: 164,
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Substitute",
- pp: 10,
- priority: 0,
- flags: { metronome: 1 },
- volatileStatus: 'substitute',
+ inherit: true,
onTryHit(target) {
if (target.volatiles['substitute']) {
this.add('-fail', target, 'move: Substitute');
@@ -810,11 +766,16 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
condition: {
+ inherit: true,
onStart(target) {
this.add('-start', target, 'Substitute');
this.effectState.hp = Math.floor(target.maxhp / 4) + 1;
- delete target.volatiles['partiallytrapped'];
+ if (target.volatiles['partiallytrapped']) {
+ this.add('-end', target, target.volatiles['partiallytrapped'].sourceEffect, '[partiallytrapped]', '[silent]');
+ delete target.volatiles['partiallytrapped'];
+ }
},
+ onTryPrimaryHit() {},
onTryHitPriority: -1,
onTryHit(target, source, move) {
if (move.category === 'Status') {
@@ -878,13 +839,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return 0;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
- secondary: null,
- target: "self",
- type: "Normal",
},
superfang: {
inherit: true,
diff --git a/data/mods/gen1jpn/moves.ts b/data/mods/gen1jpn/moves.ts
index 3e26d6af8e..75dbc55f6e 100644
--- a/data/mods/gen1jpn/moves.ts
+++ b/data/mods/gen1jpn/moves.ts
@@ -13,12 +13,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
substitute: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4) + 1;
- delete target.volatiles['partiallytrapped'];
- },
- onTryHitPriority: -1,
+ inherit: true,
onTryHit(target, source, move) {
if (move.drain) {
this.add('-miss', source);
@@ -76,9 +71,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return accuracy;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
},
swift: {
diff --git a/data/mods/gen1stadium/moves.ts b/data/mods/gen1stadium/moves.ts
index 275351378c..3f125e606a 100644
--- a/data/mods/gen1stadium/moves.ts
+++ b/data/mods/gen1stadium/moves.ts
@@ -160,11 +160,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
volatileStatus: 'rage',
},
condition: {
+ inherit: true,
// Rage lock
onStart(target, source, effect) {
this.effectState.move = 'rage';
},
- onLockMove: 'rage',
onHit(target, source, move) {
if (target.boosts.atk < 6 && (move.category !== 'Status' || move.id === 'disable')) {
this.boost({ atk: 1 });
@@ -220,12 +220,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4);
- delete target.volatiles['partiallytrapped'];
- },
- onTryHitPriority: -1,
+ inherit: true,
onTryHit(target, source, move) {
if (target === source) {
this.debug('sub bypass: self hit');
@@ -275,9 +270,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return 0;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
secondary: null,
target: "self",
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index a93ee5c525..93c28999fb 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -51,64 +51,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
bide: {
inherit: true,
condition: {
- duration: 3,
+ inherit: true,
durationCallback(target, source, effect) {
return this.random(3, 5);
},
- onLockMove: 'bide',
- onStart(pokemon) {
- this.effectState.totalDamage = 0;
- this.add('-start', pokemon, 'move: Bide');
- },
- onDamagePriority: -101,
- onDamage(damage, target, source, move) {
- if (!move || move.effectType !== 'Move' || !source) return;
- this.effectState.totalDamage += damage;
- this.effectState.lastDamageSource = source;
- },
- onBeforeMove(pokemon, target, move) {
- if (this.effectState.duration === 1) {
- this.add('-end', pokemon, 'move: Bide');
- if (!this.effectState.totalDamage) {
- this.add('-fail', pokemon);
- return false;
- }
- target = this.effectState.lastDamageSource;
- if (!target) {
- this.add('-fail', pokemon);
- return false;
- }
- if (!target.isActive) {
- const possibleTarget = this.getRandomTarget(pokemon, this.dex.moves.get('pound'));
- if (!possibleTarget) {
- this.add('-miss', pokemon);
- return false;
- }
- target = possibleTarget;
- }
- const moveData = {
- id: 'bide',
- name: "Bide",
- accuracy: 100,
- damage: this.effectState.totalDamage * 2,
- category: "Physical",
- priority: 0,
- flags: { contact: 1, protect: 1 },
- effectType: 'Move',
- type: 'Normal',
- } as unknown as ActiveMove;
- this.actions.tryMoveHit(target, pokemon, moveData);
- pokemon.removeVolatile('bide');
- return false;
- }
- this.add('-activate', pokemon, 'move: Bide');
- },
- onMoveAborted(pokemon) {
- pokemon.removeVolatile('bide');
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Bide', '[silent]');
- },
},
},
counter: {
@@ -139,12 +85,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
curse: {
inherit: true,
condition: {
- onStart(pokemon, source) {
- this.add('-start', pokemon, 'Curse', `[of] ${source}`);
- },
+ inherit: true,
+ onAfterMoveSelfPriority: 0, // explicit
onAfterMoveSelf(pokemon) {
this.damage(pokemon.baseMaxhp / 4);
},
+ onResidual() {},
},
},
detect: {
@@ -157,10 +103,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return source.status !== 'slp';
},
condition: {
- duration: 2,
- onImmunity(type, pokemon) {
- if (type === 'sandstorm') return false;
- },
+ inherit: true,
onInvulnerability(target, source, move) {
if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'fissure') {
return;
@@ -172,6 +115,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
+ onSourceModifyDamage() {},
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'earthquake' || move.id === 'magnitude') {
return this.chainModify(2);
@@ -186,9 +130,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
encore: {
inherit: true,
condition: {
- durationCallback() {
- return this.random(3, 7);
- },
+ inherit: true,
onStart(target) {
const lockedMove = target.lastMoveEncore?.id || '';
const moveSlot = lockedMove ? target.getMoveData(lockedMove) : null;
@@ -199,30 +141,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.effectState.move = lockedMove;
this.add('-start', target, 'Encore');
},
- onOverrideAction(pokemon) {
- return this.effectState.move;
- },
onResidualOrder: 13,
- onResidual(target) {
- const lockedMoveSlot = target.getMoveData(this.effectState.move);
- if (lockedMoveSlot && lockedMoveSlot.pp <= 0) {
- // early termination if you run out of PP
- target.removeVolatile('encore');
- }
- },
- onEnd(target) {
- this.add('-end', target, 'Encore');
- },
- onDisableMove(pokemon) {
- if (!this.effectState.move || !pokemon.hasMove(this.effectState.move)) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
+ onResidualSubOrder: undefined,
},
},
endure: {
@@ -244,7 +164,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return source.status !== 'slp';
},
condition: {
- duration: 2,
+ inherit: true,
onInvulnerability(target, source, move) {
if (move.id === 'gust' || move.id === 'twister' || move.id === 'thunder' || move.id === 'whirlwind') {
return;
@@ -260,6 +180,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
+ onSourceModifyDamage() {},
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'gust' || move.id === 'twister') {
return this.chainModify(2);
@@ -270,9 +191,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
focusenergy: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Focus Energy');
- },
+ inherit: true,
onModifyCritRatio(critRatio) {
return critRatio + 1;
},
@@ -284,17 +203,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target.volatiles['foresight']) return false;
},
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'Foresight');
- },
- onNegateImmunity(pokemon, type) {
- if (pokemon.hasType('Ghost') && ['Normal', 'Fighting'].includes(type)) return false;
- },
- onModifyBoost(boosts) {
- if (boosts.evasion && boosts.evasion > 0) {
- boosts.evasion = 0;
- }
- },
+ inherit: true,
+ noCopy: false,
},
},
frustration: {
@@ -340,9 +250,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onHit() {},
condition: {
- onStart(target) {
- this.add('-start', target, 'move: Leech Seed');
- },
+ inherit: true,
+ onResidual() {},
onAfterMoveSelfPriority: 2,
onAfterMoveSelf(pokemon) {
if (!pokemon.hp) return;
@@ -378,10 +287,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target.volatiles['foresight'] || target.volatiles['lockon']) return false;
},
condition: {
- duration: 2,
- onSourceAccuracy(accuracy, target, source, move) {
- if (move && source === this.effectState.target && target === this.effectState.source) return true;
- },
+ inherit: true,
+ onSourceInvulnerability() {},
},
},
lowkick: {
@@ -449,15 +356,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
mist: {
- num: 54,
- accuracy: true,
- basePower: 0,
- category: "Status",
- name: "Mist",
- pp: 30,
- priority: 0,
- flags: { metronome: 1 },
+ inherit: true,
volatileStatus: 'mist',
+ sideCondition: undefined,
condition: {
onStart(pokemon) {
this.add('-start', pokemon, 'Mist');
@@ -478,9 +379,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "self",
- type: "Ice",
},
moonlight: {
inherit: true,
@@ -509,13 +408,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
nightmare: {
inherit: true,
condition: {
- noCopy: true,
- onStart(pokemon) {
- if (pokemon.status !== 'slp') {
- return false;
- }
- this.add('-start', pokemon, 'Nightmare');
- },
+ inherit: true,
+ onResidual() {},
onAfterMoveSelfPriority: 1,
onAfterMoveSelf(pokemon) {
if (pokemon.status === 'slp') this.damage(pokemon.baseMaxhp / 4);
@@ -535,16 +429,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
perishsong: {
inherit: true,
condition: {
- duration: 4,
- onEnd(target) {
- this.add('-start', target, 'perish0');
- target.faint();
- },
+ inherit: true,
onResidualOrder: 4,
- onResidual(pokemon) {
- const duration = pokemon.volatiles['perishsong'].duration;
- this.add('-start', pokemon, `perish${duration}`);
- },
},
},
petaldance: {
@@ -584,7 +470,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onModifyMove() {},
condition: {
- duration: 1,
+ inherit: true,
onBeforeSwitchOut(pokemon) {
this.debug('Pursuit start');
let alreadyAdded = false;
@@ -684,41 +570,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
safeguard: {
inherit: true,
condition: {
- 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.id === 'yawn') 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) {
- this.add('-sidestart', side, 'Safeguard');
- },
+ inherit: true,
onSideResidualOrder: 8,
- onSideEnd(side) {
- this.add('-sideend', side, 'Safeguard');
- },
},
},
selfdestruct: {
@@ -784,31 +637,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spikes: {
inherit: true,
condition: {
- // this is a side condition
- onSideStart(side) {
- if (!this.effectState.layers || this.effectState.layers === 0) {
- this.add('-sidestart', side, 'Spikes');
- this.effectState.layers = 1;
- } else {
- return false;
- }
- },
- onSwitchIn(pokemon) {
- if (!pokemon.runImmunity('Ground')) return;
- const damageAmounts = [0, 3];
- this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
- },
+ inherit: true,
+ onSideRestart: undefined,
},
},
substitute: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4);
- delete target.volatiles['partiallytrapped'];
- },
- onTryPrimaryHitPriority: -1,
+ inherit: true,
onTryPrimaryHit(target, source, move) {
if (move.stallingMove) {
this.add('-fail', source);
@@ -861,9 +697,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.runEvent('AfterSubDamage', target, source, move, damage);
return this.HIT_SUBSTITUTE;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
},
swagger: {
diff --git a/data/mods/gen3/abilities.ts b/data/mods/gen3/abilities.ts
index 86958fe650..ebb37c42d0 100644
--- a/data/mods/gen3/abilities.ts
+++ b/data/mods/gen3/abilities.ts
@@ -91,6 +91,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
},
lightningrod: {
+ inherit: true,
+ onAnyRedirectTarget() {},
onFoeRedirectTarget(target, source, source2, move) {
// don't count Hidden Power as Electric-type
if (this.dex.moves.get(move.id).type !== 'Electric') return;
@@ -98,10 +100,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
return this.effectState.target;
}
},
- flags: { breakable: 1 },
- name: "Lightning Rod",
- rating: 0,
- num: 32,
},
magnetpull: {
inherit: true,
diff --git a/data/mods/gen3/items.ts b/data/mods/gen3/items.ts
index 30526bd86b..c1dbacdc51 100644
--- a/data/mods/gen3/items.ts
+++ b/data/mods/gen3/items.ts
@@ -82,6 +82,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
num: 208,
gen: 3,
isNonstandard: "Unobtainable",
+ // No competitive use
},
fastball: {
inherit: true,
diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts
index 11dccce120..677c3c9cf4 100644
--- a/data/mods/gen3/moves.ts
+++ b/data/mods/gen3/moves.ts
@@ -26,10 +26,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
astonish: {
inherit: true,
- basePowerCallback(pokemon, target) {
- if (target.volatiles['minimize']) return 60;
- return 30;
- },
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, minimize: 1 },
},
beatup: {
inherit: true,
@@ -63,18 +60,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
accuracy: 100,
priority: 0,
condition: {
- duration: 3,
- onLockMove: 'bide',
- onStart(pokemon) {
- this.effectState.totalDamage = 0;
- this.add('-start', pokemon, 'move: Bide');
- },
- onDamagePriority: -101,
- onDamage(damage, target, source, move) {
- if (!move || move.effectType !== 'Move' || !source) return;
- this.effectState.totalDamage += damage;
- this.effectState.lastDamageSource = source;
- },
+ inherit: true,
+ onAfterSetStatus() {},
onBeforeMove(pokemon, target, move) {
if (this.effectState.duration === 1) {
this.add('-end', pokemon, 'move: Bide');
@@ -112,12 +99,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.add('-activate', pokemon, 'move: Bide');
},
- onMoveAborted(pokemon) {
- pokemon.removeVolatile('bide');
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Bide', '[silent]');
- },
},
},
blizzard: {
@@ -183,17 +164,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
counter: {
inherit: true,
condition: {
- duration: 1,
- noCopy: true,
- onStart(target, source, move) {
- this.effectState.slot = null;
- this.effectState.damage = 0;
- },
- onRedirectTargetPriority: -1,
+ inherit: true,
onRedirectTarget(target, source, source2) {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
+ onDamagingHit() {},
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@@ -227,48 +203,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
accuracy: 55,
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
- volatileStatus: 'disable',
condition: {
+ inherit: true,
durationCallback() {
return this.random(2, 6);
},
- noCopy: true,
- onStart(pokemon) {
- if (!this.queue.willMove(pokemon)) {
- this.effectState.duration!++;
- }
- if (!pokemon.lastMove) {
- return false;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === pokemon.lastMove.id) {
- if (!moveSlot.pp) {
- return false;
- } else {
- this.add('-start', pokemon, 'Disable', moveSlot.move);
- this.effectState.move = pokemon.lastMove.id;
- return;
- }
- }
- }
- return false;
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Disable');
- },
- onBeforeMove(attacker, defender, move) {
- if (move.id === this.effectState.move) {
- this.add('cant', attacker, 'Disable', move);
- return false;
- }
- },
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
+ "onResidualOrder": undefined,
+ "onResidualSubOrder": undefined,
},
},
dive: {
@@ -312,51 +253,15 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
volatileStatus: 'encore',
condition: {
+ inherit: true,
durationCallback() {
return this.random(3, 7);
},
- onStart(target, source) {
- const moveSlot = target.lastMove ? target.getMoveData(target.lastMove.id) : null;
- if (!target.lastMove || target.lastMove.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
- // it failed
- return false;
- }
- this.effectState.move = target.lastMove.id;
- this.add('-start', target, 'Encore');
- },
- onOverrideAction(pokemon) {
- return this.effectState.move;
- },
- onResidualOrder: 10,
- onResidualSubOrder: 14,
- onResidual(target) {
- const moveSlot = target.getMoveData(this.effectState.move);
- if (moveSlot && moveSlot.pp <= 0) {
- // early termination if you run out of PP
- target.removeVolatile('encore');
- }
- },
- onEnd(target) {
- this.add('-end', target, 'Encore');
- },
- onDisableMove(pokemon) {
- if (!this.effectState.move || !pokemon.hasMove(this.effectState.move)) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
},
},
extrasensory: {
inherit: true,
- basePowerCallback(pokemon, target) {
- if (target.volatiles['minimize']) return 160;
- return 80;
- },
+ flags: { protect: 1, mirror: 1, metronome: 1, minimize: 1 },
},
fakeout: {
inherit: true,
@@ -401,12 +306,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
volatileStatus: undefined,
slotCondition: 'followme',
condition: {
- duration: 1,
+ inherit: true,
onStart(target, source, effect) {
this.add('-singleturn', target, 'move: Follow Me');
this.effectState.slot = target.getSlot();
},
- onFoeRedirectTargetPriority: 1,
onFoeRedirectTarget(target, source, source2, move) {
const userSlot = this.getAtSlot(this.effectState.slot);
if (this.validTarget(userSlot, source, move.target)) {
@@ -504,17 +408,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mirrorcoat: {
inherit: true,
condition: {
- duration: 1,
- noCopy: true,
- onStart(target, source, move) {
- this.effectState.slot = null;
- this.effectState.damage = 0;
- },
- onRedirectTargetPriority: -1,
+ inherit: true,
onRedirectTarget(target, source, source2) {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
+ onDamagingHit() {},
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@@ -555,10 +454,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
needlearm: {
inherit: true,
- basePowerCallback(pokemon, target) {
- if (target.volatiles['minimize']) return 120;
- return 60;
- },
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, minimize: 1 },
},
nightmare: {
inherit: true,
@@ -697,28 +593,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, bypasssub: 1, metronome: 1 },
condition: {
+ inherit: true,
duration: 2,
- onStart(target) {
- this.add('-start', target, 'move: Taunt');
- },
- onResidualOrder: 10,
- onResidualSubOrder: 15,
+ durationCallback: undefined,
onEnd(target) {
this.add('-end', target, 'move: Taunt', '[silent]');
},
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (this.dex.moves.get(moveSlot.move).category === 'Status') {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
- onBeforeMove(attacker, defender, move) {
- if (move.category === 'Status') {
- this.add('cant', attacker, 'move: Taunt', move);
- return false;
- }
- },
+ onBeforeMovePriority: undefined,
},
},
teeterdance: {
@@ -732,37 +613,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
uproar: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'Uproar');
- // 2-5 turns
- this.effectState.duration = this.random(2, 6);
- },
- onResidual(target) {
- if (target.volatiles['throatchop']) {
- target.removeVolatile('uproar');
- return;
- }
- if (target.lastMove && target.lastMove.id === 'struggle') {
- // don't lock
- delete target.volatiles['uproar'];
- }
- this.add('-start', target, 'Uproar', '[upkeep]');
- },
- onResidualOrder: 10,
- onResidualSubOrder: 11,
- onEnd(target) {
- this.add('-end', target, 'Uproar');
- },
- onLockMove: 'uproar',
- onAnySetStatus(status, pokemon) {
- if (status.id === 'slp') {
- if (pokemon === this.effectState.target) {
- this.add('-fail', pokemon, 'slp', '[from] Uproar', '[msg]');
- } else {
- this.add('-fail', pokemon, 'slp', '[from] Uproar');
- }
- return null;
- }
+ inherit: true,
+ durationCallback() {
+ return this.random(2, 6);
},
},
},
diff --git a/data/mods/gen3rs/items.ts b/data/mods/gen3rs/items.ts
index 8e87d4c7e8..33b884939b 100644
--- a/data/mods/gen3rs/items.ts
+++ b/data/mods/gen3rs/items.ts
@@ -7,10 +7,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
inherit: true,
isNonstandard: "Unobtainable",
},
- enigmaberry: {
- inherit: true,
- isNonstandard: "Unobtainable",
- },
fastball: {
inherit: true,
isNonstandard: "Unobtainable",
diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts
index e1af9904bf..f75a93d785 100644
--- a/data/mods/gen4/abilities.ts
+++ b/data/mods/gen4/abilities.ts
@@ -23,6 +23,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onResidualSubOrder: 10,
},
blaze: {
+ inherit: true,
+ onModifyAtk() {},
+ onModifySpA() {},
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {
@@ -30,9 +33,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
return this.chainModify(1.5);
}
},
- name: "Blaze",
- rating: 2,
- num: 66,
},
cloudnine: {
inherit: true,
@@ -58,7 +58,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onSourceModifyAccuracy(accuracy) {
if (typeof accuracy !== 'number') return;
this.debug('compoundeyes - enhancing accuracy');
- return accuracy * 1.3;
+ return this.chainModify(1.3);
},
inherit: true,
},
@@ -128,19 +128,15 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
}
},
condition: {
- noCopy: true, // doesn't get copied by Baton Pass
- onStart(target) {
- this.add('-start', target, 'ability: Flash Fire');
- },
+ inherit: true,
+ onModifyAtk() {},
+ onModifySpA() {},
onModifyDamagePhase1(atk, attacker, defender, move) {
if (move.type === 'Fire') {
this.debug('Flash Fire boost');
return this.chainModify(1.5);
}
},
- onEnd(target) {
- this.add('-end', target, 'ability: Flash Fire', '[silent]');
- },
},
},
flowergift: {
@@ -200,20 +196,19 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onSourceModifyAccuracyPriority: 7,
onSourceModifyAccuracy(accuracy, target, source, move) {
if (move.category === 'Physical' && typeof accuracy === 'number') {
- return accuracy * 0.8;
+ return this.chainModify(0.8);
}
},
},
hydration: {
+ inherit: true,
+ onResidual() {},
onWeather(target, source, effect) {
if (effect.id === 'raindance' && target.status) {
this.add('-activate', target, 'ability: Hydration');
target.cureStatus();
}
},
- name: "Hydration",
- rating: 1.5,
- num: 93,
},
insomnia: {
inherit: true,
@@ -270,31 +265,24 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
},
magicguard: {
- onDamage(damage, target, source, effect) {
- if (effect.effectType !== 'Move') {
- return false;
- }
- },
+ inherit: true,
onSetStatus(status, target, source, effect) {
if (effect && effect.id === 'toxicspikes') {
return false;
}
},
- name: "Magic Guard",
rating: 4.5,
- num: 98,
},
minus: {
+ inherit: true,
+ onModifySpAPriority: undefined,
onModifySpA(spa, pokemon) {
- for (const ally of pokemon.allies()) {
- if (ally.ability === 'plus') {
- return spa * 1.5;
+ for (const allyActive of pokemon.allies()) {
+ if (allyActive.hasAbility('plus')) {
+ return this.chainModify(1.5);
}
}
},
- name: "Minus",
- rating: 0,
- num: 58,
},
naturalcure: {
inherit: true,
@@ -318,6 +306,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
},
overgrow: {
+ inherit: true,
+ onModifyAtk() {},
+ onModifySpA() {},
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) {
@@ -325,26 +316,23 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
return this.chainModify(1.5);
}
},
- name: "Overgrow",
- rating: 2,
- num: 65,
},
pickup: {
- name: "Pickup",
+ inherit: true,
+ onResidual() {},
rating: 0,
- num: 53,
+ // No competitive use
},
plus: {
+ inherit: true,
+ onModifySpAPriority: undefined,
onModifySpA(spa, pokemon) {
- for (const ally of pokemon.allies()) {
- if (ally.ability === 'minus') {
- return spa * 1.5;
+ for (const allyActive of pokemon.allies()) {
+ if (allyActive.hasAbility('minus')) {
+ return this.chainModify(1.5);
}
}
},
- name: "Plus",
- rating: 0,
- num: 57,
},
poisonpoint: {
inherit: true,
@@ -357,16 +345,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
},
pressure: {
- onStart(pokemon) {
- this.add('-ability', pokemon, 'Pressure');
- },
+ inherit: true,
onDeductPP(target, source) {
if (target === source) return;
return 1;
},
- name: "Pressure",
rating: 1.5,
- num: 46,
},
roughskin: {
inherit: true,
@@ -383,7 +367,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
if (typeof accuracy !== 'number') return;
if (this.field.isWeather('sandstorm')) {
this.debug('Sand Veil - decreasing accuracy');
- return accuracy * 0.8;
+ return this.chainModify(0.8);
}
},
},
@@ -404,16 +388,14 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onResidualSubOrder: 3,
},
simple: {
+ inherit: true,
+ onChangeBoost() {},
onModifyBoost(boosts) {
let key: BoostID;
for (key in boosts) {
boosts[key]! *= 2;
}
},
- flags: { breakable: 1 },
- name: "Simple",
- rating: 4,
- num: 86,
},
snowcloak: {
inherit: true,
@@ -422,7 +404,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
if (typeof accuracy !== 'number') return;
if (this.field.isWeather('hail')) {
this.debug('Snow Cloak - decreasing accuracy');
- return accuracy * 0.8;
+ return this.chainModify(0.8);
}
},
},
@@ -442,9 +424,10 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
},
stench: {
- name: "Stench",
+ inherit: true,
+ onModifyMove() {},
rating: 0,
- num: 1,
+ // No competitive use
},
stickyhold: {
inherit: true,
@@ -466,6 +449,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
rating: 0,
},
swarm: {
+ inherit: true,
+ onModifyAtk() {},
+ onModifySpA() {},
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) {
@@ -473,9 +459,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
return this.chainModify(1.5);
}
},
- name: "Swarm",
- rating: 2,
- num: 68,
},
synchronize: {
inherit: true,
@@ -495,23 +478,25 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
if (typeof accuracy !== 'number') return;
if (target?.volatiles['confusion']) {
this.debug('Tangled Feet - decreasing accuracy');
- return accuracy * 0.5;
+ return this.chainModify(0.5);
}
},
},
thickfat: {
+ inherit: true,
+ onSourceModifyAtk() {},
+ onSourceModifySpA() {},
onSourceBasePowerPriority: 1,
onSourceBasePower(basePower, attacker, defender, move) {
if (move.type === 'Ice' || move.type === 'Fire') {
return this.chainModify(0.5);
}
},
- flags: { breakable: 1 },
- name: "Thick Fat",
- rating: 3.5,
- num: 47,
},
torrent: {
+ inherit: true,
+ onModifyAtk() {},
+ onModifySpA() {},
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) {
@@ -519,9 +504,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
return this.chainModify(1.5);
}
},
- name: "Torrent",
- rating: 2,
- num: 67,
},
trace: {
inherit: true,
diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts
index 1a5577d4aa..b21ef163b2 100644
--- a/data/mods/gen4/items.ts
+++ b/data/mods/gen4/items.ts
@@ -144,7 +144,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
focussash: {
inherit: true,
- onDamage() { },
+ onDamage() {},
onTryHit(target, source, move) {
if (target !== source && target.hp === target.maxhp) {
target.addVolatile('focussash');
@@ -306,11 +306,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
metronome: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.effectState.numConsecutive = 0;
- this.effectState.lastMove = '';
- },
- onTryMovePriority: -2,
+ inherit: true,
onTryMove(pokemon, target, move) {
if (!pokemon.hasItem('metronome')) {
pokemon.removeVolatile('metronome');
@@ -323,6 +319,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
}
this.effectState.lastMove = move.id;
},
+ onModifyDamage() {},
onModifyDamagePhase2(damage, source, target, move) {
return damage * (1 + (this.effectState.numConsecutive / 10));
},
@@ -331,7 +328,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
micleberry: {
inherit: true,
condition: {
- duration: 2,
+ inherit: true,
onSourceModifyAccuracyPriority: 3,
onSourceModifyAccuracy(accuracy, target, source) {
this.add('-enditem', source, 'Micle Berry');
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 44903ec997..3272bce095 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -37,14 +37,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { metronome: 1 },
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'Aqua Ring');
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 2,
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
},
},
assist: {
@@ -109,18 +104,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
bide: {
inherit: true,
condition: {
- duration: 3,
- onLockMove: 'bide',
- onStart(pokemon) {
- this.effectState.totalDamage = 0;
- this.add('-start', pokemon, 'move: Bide');
- },
- onDamagePriority: -101,
- onDamage(damage, target, source, move) {
- if (!move || move.effectType !== 'Move' || !source) return;
- this.effectState.totalDamage += damage;
- this.effectState.lastDamageSource = source;
- },
+ inherit: true,
onAfterSetStatus(status, pokemon) {
if (status.id === 'slp' || status.id === 'frz') {
pokemon.removeVolatile('bide');
@@ -164,12 +148,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.add('-activate', pokemon, 'move: Bide');
},
- onMoveAborted(pokemon) {
- pokemon.removeVolatile('bide');
- },
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Bide', '[silent]');
- },
},
},
bind: {
@@ -303,14 +281,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
condition: {
- onStart(pokemon, source) {
- this.add('-start', pokemon, 'Curse', `[of] ${source}`);
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 8,
- onResidual(pokemon) {
- this.damage(pokemon.baseMaxhp / 4);
- },
},
type: "???",
},
@@ -321,36 +294,17 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
detect: {
inherit: true,
priority: 3,
- condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
- onTryHit(target, source, move) {
- if (!move.flags['protect']) return;
- this.add('-activate', target, 'Protect');
- const lockedmove = source.getVolatile('lockedmove');
- if (lockedmove) {
- // Outrage counter is NOT reset
- if (source.volatiles['lockedmove'].trueDuration >= 2) {
- source.volatiles['lockedmove'].duration = 2;
- }
- }
- return null;
- },
- },
},
disable: {
inherit: true,
accuracy: 80,
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
- volatileStatus: 'disable',
condition: {
+ inherit: true,
+ duration: undefined,
durationCallback() {
return this.random(4, 8);
},
- noCopy: true,
onStart(pokemon) {
if (!this.queue.willMove(pokemon)) {
this.effectState.duration!++;
@@ -373,23 +327,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onResidualOrder: 10,
onResidualSubOrder: 13,
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Disable');
- },
- onBeforeMovePriority: 7,
- onBeforeMove(attacker, defender, move) {
- if (move.id === this.effectState.move) {
- this.add('cant', attacker, 'Disable', move);
- return false;
- }
- },
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id === this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
},
},
doomdesire: {
@@ -451,16 +388,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
condition: {
- duration: 5,
- onStart(pokemon) {
- this.add('-start', pokemon, 'Embargo');
- },
- // Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 18,
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Embargo');
- },
},
},
encore: {
@@ -468,43 +398,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1, failencore: 1 },
volatileStatus: 'encore',
condition: {
+ inherit: true,
+ duration: undefined,
durationCallback() {
return this.random(4, 9);
},
- onStart(target, source) {
- const moveSlot = target.lastMove ? target.getMoveData(target.lastMove.id) : null;
- if (!target.lastMove || target.lastMove.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
- // it failed
- return false;
- }
- this.effectState.move = target.lastMove.id;
- this.add('-start', target, 'Encore');
- },
- onOverrideAction(pokemon) {
- return this.effectState.move;
- },
onResidualOrder: 10,
onResidualSubOrder: 14,
- onResidual(target) {
- const moveSlot = target.getMoveData(this.effectState.move);
- if (moveSlot && moveSlot.pp <= 0) {
- // early termination if you run out of PP
- target.removeVolatile('encore');
- }
- },
- onEnd(target) {
- this.add('-end', target, 'Encore');
- },
- onDisableMove(pokemon) {
- if (!this.effectState.move || !pokemon.hasMove(this.effectState.move)) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
},
},
endeavor: {
@@ -619,10 +519,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
basePower: 10,
condition: {
- duration: 2,
- onStart() {
- this.effectState.multiplier = 1;
- },
+ inherit: true,
onRestart() {
if (this.effectState.multiplier < 16) {
this.effectState.multiplier <<= 1;
@@ -678,77 +575,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
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['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;
- }
- },
+ inherit: true,
onFieldResidualOrder: 9,
- onFieldEnd() {
- this.add('-fieldend', 'move: Gravity');
- },
+ onFieldResidualSubOrder: undefined,
},
},
growth: {
@@ -786,36 +615,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, mirror: 1, metronome: 1 },
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasAbility('persistent')) {
- this.add('-activate', source, 'ability: Persistent', '[move] Heal Block');
- return 7;
- }
- return 5;
- },
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Heal Block');
- },
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- if (this.dex.moves.get(moveSlot.id).flags['heal']) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
- onBeforeMovePriority: 6,
- onBeforeMove(pokemon, target, move) {
- if (move.flags['heal']) {
- this.add('cant', pokemon, 'move: Heal Block', move);
- return false;
- }
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 17,
- onEnd(pokemon) {
- this.add('-end', pokemon, 'move: Heal Block');
- },
onTryHeal(damage, pokemon, source, effect) {
if (effect && (effect.id === 'drain' || effect.id === 'leechseed' || effect.id === 'wish')) {
return false;
@@ -875,22 +677,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
ingrain: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Ingrain');
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 1,
- onResidual(pokemon) {
- this.heal(pokemon.baseMaxhp / 16);
- },
- onTrapPokemon(pokemon) {
- pokemon.tryTrap();
- },
- // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
- onDragOut(pokemon) {
- this.add('-activate', pokemon, 'move: Ingrain');
- return null;
- },
},
},
jumpkick: {
@@ -925,34 +714,16 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
leechseed: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'move: Leech Seed');
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 5,
- 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 damage = this.damage(pokemon.baseMaxhp / 8, pokemon, target);
- if (damage) {
- this.heal(damage, target, pokemon);
- }
- },
},
},
lightscreen: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
+ inherit: true,
+ onAnyModifyDamage() {},
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -962,41 +733,24 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- onSideStart(side) {
- this.add('-sidestart', side, 'Light Screen');
- },
onSideResidualOrder: 2,
- onSideEnd(side) {
- this.add('-sideend', side, 'Light Screen');
- },
+ onSideResidualSubOrder: undefined,
},
},
lockon: {
inherit: true,
condition: {
- duration: 2,
- onSourceInvulnerabilityPriority: 1,
- onSourceInvulnerability(target, source, move) {
- if (move && source === this.effectState.target && target === this.effectState.source) return 0;
- },
- onSourceAccuracy(accuracy, target, source, move) {
- if (move && source === this.effectState.target && target === this.effectState.source) return true;
- },
+ inherit: true,
+ noCopy: false,
},
},
luckychant: {
inherit: true,
flags: { metronome: 1 },
condition: {
- duration: 5,
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Lucky Chant');
- },
- onCriticalHit: false,
+ inherit: true,
onSideResidualOrder: 6,
- onSideEnd(side) {
- this.add('-sideend', side, 'move: Lucky Chant');
- },
+ onSideResidualSubOrder: undefined,
},
},
lunardance: {
@@ -1033,8 +787,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
magiccoat: {
inherit: true,
condition: {
- duration: 1,
- onTryHitPriority: 2,
+ inherit: true,
onTryHit(target, source, move) {
if (target === source || move.hasBounced || !move.flags['reflectable']) {
return;
@@ -1045,6 +798,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(newMove, target, { target: source });
return null;
},
+ onAllyTryHitSide() {},
},
},
magmastorm: {
@@ -1056,25 +810,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { gravity: 1, metronome: 1 },
volatileStatus: 'magnetrise',
condition: {
- duration: 5,
+ inherit: true,
onStart(target) {
if (target.volatiles['ingrain'] || target.ability === 'levitate') return false;
this.add('-start', target, 'Magnet Rise');
},
- onImmunity(type) {
- if (type === 'Ground') return false;
- },
onResidualOrder: 10,
onResidualSubOrder: 16,
- onEnd(target) {
- this.add('-end', target, 'Magnet Rise');
- },
},
},
mefirst: {
inherit: true,
condition: {
- duration: 1,
+ inherit: true,
+ onBasePower() {},
onModifyDamagePhase2(damage) {
return damage * 1.5;
},
@@ -1162,30 +911,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mist: {
inherit: true,
condition: {
- 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) {
- this.add('-sidestart', side, 'Mist');
- },
+ inherit: true,
onSideResidualOrder: 3,
- onSideEnd(side) {
- this.add('-sideend', side, 'Mist');
- },
+ onSideResidualSubOrder: undefined,
},
},
moonlight: {
@@ -1215,9 +943,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mudsport: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Mud Sport');
- },
+ inherit: true,
+ noCopy: false,
onAnyBasePowerPriority: 3,
onAnyBasePower(basePower, user, target, move) {
if (move.type === 'Electric') {
@@ -1237,18 +964,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
nightmare: {
inherit: true,
condition: {
- noCopy: true,
- onStart(pokemon) {
- if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) {
- return false;
- }
- this.add('-start', pokemon, 'Nightmare');
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 7,
- onResidual(pokemon) {
- this.damage(pokemon.baseMaxhp / 4);
- },
},
},
odorsleuth: {
@@ -1278,16 +996,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
perishsong: {
inherit: true,
condition: {
- duration: 4,
- onEnd(target) {
- this.add('-start', target, 'perish0');
- target.faint();
- },
+ inherit: true,
onResidualOrder: 12,
- onResidual(pokemon) {
- const duration = pokemon.volatiles['perishsong'].duration;
- this.add('-start', pokemon, `perish${duration}`);
- },
},
},
petaldance: {
@@ -1308,11 +1018,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
priority: 3,
condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
+ inherit: true,
onTryHit(target, source, move) {
if (!move.flags['protect']) return;
this.add('-activate', target, 'Protect');
@@ -1346,7 +1052,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
condition: {
- duration: 1,
+ inherit: true,
onBeforeSwitchOut(pokemon) {
this.debug('Pursuit start');
let alreadyAdded = false;
@@ -1403,13 +1109,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
reflect: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
+ inherit: true,
+ onAnyModifyDamage() {},
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -1419,13 +1120,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- onSideStart(side) {
- this.add('-sidestart', side, 'Reflect');
- },
onSideResidualOrder: 1,
- onSideEnd(side) {
- this.add('-sideend', side, 'Reflect');
- },
+ onSideResidualSubOrder: undefined,
},
},
reversal: {
@@ -1470,45 +1166,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
safeguard: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasAbility('persistent')) {
- this.add('-activate', source, 'ability: Persistent', '[move] Safeguard');
- return 7;
- }
- return 5;
- },
- onSetStatus(status, target, source, effect) {
- if (!effect || !source) return;
- if (effect.id === 'yawn') 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, source) {
- if (source?.hasAbility('persistent')) {
- this.add('-sidestart', side, 'Safeguard', '[persistent]');
- } else {
- this.add('-sidestart', side, 'Safeguard');
- }
- },
+ inherit: true,
onSideResidualOrder: 4,
- onSideEnd(side) {
- this.add('-sideend', side, 'Safeguard');
- },
+ onSideResidualSubOrder: undefined,
},
},
sandtomb: {
@@ -1566,11 +1226,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { bypasssub: 1, noassist: 1, failcopycat: 1 },
condition: {
- duration: 1,
- onStart(pokemon) {
- this.add('-singleturn', pokemon, 'Snatch');
- },
- onAnyPrepareHitPriority: -1,
+ inherit: true,
onAnyPrepareHit(source, target, move) {
const snatchUser = this.effectState.source;
if (snatchUser.isSkyDropped()) return;
@@ -1594,16 +1250,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { metronome: 1, mustpressure: 1 },
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++;
- },
+ inherit: true,
+ onSwitchIn() {},
onEntryHazard(pokemon) {
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
@@ -1619,10 +1267,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { metronome: 1, mustpressure: 1 },
condition: {
- // this is a side condition
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Stealth Rock');
- },
+ inherit: true,
+ onSwitchIn() {},
onEntryHazard(pokemon) {
if (pokemon.hasItem('heavydutyboots')) return;
const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
@@ -1643,12 +1289,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
substitute: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4);
- delete target.volatiles['partiallytrapped'];
- },
- onTryPrimaryHitPriority: -1,
+ inherit: true,
onTryPrimaryHit(target, source, move) {
if (target === source || move.flags['bypasssub']) {
return;
@@ -1681,9 +1322,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.runEvent('AfterSubDamage', target, source, move, damage);
return this.HIT_SUBSTITUTE;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
},
suckerpunch: {
@@ -1735,6 +1373,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
tailwind: {
inherit: true,
condition: {
+ inherit: true,
duration: 3,
durationCallback(target, source, effect) {
if (source?.hasAbility('persistent')) {
@@ -1743,26 +1382,19 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return 3;
},
- onSideStart(side, source) {
- if (source?.hasAbility('persistent')) {
- this.add('-sidestart', side, 'move: Tailwind', '[persistent]');
- } else {
- this.add('-sidestart', side, 'move: Tailwind');
- }
- },
onModifySpe(spe) {
return spe * 2;
},
onSideResidualOrder: 5,
- onSideEnd(side) {
- this.add('-sideend', side, 'move: Tailwind');
- },
+ onSideResidualSubOrder: undefined,
},
},
taunt: {
inherit: true,
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
condition: {
+ inherit: true,
+ duration: undefined,
durationCallback() {
return this.random(3, 6);
},
@@ -1771,9 +1403,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onResidualOrder: 10,
onResidualSubOrder: 15,
- onEnd(target) {
- this.add('-end', target, 'move: Taunt');
- },
onDisableMove(pokemon) {
for (const moveSlot of pokemon.moveSlots) {
if (this.dex.moves.get(moveSlot.id).category === 'Status') {
@@ -1807,16 +1436,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { metronome: 1, mustpressure: 1 },
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++;
- },
+ inherit: true,
+ onSwitchIn() {},
onEntryHazard(pokemon) {
if (!pokemon.isGrounded()) return;
if (pokemon.hasType('Poison')) {
@@ -1846,67 +1467,22 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
trickroom: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasAbility('persistent')) {
- this.add('-activate', source, 'ability: Persistent', '[move] Trick Room');
- return 7;
- }
- return 5;
- },
- onFieldStart(target, source) {
- if (source?.hasAbility('persistent')) {
- this.add('-fieldstart', 'move: Trick Room', `[of] ${source}`, '[persistent]');
- } else {
- this.add('-fieldstart', 'move: Trick Room', `[of] ${source}`);
- }
- },
- onFieldRestart(target, source) {
- this.field.removePseudoWeather('trickroom');
- },
- // Speed modification is changed in Pokemon.getActionSpeed() in sim/pokemon.js
+ inherit: true,
onFieldResidualOrder: 13,
- onFieldEnd() {
- this.add('-fieldend', 'move: Trick Room');
- },
+ onFieldResidualSubOrder: undefined,
},
},
uproar: {
inherit: true,
basePower: 50,
condition: {
- onStart(target) {
- this.add('-start', target, 'Uproar');
- // 3-6 turns
- this.effectState.duration = this.random(3, 7);
- },
- onResidual(target) {
- if (target.volatiles['throatchop']) {
- target.removeVolatile('uproar');
- return;
- }
- if (target.lastMove && target.lastMove.id === 'struggle') {
- // don't lock
- delete target.volatiles['uproar'];
- }
- this.add('-start', target, 'Uproar', '[upkeep]');
+ inherit: true,
+ duration: undefined,
+ durationCallback() {
+ return this.random(3, 7);
},
onResidualOrder: 10,
onResidualSubOrder: 11,
- onEnd(target) {
- this.add('-end', target, 'Uproar');
- },
- onLockMove: 'uproar',
- onAnySetStatus(status, pokemon) {
- if (status.id === 'slp') {
- if (pokemon === this.effectState.target) {
- this.add('-fail', pokemon, 'slp', '[from] Uproar', '[msg]');
- } else {
- this.add('-fail', pokemon, 'slp', '[from] Uproar');
- }
- return null;
- }
- },
},
},
volttackle: {
@@ -1916,9 +1492,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
watersport: {
inherit: true,
condition: {
- onStart(pokemon) {
- this.add('-start', pokemon, 'move: Water Sport');
- },
+ inherit: true,
+ noCopy: false,
onAnyBasePowerPriority: 3,
onAnyBasePower(basePower, user, target, move) {
if (move.type === 'Fire') {
@@ -1981,17 +1556,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
yawn: {
inherit: true,
condition: {
- noCopy: true, // doesn't get copied by Baton Pass
- duration: 2,
- onStart(target, source) {
- this.add('-start', target, 'move: Yawn', `[of] ${source}`);
- },
+ inherit: true,
onResidualOrder: 10,
onResidualSubOrder: 19,
- onEnd(target) {
- this.add('-end', target, 'move: Yawn', '[silent]');
- target.trySetStatus('slp', this.effectState.source);
- },
},
},
};
diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts
index 4328d70e1e..0ab479f34a 100644
--- a/data/mods/gen5/moves.ts
+++ b/data/mods/gen5/moves.ts
@@ -36,8 +36,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
autotomize: {
inherit: true,
volatileStatus: 'autotomize',
- onHit(pokemon) {
- },
+ onHit() {},
condition: {
noCopy: true, // doesn't get copied by Baton Pass
onStart(pokemon) {
@@ -78,6 +77,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
},
+ bodyslam: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ },
bounce: {
inherit: true,
flags: { contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, metronome: 1, nosleeptalk: 1 },
@@ -192,6 +195,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
},
+ dragonrush: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ },
dreameater: {
inherit: true,
flags: { protect: 1, mirror: 1, metronome: 1 },
@@ -260,10 +267,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
basePower: 20,
condition: {
- duration: 2,
- onStart() {
- this.effectState.multiplier = 1;
- },
+ inherit: true,
onRestart() {
if (this.effectState.multiplier < 8) {
this.effectState.multiplier <<= 1;
@@ -363,6 +367,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
},
+ heatcrash: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ },
heatwave: {
inherit: true,
basePower: 100,
@@ -494,13 +502,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
lightscreen: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
+ inherit: true,
onAnyModifyDamage(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -510,14 +512,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Light Screen');
- },
- onSideResidualOrder: 26,
- onSideResidualSubOrder: 2,
- onSideEnd(side) {
- this.add('-sideend', side, 'move: Light Screen');
- },
},
},
lowsweep: {
@@ -527,24 +521,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
magiccoat: {
inherit: true,
condition: {
- duration: 1,
- onStart(target, source, effect) {
- this.add('-singleturn', target, 'move: Magic Coat');
- if (effect?.effectType === 'Move') {
- this.effectState.pranksterBoosted = effect.pranksterBoosted;
- }
- },
- onTryHitPriority: 2,
- onTryHit(target, source, move) {
- if (target === source || move.hasBounced || !move.flags['reflectable'] || target.isSemiInvulnerable()) {
- return;
- }
- const newMove = this.dex.getActiveMove(move.id);
- newMove.hasBounced = true;
- newMove.pranksterBoosted = this.effectState.pranksterBoosted;
- this.actions.useMove(newMove, target, { target: source });
- return null;
- },
+ inherit: true,
onAllyTryHitSide(target, source, move) {
if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) {
return;
@@ -587,12 +564,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
pp: 20,
condition: {
- noCopy: true,
- onSourceModifyDamage(damage, source, target, move) {
- if (['stomp', 'steamroller'].includes(move.id)) {
- return this.chainModify(2);
- }
- },
+ inherit: true,
+ onAccuracy() {},
},
},
moonlight: {
@@ -689,11 +662,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.addVolatile('stall');
},
condition: {
- duration: 1,
- onSideStart(target, source) {
- this.add('-singleturn', source, 'Quick Guard');
- },
- onTryHitPriority: 4,
+ inherit: true,
onTryHit(target, source, effect) {
// Quick Guard only blocks moves with a natural positive priority
// (e.g. it doesn't block 0 priority moves boosted by Prankster)
@@ -720,13 +689,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
reflect: {
inherit: true,
condition: {
- duration: 5,
- durationCallback(target, source, effect) {
- if (source?.hasItem('lightclay')) {
- return 8;
- }
- return 5;
- },
+ inherit: true,
onAnyModifyDamage(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -736,14 +699,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- onSideStart(side) {
- this.add('-sidestart', side, 'Reflect');
- },
- onSideResidualOrder: 26,
- onSideResidualSubOrder: 1,
- onSideEnd(side) {
- this.add('-sideend', side, 'Reflect');
- },
},
},
relicsong: {
@@ -881,12 +836,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
substitute: {
inherit: true,
condition: {
- onStart(target) {
- this.add('-start', target, 'Substitute');
- this.effectState.hp = Math.floor(target.maxhp / 4);
- delete target.volatiles['partiallytrapped'];
- },
- onTryPrimaryHitPriority: -1,
+ inherit: true,
onTryPrimaryHit(target, source, move) {
if (target === source || move.flags['bypasssub']) {
return;
@@ -918,9 +868,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.runEvent('AfterSubDamage', target, source, move, damage);
return this.HIT_SUBSTITUTE;
},
- onEnd(target) {
- this.add('-end', target, 'Substitute');
- },
},
},
submission: {
diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts
index 07852e3445..538a35bafc 100644
--- a/data/mods/gen6/moves.ts
+++ b/data/mods/gen6/moves.ts
@@ -34,48 +34,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
},
- encore: {
- inherit: true,
- condition: {
- duration: 3,
- onStart(target) {
- const moveSlot = target.lastMove ? target.getMoveData(target.lastMove.id) : null;
- if (!target.lastMove || target.lastMove.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
- // it failed
- return false;
- }
- this.effectState.move = target.lastMove.id;
- this.add('-start', target, 'Encore');
- if (!this.queue.willMove(target)) {
- this.effectState.duration!++;
- }
- },
- onOverrideAction(pokemon, target, move) {
- if (move.id !== this.effectState.move) return this.effectState.move;
- },
- onResidualOrder: 16,
- onResidual(target) {
- const lockedMoveSlot = target.getMoveData(this.effectState.move);
- if (lockedMoveSlot && lockedMoveSlot.pp <= 0) {
- // Encore ends early if you run out of PP
- target.removeVolatile('encore');
- }
- },
- onEnd(target) {
- this.add('-end', target, 'Encore');
- },
- onDisableMove(pokemon) {
- if (!this.effectState.move || !pokemon.hasMove(this.effectState.move)) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== this.effectState.move) {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
- },
- },
fellstinger: {
inherit: true,
basePower: 30,
@@ -87,6 +45,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
basePower: 80,
},
+ heavyslam: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ },
leechlife: {
inherit: true,
basePower: 20,
@@ -96,29 +58,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, bypasssub: 1, noassist: 1, failcopycat: 1, failmefirst: 1, nosleeptalk: 1 },
},
- minimize: {
- inherit: true,
- condition: {
- noCopy: true,
- onSourceModifyDamage(damage, source, target, move) {
- const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'phantomforce', 'heatcrash', 'shadowforce',
- ];
- if (boostedMoves.includes(move.id)) {
- return this.chainModify(2);
- }
- },
- onAccuracy(accuracy, target, source, move) {
- const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'phantomforce', 'heatcrash', 'shadowforce',
- ];
- if (boostedMoves.includes(move.id)) {
- return true;
- }
- return accuracy;
- },
- },
- },
metronome: {
inherit: true,
flags: { noassist: 1, failcopycat: 1, nosleeptalk: 1 },
@@ -126,39 +65,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mistyterrain: {
inherit: true,
condition: {
- effectType: 'Terrain',
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onSetStatus(status, target, source, effect) {
- if (!target.isGrounded() || target.isSemiInvulnerable()) return;
- if (effect && ((effect as Move).status || effect.id === 'yawn')) {
- this.add('-activate', target, 'move: Misty Terrain');
- }
- return false;
- },
- 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}`, `[of] ${source}`);
- } else {
- this.add('-fieldstart', 'move: Misty Terrain');
- }
- },
- onFieldResidualOrder: 27,
- onFieldResidualSubOrder: 7,
- onFieldEnd() {
- this.add('-fieldend', 'Misty Terrain');
- },
+ inherit: true,
+ onTryAddVolatile() {},
},
},
mysticalfire: {
@@ -179,28 +87,25 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.boost({ atk: -1, spa: -1 }, target, source);
},
},
+ phantomforce: {
+ inherit: true,
+ flags: { contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, minimize: 1 },
+ },
powder: {
inherit: true,
condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Powder');
- },
+ inherit: true,
onTryMovePriority: 1,
- onTryMove(pokemon, target, move) {
- if (move.type === 'Fire') {
- this.add('-activate', pokemon, 'move: Powder');
- this.damage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1));
- this.attrLastMove('[still]');
- return false;
- }
- },
},
},
rockblast: {
inherit: true,
flags: { protect: 1, mirror: 1, metronome: 1 },
},
+ shadowforce: {
+ inherit: true,
+ flags: { contact: 1, charge: 1, mirror: 1, metronome: 1, nosleeptalk: 1, noassist: 1, failinstruct: 1, minimize: 1 },
+ },
sheercold: {
inherit: true,
ohko: true,
@@ -263,11 +168,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
wideguard: {
inherit: true,
condition: {
- duration: 1,
- onSideStart(target, source) {
- this.add('-singleturn', source, 'Wide Guard');
- },
- onTryHitPriority: 4,
+ inherit: true,
onTryHit(target, source, effect) {
// Wide Guard blocks damaging spread moves
if (
diff --git a/data/mods/gen7/abilities.ts b/data/mods/gen7/abilities.ts
index 83905da67e..66905bd080 100644
--- a/data/mods/gen7/abilities.ts
+++ b/data/mods/gen7/abilities.ts
@@ -72,14 +72,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onTryBoost() {},
},
rattled: {
- onDamagingHit(damage, target, source, move) {
- if (['Dark', 'Bug', 'Ghost'].includes(move.type)) {
- this.boost({ spe: 1 });
- }
- },
- name: "Rattled",
- rating: 1.5,
- num: 155,
+ inherit: true,
+ onAfterBoost() {},
},
scrappy: {
inherit: true,
diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts
index 62c55d6c4a..0e5aae3fcc 100644
--- a/data/mods/gen7/moves.ts
+++ b/data/mods/gen7/moves.ts
@@ -182,47 +182,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
electricterrain: {
inherit: true,
condition: {
- effectType: 'Terrain',
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onSetStatus(status, target, source, effect) {
- if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) {
- if (effect.id === 'yawn' || (effect.effectType === 'Move' && !effect.secondaries)) {
- this.add('-activate', target, 'move: Electric Terrain');
- }
- return false;
- }
- },
- onTryAddVolatile(status, target) {
- if (!target.isGrounded() || target.isSemiInvulnerable()) return;
- if (status.id === 'yawn') {
- this.add('-activate', target, 'move: Electric Terrain');
- return null;
- }
- },
+ inherit: true,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) {
this.debug('electric terrain boost');
return this.chainModify(1.5);
}
},
- onFieldStart(field, source, effect) {
- if (effect && effect.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Electric Terrain', `[from] ability: ${effect}`, `[of] ${source}`);
- } else {
- this.add('-fieldstart', 'move: Electric Terrain');
- }
- },
- onFieldResidualOrder: 27,
- onFieldResidualSubOrder: 7,
- onFieldEnd() {
- this.add('-fieldend', 'move: Electric Terrain');
- },
},
},
embargo: {
@@ -316,14 +282,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
grassyterrain: {
inherit: true,
condition: {
- effectType: 'Terrain',
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
+ inherit: true,
onBasePower(basePower, attacker, defender, move) {
const weakenedMoves = ['earthquake', 'bulldoze', 'magnitude'];
if (weakenedMoves.includes(move.id) && defender.isGrounded() && !defender.isSemiInvulnerable()) {
@@ -335,27 +294,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return this.chainModify(1.5);
}
},
- onFieldStart(field, source, effect) {
- if (effect && effect.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Grassy Terrain', `[from] ability: ${effect}`, `[of] ${source}`);
- } else {
- this.add('-fieldstart', 'move: Grassy Terrain');
- }
- },
- onResidualOrder: 5,
- onResidualSubOrder: 2,
- onResidual(pokemon) {
- if (pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) {
- this.heal(pokemon.baseMaxhp / 16, pokemon, pokemon);
- } else {
- this.debug(`Pokemon semi-invuln or not grounded; Grassy Terrain skipped`);
- }
- },
- onFieldResidualOrder: 27,
- onFieldResidualSubOrder: 7,
- onFieldEnd() {
- this.add('-fieldend', 'move: Grassy Terrain');
- },
},
},
guardianofalola: {
@@ -558,11 +496,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
kingsshield: {
inherit: true,
condition: {
- duration: 1,
- onStart(target) {
- this.add('-singleturn', target, 'Protect');
- },
- onTryHitPriority: 3,
+ inherit: true,
onTryHit(target, source, move) {
if (!move.flags['protect'] || move.category === 'Status') {
if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
@@ -780,48 +714,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
psychicterrain: {
inherit: true,
condition: {
- effectType: 'Terrain',
- duration: 5,
- durationCallback(source, effect) {
- if (source?.hasItem('terrainextender')) {
- return 8;
- }
- return 5;
- },
- onTryHitPriority: 4,
- onTryHit(target, source, effect) {
- if (effect && (effect.priority <= 0.1 || effect.target === 'self')) {
- return;
- }
- if (target.isSemiInvulnerable() || target.isAlly(source)) return;
- if (!target.isGrounded()) {
- const baseMove = this.dex.moves.get(effect.id);
- if (baseMove.priority > 0) {
- this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground.");
- }
- return;
- }
- this.add('-activate', target, 'move: Psychic Terrain');
- return null;
- },
+ inherit: true,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) {
this.debug('psychic terrain boost');
return this.chainModify(1.5);
}
},
- onFieldStart(field, source, effect) {
- if (effect && effect.effectType === 'Ability') {
- this.add('-fieldstart', 'move: Psychic Terrain', `[from] ability: ${effect}`, `[of] ${source}`);
- } else {
- this.add('-fieldstart', 'move: Psychic Terrain');
- }
- },
- onFieldResidualOrder: 27,
- onFieldResidualSubOrder: 7,
- onFieldEnd() {
- this.add('-fieldend', 'move: Psychic Terrain');
- },
},
},
psychoboost: {
diff --git a/data/mods/gen7letsgo/moves.ts b/data/mods/gen7letsgo/moves.ts
index 31f669b0e1..f44ed9d801 100644
--- a/data/mods/gen7letsgo/moves.ts
+++ b/data/mods/gen7letsgo/moves.ts
@@ -19,6 +19,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
doubleironbash: {
inherit: true,
isNonstandard: null,
+ flags: { contact: 1, protect: 1, mirror: 1, punch: 1, minimize: 1 },
},
floatyfall: {
inherit: true,
diff --git a/data/mods/gen8/moves.ts b/data/mods/gen8/moves.ts
index d71af7be7d..b7c3100367 100644
--- a/data/mods/gen8/moves.ts
+++ b/data/mods/gen8/moves.ts
@@ -59,19 +59,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
charge: {
inherit: true,
condition: {
- onStart(pokemon, source, effect) {
- this.add('-start', pokemon, 'Charge');
- },
- onRestart(pokemon, source, effect) {
- this.add('-start', pokemon, 'Charge');
- },
- onBasePowerPriority: 9,
- onBasePower(basePower, attacker, defender, move) {
- if (move.type === 'Electric') {
- this.debug('charge boost');
- return this.chainModify(2);
- }
- },
+ inherit: true,
onMoveAborted(pokemon, target, move) {
if (move.id !== 'charge') {
pokemon.removeVolatile('charge');
@@ -82,9 +70,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.removeVolatile('charge');
}
},
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Charge', '[silent]');
- },
},
},
chatter: {
@@ -526,9 +511,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
stickyweb: {
inherit: true,
condition: {
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Sticky Web');
- },
+ inherit: true,
onSwitchIn(pokemon) {
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
this.add('-activate', pokemon, 'move: Sticky Web');
diff --git a/data/mods/gen9dlc1/abilities.ts b/data/mods/gen9dlc1/abilities.ts
index 4f06cf465d..dd1bf0c857 100644
--- a/data/mods/gen9dlc1/abilities.ts
+++ b/data/mods/gen9dlc1/abilities.ts
@@ -19,91 +19,60 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
}
},
condition: {
- noCopy: true,
- onStart(pokemon, source, effect) {
- if (effect?.name === 'Booster Energy') {
- this.effectState.fromBooster = true;
- this.add('-activate', pokemon, 'ability: Protosynthesis', '[fromitem]');
- } else {
- this.add('-activate', pokemon, 'ability: Protosynthesis');
- }
- this.effectState.bestStat = pokemon.getBestStat(false, true);
- this.add('-start', pokemon, 'protosynthesis' + this.effectState.bestStat);
- },
- onModifyAtkPriority: 5,
- onModifyAtk(atk, pokemon) {
+ inherit: true,
+ onModifyAtk() {
if (this.effectState.bestStat !== 'atk') return;
this.debug('Protosynthesis atk boost');
return this.chainModify([5325, 4096]);
},
- onModifyDefPriority: 6,
- onModifyDef(def, pokemon) {
+ onModifyDef() {
if (this.effectState.bestStat !== 'def') return;
this.debug('Protosynthesis def boost');
return this.chainModify([5325, 4096]);
},
- onModifySpAPriority: 5,
- onModifySpA(spa, pokemon) {
+ onModifySpA() {
if (this.effectState.bestStat !== 'spa') return;
this.debug('Protosynthesis spa boost');
return this.chainModify([5325, 4096]);
},
- onModifySpDPriority: 6,
- onModifySpD(spd, pokemon) {
+ onModifySpD() {
if (this.effectState.bestStat !== 'spd') return;
this.debug('Protosynthesis spd boost');
return this.chainModify([5325, 4096]);
},
- onModifySpe(spe, pokemon) {
+ onModifySpe() {
if (this.effectState.bestStat !== 'spe') return;
this.debug('Protosynthesis spe boost');
return this.chainModify(1.5);
},
- onEnd(pokemon) {
- this.add('-end', pokemon, 'Protosynthesis');
- },
},
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1 },
},
quarkdrive: {
inherit: true,
condition: {
- noCopy: true,
- onStart(pokemon, source, effect) {
- if (effect?.name === 'Booster Energy') {
- this.effectState.fromBooster = true;
- this.add('-activate', pokemon, 'ability: Quark Drive', '[fromitem]');
- } else {
- this.add('-activate', pokemon, 'ability: Quark Drive');
- }
- this.effectState.bestStat = pokemon.getBestStat(false, true);
- this.add('-start', pokemon, 'quarkdrive' + this.effectState.bestStat);
- },
- onModifyAtkPriority: 5,
- onModifyAtk(atk, pokemon) {
+ inherit: true,
+ onModifyAtk() {
if (this.effectState.bestStat !== 'atk') return;
this.debug('Quark Drive atk boost');
return this.chainModify([5325, 4096]);
},
- onModifyDefPriority: 6,
- onModifyDef(def, pokemon) {
+ onModifyDef() {
if (this.effectState.bestStat !== 'def') return;
this.debug('Quark Drive def boost');
return this.chainModify([5325, 4096]);
},
- onModifySpAPriority: 5,
- onModifySpA(spa, pokemon) {
+ onModifySpA() {
if (this.effectState.bestStat !== 'spa') return;
this.debug('Quark Drive spa boost');
return this.chainModify([5325, 4096]);
},
- onModifySpDPriority: 6,
- onModifySpD(spd, pokemon) {
+ onModifySpD() {
if (this.effectState.bestStat !== 'spd') return;
this.debug('Quark Drive spd boost');
return this.chainModify([5325, 4096]);
},
- onModifySpe(spe, pokemon) {
+ onModifySpe() {
if (this.effectState.bestStat !== 'spe') return;
this.debug('Quark Drive spe boost');
return this.chainModify(1.5);
diff --git a/data/moves.ts b/data/moves.ts
index 8004f48dfb..1c23fa5522 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -1644,7 +1644,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Body Slam",
pp: 15,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, minimize: 1 },
secondary: {
chance: 30,
status: 'par',
@@ -4349,7 +4349,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Dragon Rush",
pp: 10,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, minimize: 1 },
secondary: {
chance: 20,
volatileStatus: 'flinch',
@@ -6149,7 +6149,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
category: "Physical",
name: "Flying Press",
pp: 10,
- flags: { contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1, metronome: 1, minimize: 1 },
onEffectiveness(typeMod, target, type, move) {
return typeMod + this.dex.getEffectiveness('Flying', type);
},
@@ -8608,7 +8608,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- onModifyMove(move, pokemon, target) {
+ onModifyMove(move, pokemon) {
if (move.flags['heal'] && !move.isZ && !move.isMax) {
this.add('cant', pokemon, 'move: Heal Block', move);
return false;
@@ -8801,7 +8801,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Heat Crash",
pp: 10,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, minimize: 1 },
onTryHit(target, pokemon, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', pokemon, 'Dynamax');
@@ -8859,7 +8859,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Heavy Slam",
pp: 10,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, minimize: 1 },
onTryHit(target, pokemon, move) {
if (target.volatiles['dynamax']) {
this.add('-fail', pokemon, 'Dynamax');
@@ -11364,7 +11364,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Malicious Moonsault",
pp: 1,
priority: 0,
- flags: { contact: 1 },
+ flags: { contact: 1, minimize: 1 },
isZ: "inciniumz",
secondary: null,
target: "normal",
@@ -12365,18 +12365,12 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
noCopy: true,
onRestart: () => null,
onSourceModifyDamage(damage, source, target, move) {
- const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault', 'supercellslam',
- ];
- if (boostedMoves.includes(move.id)) {
+ if (move.flags['minimize']) {
return this.chainModify(2);
}
},
onAccuracy(accuracy, target, source, move) {
- const boostedMoves = [
- 'stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault', 'supercellslam',
- ];
- if (boostedMoves.includes(move.id)) {
+ if (move.flags['minimize']) {
return true;
}
return accuracy;
@@ -16174,7 +16168,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (effect.effectType === 'Move' && effect.infiltrates && !target.isAlly(source)) return;
if (target !== source) {
this.debug('interrupting setStatus');
- if (effect.name === 'Synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {
+ if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {
this.add('-activate', target, 'move: Safeguard');
}
return null;
@@ -18520,7 +18514,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Steamroller",
pp: 20,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, minimize: 1 },
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -18702,7 +18696,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Stomp",
pp: 20,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1, minimize: 1 },
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -19131,7 +19125,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
name: "Supercell Slam",
pp: 15,
priority: 0,
- flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, minimize: 1 },
hasCrashDamage: true,
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam'));
diff --git a/sim/dex-abilities.ts b/sim/dex-abilities.ts
index c3af1b2ccf..0b16617967 100644
--- a/sim/dex-abilities.ts
+++ b/sim/dex-abilities.ts
@@ -1,4 +1,4 @@
-import type { PokemonEventMethods, ConditionData } from './dex-conditions';
+import type { PokemonEventMethods, ConditionData, ModdedConditionData } from './dex-conditions';
import { assignMissingFields, BasicEffect, toID } from './dex-data';
import { Utils } from '../lib/utils';
@@ -24,7 +24,10 @@ export interface AbilityData extends Partial, AbilityEventMethods, Poke
name: string;
}
-export type ModdedAbilityData = AbilityData | Partial & { inherit: true };
+export type ModdedAbilityData = AbilityData | Partial & {
+ inherit: true,
+ condition?: ModdedConditionData,
+};
export interface AbilityDataTable { [abilityid: IDEntry]: AbilityData }
export interface ModdedAbilityDataTable { [abilityid: IDEntry]: ModdedAbilityData }
diff --git a/sim/dex-items.ts b/sim/dex-items.ts
index d8558177e7..137b27cd42 100644
--- a/sim/dex-items.ts
+++ b/sim/dex-items.ts
@@ -1,4 +1,4 @@
-import type { PokemonEventMethods, ConditionData } from './dex-conditions';
+import type { PokemonEventMethods, ConditionData, ModdedConditionData } from './dex-conditions';
import { assignMissingFields, BasicEffect, toID } from './dex-data';
import { Utils } from '../lib/utils';
@@ -16,6 +16,7 @@ export interface ItemData extends Partial- , PokemonEventMethods {
export type ModdedItemData = ItemData | Partial> & {
inherit: true,
onCustap?: (this: Battle, pokemon: Pokemon) => void,
+ condition?: ModdedConditionData,
};
export interface ItemDataTable { [itemid: IDEntry]: ItemData }
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index 5b56490430..3fd3be5763 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -1,5 +1,5 @@
import { Utils } from '../lib/utils';
-import type { ConditionData } from './dex-conditions';
+import type { ConditionData, ModdedConditionData } from './dex-conditions';
import { assignMissingFields, BasicEffect, toID } from './dex-data';
/**
@@ -45,6 +45,7 @@ interface MoveFlags {
gravity?: 1; // Prevented from being executed or selected during Gravity's effect.
heal?: 1; // Prevented from being executed or selected during Heal Block's effect.
metronome?: 1; // Can be selected by Metronome.
+ minimize?: 1; // Deals double damage if the user is minimized.
mirror?: 1; // Can be copied by Mirror Move.
mustpressure?: 1; // Additional PP is deducted due to Pressure when it ordinarily would not.
noassist?: 1; // Cannot be selected by Assist.
@@ -278,6 +279,7 @@ export type ModdedMoveData = MoveData | Partial> & {
bodyofwaterBoosted?: boolean,
longWhipBoost?: boolean,
gen?: number,
+ condition?: ModdedConditionData,
};
export interface MoveDataTable { [moveid: IDEntry]: MoveData }
diff --git a/sim/dex.ts b/sim/dex.ts
index 50a0cc476d..1ca6287696 100644
--- a/sim/dex.ts
+++ b/sim/dex.ts
@@ -651,6 +651,15 @@ export class ModdedDex {
// instead of overwriting entirely
delete childTypedData[entryId].inherit;
+ // {inherit: true} can also be used to inherit parts of conditions
+ if (childTypedData[entryId].condition?.inherit) {
+ delete childTypedData[entryId].condition.inherit;
+ childTypedData[entryId].condition = {
+ ...parentTypedData[entryId].condition,
+ ...childTypedData[entryId].condition,
+ };
+ }
+
// Merge parent and child's entry, with child overwriting parent.
childTypedData[entryId] = { ...parentTypedData[entryId], ...childTypedData[entryId] };
}
From 54ac91882876ab55f4d369a6400676cb466db974 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Fri, 20 Mar 2026 05:08:45 +0000
Subject: [PATCH 157/233] Remove unnecessary type assertion in Beat Up (#11832)
---
data/mods/gen3/moves.ts | 3 +--
data/mods/gen4/moves.ts | 3 +--
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts
index 677c3c9cf4..fdff16dfe1 100644
--- a/data/mods/gen3/moves.ts
+++ b/data/mods/gen3/moves.ts
@@ -42,8 +42,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onModifySpAPriority: -101,
onModifySpA(atk, pokemon, defender, move) {
if (!this.ruleTable.has('beatupnicknamesmod')) {
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
- this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0]!.name);
+ this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0].name);
}
this.event.modifier = 1;
return this.dex.species.get(move.allies!.shift()!.set.species).baseStats.atk;
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 3272bce095..ee8be31782 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -88,8 +88,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onModifyAtkPriority: -101,
onModifyAtk(atk, pokemon, defender, move) {
if (!this.ruleTable.has('beatupnicknamesmod')) {
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
- this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0]!.name);
+ this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies![0].name);
}
this.event.modifier = 1;
return this.dex.species.get(move.allies!.shift()!.set.species).baseStats.atk;
From 0e66fb4fc325abf78841113a384ff29435a03af5 Mon Sep 17 00:00:00 2001
From: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Date: Sat, 21 Mar 2026 10:41:23 -0700
Subject: [PATCH 158/233] Create tests for Synchronoise (#11834)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Create tests for Synchronoise
* Remove noisy elements
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
---------
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
---
test/sim/moves/synchronoise.js | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
create mode 100644 test/sim/moves/synchronoise.js
diff --git a/test/sim/moves/synchronoise.js b/test/sim/moves/synchronoise.js
new file mode 100644
index 0000000000..239a47a762
--- /dev/null
+++ b/test/sim/moves/synchronoise.js
@@ -0,0 +1,28 @@
+'use strict';
+
+const assert = require('./../../assert');
+const common = require('./../../common');
+
+let battle;
+
+describe('Synchronoise', () => {
+ afterEach(() => {
+ battle.destroy();
+ });
+
+ it('should damage Pokemon that share a type with the user', () => {
+ battle = common.createBattle();
+ battle.setPlayer('p1', { team: [{ species: "Gardevoir", moves: ['synchronoise'] }] });
+ battle.setPlayer('p2', { team: [{ species: "Granbull", moves: ['sleeptalk'] }] });
+ battle.makeChoices();
+ assert.false.fullHP(battle.p2.active[0]);
+ });
+
+ it('should not damage Pokemon that do not share a type with the user', () => {
+ battle = common.createBattle();
+ battle.setPlayer('p1', { team: [{ species: "Gardevoir", moves: ['synchronoise'] }] });
+ battle.setPlayer('p2', { team: [{ species: "Caterpie", moves: ['sleeptalk'] }] });
+ battle.makeChoices();
+ assert.fullHP(battle.p2.active[0]);
+ });
+});
From 2d66d56524a1fc569e17bb002ad65832d29afcd9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 22 Mar 2026 06:20:38 +0000
Subject: [PATCH 159/233] Gen 1: Implement move slot tracking (#11812)
---
data/mods/gen1/conditions.ts | 4 -
data/mods/gen1/moves.ts | 28 ++-
data/mods/gen1/scripts.ts | 69 ++++----
data/mods/gen2/conditions.ts | 2 +-
data/mods/gen4/moves.ts | 4 +-
data/mods/gen4/scripts.ts | 1 +
sim/battle-actions.ts | 4 +-
sim/battle-queue.ts | 5 -
sim/battle.ts | 2 +-
sim/pokemon.ts | 26 ++-
sim/side.ts | 100 +++++++++--
test/sim/misc/statuses.js | 325 +++++++++++++++++++++--------------
test/sim/moves/bide.js | 2 +-
test/sim/moves/disable.js | 40 ++++-
test/sim/moves/hyperbeam.js | 2 +-
15 files changed, 397 insertions(+), 217 deletions(-)
diff --git a/data/mods/gen1/conditions.ts b/data/mods/gen1/conditions.ts
index c62ee6e2ed..ab27044db4 100644
--- a/data/mods/gen1/conditions.ts
+++ b/data/mods/gen1/conditions.ts
@@ -202,10 +202,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
onAccuracy(accuracy, target, source, move) {
if (source === this.effectState.source) return true;
},
- onLockMove() {
- // exact move doesn't matter, no move is ever actually used
- return 'struggle';
- },
onDisableMove(target) {
target.maybeLocked = true;
},
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index 0aff641cd6..9069c3658f 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -162,14 +162,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
// - if Counter is used by the opponent, it will succeed if the player's last selected move is Counterable
// - (Counter will thus desync if the target's last used move is not as counterable as the target's last selected move)
// - if Counter succeeds it will deal twice the last move damage dealt in battle (even if it's from a different pokemon because of a switch)
+ const isCounterable = (move: Move | null) => move && move.basePower > 0 &&
+ ['Normal', 'Fighting'].includes(move.type) && move.id !== 'counter';
const lastMove = target.side.lastMove && this.dex.moves.get(target.side.lastMove.id);
- const lastMoveIsCounterable = lastMove && lastMove.basePower > 0 &&
- ['Normal', 'Fighting'].includes(lastMove.type) && lastMove.id !== 'counter';
+ const lastMoveIsCounterable = isCounterable(lastMove);
const lastSelectedMove = target.side.lastSelectedMove && this.dex.moves.get(target.side.lastSelectedMove);
- const lastSelectedMoveIsCounterable = lastSelectedMove && lastSelectedMove.basePower > 0 &&
- ['Normal', 'Fighting'].includes(lastSelectedMove.type) && lastSelectedMove.id !== 'counter';
+ const lastSelectedMoveIsCounterable = isCounterable(lastSelectedMove || null);
if (!lastMoveIsCounterable && !lastSelectedMoveIsCounterable) {
this.debug("Gen 1 Counter: last move was not Counterable");
@@ -220,9 +220,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
durationCallback: undefined,
onStart(pokemon) {
// disable can only select moves that have pp > 0, hence the onTryHit modification
- const moveSlot = this.sample(pokemon.moveSlots.filter(ms => ms.pp > 0));
+ const [slotIndex, moveSlot] = this.sample(Array.from(pokemon.moveSlots.entries()).filter(([i, ms]) => ms.pp > 0));
+ this.debug(`Disable: disabling move ${moveSlot.move} in slot ${slotIndex}`);
this.add('-start', pokemon, 'Disable', moveSlot.move);
this.effectState.move = moveSlot.id;
+ this.effectState.slotIndex = slotIndex;
// 1-8 turns (which will in effect translate to 0-7 missed turns for the target)
this.effectState.time = this.random(1, 9);
},
@@ -240,6 +242,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return false;
}
},
+ onDisableMove(pokemon) {
+ // disable the move slot
+ if (pokemon.moveSlots.length > this.effectState.slotIndex) {
+ pokemon.moveSlots[this.effectState.slotIndex].disabled = true;
+ pokemon.moveSlots[this.effectState.slotIndex].disabledSource = this.effect.name;
+ }
+ },
},
},
dizzypunch: {
@@ -445,8 +454,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { protect: 1, bypasssub: 1, metronome: 1 },
onHit(target, source) {
- const moveslot = source.moves.indexOf('mimic');
- if (moveslot < 0) return false;
+ const moveslot = source.side.lastSelectedMoveSlot;
const moves = target.moves;
const moveid = this.sample(moves);
if (!moveid) return false;
@@ -534,9 +542,15 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
basePower: 1,
damageCallback(pokemon) {
+ if ([0, 1, 171].includes(pokemon.level)) {
+ this.hint("Desync Clause Mod activated!");
+ this.hint("In Gen 1, if a Pokémon at level 0, 1 or 171 uses Psywave, the game softlocks.");
+ return false;
+ }
const psywaveDamage = (this.random(0, this.trunc(1.5 * pokemon.level)));
if (psywaveDamage <= 0) {
this.hint("Desync Clause Mod activated!");
+ this.hint("In Gen 1, Psywave can roll 0 damage.");
return false;
}
return psywaveDamage;
diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts
index 7aa7786f21..a8d63f7282 100644
--- a/data/mods/gen1/scripts.ts
+++ b/data/mods/gen1/scripts.ts
@@ -25,24 +25,15 @@ export const Scripts: ModdedBattleScriptsData = {
// BattlePokemon scripts.
pokemon: {
inherit: true,
- // In gen 1, a Pokémon can have two instances of the same move using Mimic
- // we need to make sure to deduct PP from a move that has PP left
- deductPP(move, amount, target) {
- move = this.battle.dex.moves.get(move);
- // first loop: get the first instance with PP left
- // second loop: get the first instance, even if it has no PP left
- for (let i = 0; i < 2; i++) {
- for (const ppData of this.moveSlots) {
- if (ppData.id !== move.id) continue;
- ppData.used = true;
- if (!ppData.pp && i === 0) continue;
+ deductPP(move, amount) {
+ // deduct PP based on side.lastSelectedMoveSlot
+ const ppData = this.getMoveSlot(this.side.lastSelectedMoveSlot);
+ if (!ppData) return 0;
+ ppData.used = true;
- if (!amount) amount = 1;
- ppData.pp -= amount;
- return amount;
- }
- }
- return 0;
+ if (!amount) amount = 1;
+ ppData.pp -= amount;
+ return amount;
},
getStat(statName, unmodified) {
// @ts-expect-error type checking prevents 'hp' from being passed, but we're paranoid
@@ -167,7 +158,7 @@ export const Scripts: ModdedBattleScriptsData = {
this.battle.setActiveMove(move, pokemon, target);
- if (pokemon.moveThisTurn || !this.battle.runEvent('BeforeMove', pokemon, target, move)) {
+ if (pokemon.moveThisTurn || move.id === 'cantmove' || !this.battle.runEvent('BeforeMove', pokemon, target, move)) {
this.battle.clearActiveMove(true);
// This is only run for sleep.
this.battle.runEvent('AfterMoveSelf', pokemon, target, move);
@@ -178,27 +169,32 @@ export const Scripts: ModdedBattleScriptsData = {
return;
}
- const lockedMove = pokemon.getLockedMove();
- if (lockedMove) sourceEffect = move;
+ if (move.id !== 'struggle') {
+ const lockedMove = pokemon.getLockedMove();
+ if (lockedMove) sourceEffect = move;
- // Locked moves don't deduct PP
- // Two-turn moves like Sky Attack deduct PP on their second turn.
- if (!lockedMove || pokemon.volatiles['twoturnmove']) {
- const ppMove = pokemon.volatiles['twoturnmove']?.ppMove || move.id;
- pokemon.deductPP(ppMove, null, target);
- const moveSlot = pokemon.getMoveData(ppMove);
- if (moveSlot && moveSlot.pp < 0) {
- moveSlot.pp += 64;
- this.battle.hint("In Gen 1, if a pokemon is forced to use a move with 0 PP, the move will underflow to have 63 PP.");
+ // Locked moves don't deduct PP
+ // Two-turn moves like Sky Attack deduct PP on their second turn.
+ if ((!lockedMove && !TWO_TURN_MOVES.includes(move.id)) || pokemon.volatiles['twoturnmove']) {
+ const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot);
+ if (moveSlot && pokemon.deductPP(moveSlot.id, null, target) && moveSlot.pp < 0) {
+ moveSlot.pp += 64;
+ this.battle.hint("In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP.");
+ }
+ }
+
+ if (move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) {
+ this.battle.hint("Desync Clause Mod activated!");
+ this.battle.hint(
+ "In Gen 1, a Pokémon that thaws out might try to use a move that doesn't match the move " +
+ "of the slot it last selected (switches reset to the first slot).",
+ );
+ this.battle.clearActiveMove(true);
+ return;
}
}
this.useMove(move, pokemon, { target, sourceEffect });
-
- if (pokemon.volatiles['twoturnmove']) {
- pokemon.deductPP(move, -1, target);
- pokemon.volatiles['twoturnmove'].ppMove = move.id;
- }
},
// This function deals with AfterMoveSelf events.
// This leads with partial trapping moves shenanigans after the move has been used.
@@ -214,6 +210,11 @@ export const Scripts: ModdedBattleScriptsData = {
}
if (sourceEffect) move.sourceEffect = sourceEffect.id;
+ if (sourceEffect?.id === 'metronome' || sourceEffect?.id === 'mirrormove') {
+ const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot);
+ if (moveSlot) pokemon.deductPP(moveSlot.id, -1, target);
+ }
+
this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move);
if (baseMove.target !== move.target) {
// Target changed in ModifyMove, so we must adjust it here
diff --git a/data/mods/gen2/conditions.ts b/data/mods/gen2/conditions.ts
index 55812c82af..1e559eb155 100644
--- a/data/mods/gen2/conditions.ts
+++ b/data/mods/gen2/conditions.ts
@@ -187,7 +187,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
delete target.volatiles['confusion'];
if (!target.side.getSideCondition('safeguard')) target.addVolatile('confusion');
},
- onLockMove(pokemon) {
+ onLockMove() {
return this.effectState.move;
},
onMoveAborted(pokemon) {
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index ee8be31782..26b54a66b6 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -837,8 +837,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { noassist: 1, failcopycat: 1, nosleeptalk: 1, failmimic: 1 },
onHit(pokemon) {
const moves = this.dex.moves.all().filter(move => (
- move.flags['metronome'] && !pokemon.moves.includes(move.id) &&
(!move.isNonstandard || move.isNonstandard === 'Unobtainable') &&
+ move.flags['metronome'] &&
+ (![2, 4].includes(this.gen) || !pokemon.moves.includes(move.id)) &&
!(this.field.pseudoWeather['gravity'] && move.flags['gravity']) &&
!(pokemon.volatiles['healblock'] && move.flags['heal'])
));
@@ -848,7 +849,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
randomMove = this.sample(moves).id;
}
if (!randomMove) return false;
- pokemon.side.lastSelectedMove = this.toID(randomMove);
this.actions.useMove(randomMove, pokemon);
},
},
diff --git a/data/mods/gen4/scripts.ts b/data/mods/gen4/scripts.ts
index b73128e018..0a829776cc 100644
--- a/data/mods/gen4/scripts.ts
+++ b/data/mods/gen4/scripts.ts
@@ -12,6 +12,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (this.battle.gen <= 2) {
// pokemon.lastMove is reset for all Pokemon on the field after a switch. This affects Mirror Move.
for (const poke of this.battle.getAllActive()) poke.lastMove = null;
+ if (this.battle.gen === 1) pokemon.side.lastSelectedMoveSlot = 0;
if (!pokemon.side.faintedThisTurn && pokemon.draggedIn !== this.battle.turn) {
this.battle.runEvent('AfterSwitchInSelf', pokemon);
}
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index acbc63a485..8c8456a66e 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -276,10 +276,8 @@ export class BattleActions {
}
}
pokemon.lastDamage = 0;
- let lockedMove;
if (!externalMove) {
- lockedMove = this.battle.runEvent('LockMove', pokemon);
- if (lockedMove === true) lockedMove = false;
+ const lockedMove = pokemon.getLockedMove();
if (!lockedMove) {
if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) {
this.battle.add('cant', pokemon, 'nopp', move);
diff --git a/sim/battle-queue.ts b/sim/battle-queue.ts
index e2c81d4f7f..59e5f80650 100644
--- a/sim/battle-queue.ts
+++ b/sim/battle-queue.ts
@@ -304,11 +304,6 @@ export class BattleQueue {
for (const choice of choices) {
const resolvedChoices = this.resolveAction(choice);
this.list.push(...resolvedChoices);
- for (const resolvedChoice of resolvedChoices) {
- if (resolvedChoice && resolvedChoice.choice === 'move' && resolvedChoice.move.id !== 'recharge') {
- resolvedChoice.pokemon.side.lastSelectedMove = resolvedChoice.move.id;
- }
- }
}
}
diff --git a/sim/battle.ts b/sim/battle.ts
index 6263b73f47..a2b5909d36 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -3007,7 +3007,7 @@ export class Battle {
if (choice) this.inputLog.push(`>${side.id} ${choice}`);
}
for (const side of this.sides) {
- this.queue.addChoice(side.choice.actions);
+ side.commitChoices();
}
this.clearRequest();
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index cda757180f..4fc69bea34 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -7,7 +7,7 @@
import { State } from './state';
import { toID } from './dex';
-import type { DynamaxOptions, PokemonMoveRequestData, PokemonSwitchRequestData } from './side';
+import type { DynamaxOptions, MoveRequestData, PokemonMoveRequestData, PokemonSwitchRequestData } from './side';
/** A Pokemon's move slot. */
interface MoveSlot {
@@ -692,6 +692,12 @@ export class Pokemon {
return null;
}
+ getMoveSlot(slotIndex: number) {
+ // used by Gen 1
+ if (slotIndex < 0 || slotIndex >= this.moveSlots.length) return null;
+ return this.moveSlots[slotIndex];
+ }
+
getMoveHitData(move: ActiveMove) {
if (!move.moveHitData) move.moveHitData = {};
const slot = this.getSlot();
@@ -940,10 +946,7 @@ export class Pokemon {
return (lockedMove === true) ? null : lockedMove;
}
- getMoves(lockedMove?: ID | null, restrictData?: boolean): {
- move: string, id: ID, disabled?: string | boolean, disabledSource?: string,
- target?: string, pp?: number, maxpp?: number,
- }[] {
+ getMoves(lockedMove?: ID | null, restrictData?: boolean): MoveRequestData[] {
if (lockedMove) {
lockedMove = toID(lockedMove);
this.trapped = true;
@@ -1071,7 +1074,14 @@ export class Pokemon {
const canSwitchIn = this.battle.canSwitch(this.side) > 0;
let moves = this.getMoves(lockedMove, isLastActive);
- if (!moves.length) {
+ // actions that don't hard lock out of switching, but can't bypass the Fight button
+ // partially trapped causes maybeLocked, so it shouldn't be revealed
+ if (this.battle.gen === 1 && ['frz', 'slp'].includes(this.status)) {
+ this.maybeDisabled = false;
+ this.maybeLocked = false;
+ moves = [{ move: 'Fight', id: 'fight' as ID }];
+ lockedMove = 'fight' as ID;
+ } else if (!moves.length) {
moves = [{ move: 'Struggle', id: 'struggle' as ID, target: 'randomNormal', disabled: false }];
lockedMove = 'struggle' as ID;
}
@@ -1127,7 +1137,7 @@ export class Pokemon {
ident: this.fullname,
details: this.details,
condition: this.getHealth().secret,
- active: (this.position < this.side.active.length),
+ active: this.position < this.side.active.length,
stats: {
atk: this.baseStoredStats['atk'],
def: this.baseStoredStats['def'],
@@ -1608,7 +1618,7 @@ export class Pokemon {
for (const moveSlot of this.moveSlots) {
if (moveSlot.id === moveid && moveSlot.disabled !== true) {
moveSlot.disabled = isHidden ? 'hidden' : true;
- moveSlot.disabledSource = (sourceEffect?.name || moveSlot.move);
+ moveSlot.disabledSource = sourceEffect?.name || moveSlot.move;
}
}
}
diff --git a/sim/side.ts b/sim/side.ts
index aec2576b00..37cc3e3c66 100644
--- a/sim/side.ts
+++ b/sim/side.ts
@@ -30,8 +30,9 @@ export interface ChosenAction {
choice: 'move' | 'switch' | 'instaswitch' | 'revivalblessing' | 'team' | 'shift' | 'pass';// action type
pokemon?: Pokemon; // the pokemon doing the action
targetLoc?: number; // relative location of the target to pokemon (move action only)
- moveid: string; // a move to use (move action only)
+ moveid?: string; // a move to use (move action only)
move?: ActiveMove; // the active move corresponding to moveid (move action only)
+ moveSlot?: number; // the move's index in the Pokémon's moveset (undefined if submitted through the "Fight" button)
target?: Pokemon; // the target of the action
index?: number; // the chosen index in Team Preview
side?: Side; // the action's side
@@ -90,8 +91,18 @@ export interface PokemonSwitchRequestData {
teraType?: string;
terastallized?: string;
}
+export interface MoveRequestData {
+ move: string;
+ id: ID;
+ pp?: number;
+ maxpp?: number;
+ target?: string;
+ disabled?: string | boolean;
+ disabledSource?: string;
+};
+
export interface PokemonMoveRequestData {
- moves: { move: string, id: ID, target?: string, disabled?: string | boolean, disabledSource?: string }[];
+ moves: MoveRequestData[];
maybeDisabled?: boolean;
maybeLocked?: boolean;
trapped?: boolean;
@@ -179,8 +190,6 @@ export class Side {
faintedLastTurn: Pokemon | null;
faintedThisTurn: Pokemon | null;
totalFainted: number;
- /** only used by Gen 1 Counter */
- lastSelectedMove: ID = '';
/** these point to the same object as the ally's, in multi battles */
sideConditions: { [id: string]: EffectState };
@@ -195,6 +204,13 @@ export class Side {
* This is also used for checking Self-KO clause in Pokemon Stadium 2.
*/
lastMove: Move | null;
+ /**
+ * The move and the slot are chosen during move selection
+ * lastSelectedMove never resets
+ * lastSelectedMoveSlot resets on every switch
+ */
+ lastSelectedMove: ID = '';
+ lastSelectedMoveSlot = 0;
constructor(name: string, battle: Battle, sideNum: number, team: PokemonSet[]) {
const sideScripts = battle.dex.data.Scripts.side;
@@ -535,6 +551,7 @@ export class Side {
// If the move is not found, the action is invalid without requiring further inspection.
const request = pokemon.getMoveRequestData();
+ let moveSlot: number | undefined = undefined;
let moveid = '';
let targetType = '';
if (autoChoose) moveText = 1;
@@ -544,6 +561,7 @@ export class Side {
if (moveIndex < 0 || moveIndex >= request.moves.length || !request.moves[moveIndex]) {
return this.emitChoiceError(`Can't move: Your ${pokemon.name} doesn't have a move ${moveIndex + 1}`);
}
+ moveSlot = moveIndex;
moveid = request.moves[moveIndex].id;
targetType = request.moves[moveIndex].target!;
} else {
@@ -553,8 +571,9 @@ export class Side {
if (moveid.startsWith('hiddenpower')) {
moveid = 'hiddenpower';
}
- for (const move of request.moves) {
+ for (const [i, move] of request.moves.entries()) {
if (move.id !== moveid) continue;
+ moveSlot = i;
targetType = move.target || 'normal';
break;
}
@@ -562,6 +581,7 @@ export class Side {
for (const [i, moveRequest] of request.maxMoves.maxMoves.entries()) {
if (moveid === moveRequest.move) {
moveid = request.moves[i].id;
+ moveSlot = i;
targetType = moveRequest.target;
event = 'dynamax';
break;
@@ -573,6 +593,7 @@ export class Side {
if (!moveRequest) continue;
if (moveid === toID(moveRequest.move)) {
moveid = request.moves[i].id;
+ moveSlot = i;
targetType = moveRequest.target;
event = 'zmove';
break;
@@ -592,6 +613,7 @@ export class Side {
if (move.disabled) continue;
if (i < moves.length && move.id === moves[i].id && moves[i].disabled) continue;
moveid = move.id;
+ moveSlot = i;
targetType = move.target!;
break;
}
@@ -599,7 +621,6 @@ export class Side {
const move = this.battle.dex.moves.get(moveid);
// Z-move
-
const zMove = event === 'zmove' ? this.battle.actions.getZMove(move, pokemon) : undefined;
if (event === 'zmove' && !zMove) {
return this.emitChoiceError(`Can't move: ${pokemon.name} can't use ${move.name} as a Z-move`);
@@ -607,7 +628,6 @@ export class Side {
if (zMove && this.choice.zMove) {
return this.emitChoiceError(`Can't move: You can't Z-move more than once per battle`);
}
-
if (zMove) targetType = this.battle.dex.moves.get(zMove).target;
// Dynamax
@@ -617,11 +637,9 @@ export class Side {
if (event === 'dynamax' && !maxMove) {
return this.emitChoiceError(`Can't move: ${pokemon.name} can't use ${move.name} as a Max Move`);
}
-
if (maxMove) targetType = this.battle.dex.moves.get(maxMove).target;
// Validate targeting
-
if (autoChoose || moveid === 'testfight') {
targetLoc = 0;
} else if (this.battle.actions.targetTypeChoices(targetType)) {
@@ -652,6 +670,15 @@ export class Side {
moveid: lockedMoveID,
});
return true;
+ } else if (this.battle.gen === 1 &&
+ (['frz', 'slp'].includes(pokemon.status) || pokemon.volatiles['partiallytrapped'])) {
+ if (pokemon.maybeLocked) this.choice.cantUndo = true;
+ this.choice.actions.push({
+ choice: 'move',
+ pokemon,
+ // don't send a move, handled side.commitChoices
+ });
+ return true;
} else if (!moves.length) {
// Override action and use Struggle if there are no enabled moves with PP
// Gen 4 and earlier announce a Pokemon has no moves left before the turn begins, and only to that player's side.
@@ -677,6 +704,11 @@ export class Side {
if (pokemon.maxMoveDisabled(move)) {
return this.emitChoiceError(`Can't move: ${pokemon.name}'s ${maxMove.name} is disabled`);
}
+ } else if (this.battle.gen === 1) {
+ // In Gen 1, disabled moves are tracked by slot rather than by move ID
+ if (moves[moveSlot!].disabled) {
+ return this.emitChoiceError(`Can't move: ${pokemon.name}'s ${move.name} is disabled`);
+ }
} else if (!zMove) {
// Check for disabled moves
let isEnabled = false;
@@ -715,7 +747,6 @@ export class Side {
}
// Mega evolution
-
const mixandmega = this.battle.format.mod === 'mixandmega';
const mega = (event === 'mega');
const megax = (event === 'megax');
@@ -767,12 +798,16 @@ export class Side {
// Make this work properly
return this.emitChoiceError(`Can't move: You can only Terastallize in Gen 9.`);
}
+ if (moveSlot === undefined) {
+ throw new Error(`moveSlot should have been set by this point`);
+ }
this.choice.actions.push({
choice: 'move',
pokemon,
targetLoc,
moveid,
+ moveSlot,
mega: mega || ultra,
megax,
megay,
@@ -921,7 +956,7 @@ export class Side {
choice: 'revivalblessing',
pokemon,
target: targetPokemon,
- } as ChosenAction);
+ });
return true;
}
@@ -959,7 +994,7 @@ export class Side {
choice: (this.requestState === 'switch' ? 'instaswitch' : 'switch'),
pokemon,
target: targetPokemon,
- } as ChosenAction);
+ });
return true;
}
@@ -1025,7 +1060,7 @@ export class Side {
index,
pokemon: this.pokemon[pos],
priority: -index,
- } as ChosenAction);
+ });
}
return true;
@@ -1047,7 +1082,7 @@ export class Side {
this.choice.actions.push({
choice: 'shift',
pokemon,
- } as ChosenAction);
+ });
return true;
}
@@ -1076,6 +1111,41 @@ export class Side {
};
}
+ commitChoices() {
+ if (this.battle.gen === 1) {
+ for (const choice of this.choice.actions) {
+ if (choice.choice !== 'move' || !choice.pokemon) continue;
+ const move = choice.moveid;
+ if (!move) {
+ const pokemon = choice.pokemon;
+ if (['frz', 'slp'].includes(pokemon.status)) {
+ // do nothing
+ } else if (pokemon.volatiles['partiallytrapped']) {
+ // 'cantmove' is what is set in the cartridge
+ this.lastSelectedMove = 'cantmove' as ID;
+ }
+ /**
+ * if partially trapped: put 'cantmove' in lastSelectedMove
+ * if frozen or asleep: try to reuse the last move,
+ * which can fail if the Pokemon thaws and the move doesn't match lastSelectedMoveSlot
+ *
+ * if this happens in the first move selection of a player, put '00' as a placeholder to avoid errors
+ */
+ choice.moveid = this.lastSelectedMove || '00' as ID;
+ } else if (move === 'struggle') {
+ // saves Struggle
+ this.lastSelectedMove = move as ID;
+ } else if (typeof choice.moveSlot === 'number') {
+ // not locked
+ this.lastSelectedMove = move as ID;
+ this.lastSelectedMoveSlot = choice.moveSlot;
+ }
+ // locked moves (including mustrecharge) dont set lastSelectedMove
+ }
+ }
+ this.battle.queue.addChoice(this.choice.actions);
+ }
+
choose(input: string) {
if (!this.requestState) {
return this.emitChoiceError(
@@ -1246,7 +1316,7 @@ export class Side {
this.choice.actions.push({
choice: 'pass',
- } as ChosenAction);
+ });
return true;
}
diff --git a/test/sim/misc/statuses.js b/test/sim/misc/statuses.js
index ce8cc8b670..6148aca666 100644
--- a/test/sim/misc/statuses.js
+++ b/test/sim/misc/statuses.js
@@ -61,6 +61,17 @@ describe('Burn', () => {
]);
assert.hurtsBy(battle.p2.active[0], 100, () => battle.makeChoices('move seismictoss', 'move willowisp'));
});
+
+ describe(`[Gen 6]`, () => {
+ it('should inflict 1/8 of max HP at the end of the turn, rounded down', () => {
+ battle = common.gen(6).createBattle([
+ [{ species: 'Machamp', ability: 'noguard', moves: ['bulkup'] }],
+ [{ species: 'Sableye', ability: 'prankster', moves: ['willowisp'] }],
+ ]);
+ const target = battle.p1.active[0];
+ assert.hurtsBy(target, Math.floor(target.maxhp / 8), () => battle.makeChoices('move bulkup', 'move willowisp'));
+ });
+ });
});
describe('Paralysis', () => {
@@ -185,6 +196,116 @@ describe('Toxic Poison', () => {
battle.makeChoices('switch 2', 'move whirlwind');
assert.equal(pokemon.maxhp - pokemon.hp, Math.floor(pokemon.maxhp / 16));
});
+
+ describe(`[Gen 2]`, () => {
+ it(`should not affect Leech Seed damage counter`, () => {
+ battle = common.gen(2).createBattle({ forceRandomChance: true }, [[
+ { species: 'Venusaur', moves: ['toxic', 'leechseed'] },
+ ], [
+ { species: 'Chansey', moves: ['splash'] },
+ ]]);
+ battle.makeChoices('move toxic', 'move splash');
+ const pokemon = battle.p2.active[0];
+ assert.equal(pokemon.maxhp - pokemon.hp, Math.floor(pokemon.maxhp / 16));
+ battle.makeChoices('move leechseed', 'move splash');
+ // (1/16) + (2/16) + (1/8) = (5/16)
+ assert.equal(pokemon.maxhp - pokemon.hp, Math.floor(pokemon.maxhp / 16) * 5);
+ });
+
+ it(`should pass the damage counter to Pokemon with Baton Pass`, () => {
+ battle = common.gen(2).createBattle([[
+ { species: 'Smeargle', moves: ['toxic', 'willowisp', 'splash'] },
+ ], [
+ { species: 'Chansey', moves: ['splash'] },
+ { species: 'Celebi', moves: ['batonpass', 'splash'] },
+ ]]);
+
+ // Modding accuracy so the status moves always hit
+ battle.onEvent('Accuracy', battle.format, true);
+
+ battle.makeChoices('move willowisp', 'move splash');
+ const chansey = battle.p2.active[0];
+ battle.makeChoices('move toxic', 'switch 2');
+ battle.makeChoices('move splash', 'move splash');
+ battle.makeChoices('move splash', 'move splash');
+ battle.makeChoices('move splash', 'move batonpass');
+ battle.makeChoices('', 'switch 2');
+ let hp = chansey.hp;
+ battle.makeChoices('move splash', 'move splash');
+ assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16) * 4, `Chansey should have taken a lot more damage from burn`);
+
+ // Only hint about this once per battle, not every turn.
+ assert.equal(battle.log.filter(m => m.startsWith('|-hint')).length, 1);
+
+ // Damage counter should be removed on regular switch out
+ battle.makeChoices('move splash', 'switch 2');
+ hp = chansey.hp;
+ battle.makeChoices('move splash', 'switch 2');
+ assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 8), `Chansey should have taken normal damage from burn`);
+ });
+
+ it('should revert to regular poison on switch in, even for Poison types', () => {
+ battle = common.gen(2).createBattle([
+ [{ species: 'Smeargle', moves: ['toxic', 'splash'] }],
+ [
+ { species: 'Qwilfish', moves: ['transform', 'splash'] },
+ { species: 'Gengar', moves: ['nightshade'] },
+ ],
+ ]);
+ battle.makeChoices('move toxic', 'move transform');
+ battle.makeChoices('move splash', 'switch 2');
+ battle.makeChoices('move splash', 'switch 2');
+ // We could check 'psn' at this point, but the following line caused crashes
+ // before #5463 was fixed so its useful to execute for regression testing purposes.
+ battle.makeChoices('move splash', 'move splash');
+ assert.equal(battle.p2.active[0].status, 'psn');
+ });
+
+ it('should not have its damage counter affected by Heal Bell', () => {
+ battle = common.gen(2).createBattle([[
+ { species: 'Smeargle', moves: ['toxic', 'willowisp', 'splash'] },
+ ], [
+ { species: 'Chansey', moves: ['splash', 'healbell'] },
+ ]]);
+
+ // Modding accuracy so the status moves always hit
+ battle.onEvent('Accuracy', battle.format, true);
+
+ battle.makeChoices('move toxic', 'move splash');
+ const chansey = battle.p2.active[0];
+ battle.makeChoices('move splash', 'move healbell');
+ battle.makeChoices('move willowisp', 'move splash');
+ let hp = chansey.hp;
+ battle.makeChoices('move splash', 'move splash');
+ assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16) * 3);
+ hp = chansey.hp;
+
+ battle.makeChoices('move splash', 'move healbell');
+ battle.makeChoices('move toxic', 'move splash');
+ // Toxic counter should be reset by a successful Toxic
+ assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16));
+ });
+ });
+
+ describe(`[Gen 1]`, () => {
+ it(`should affect Leech Seed damage counter`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: 'Venusaur', moves: ['toxic', 'leechseed'] },
+ ], [
+ { species: 'Chansey', moves: ['splash'] },
+ ]]);
+
+ // Modding accuracy so the status moves always hit
+ battle.onEvent('Accuracy', battle.format, true);
+
+ battle.makeChoices('move toxic', 'move splash');
+ const chansey = battle.p2.active[0];
+ assert.equal(chansey.maxhp - chansey.hp, Math.floor(chansey.maxhp / 16));
+ battle.makeChoices('move leechseed', 'move splash');
+ // (1/16) + (2/16) + (3/16) = (6/16)
+ assert.equal(chansey.maxhp - chansey.hp, Math.floor(chansey.maxhp / 16) * 6);
+ });
+ });
});
describe('Freeze', () => {
@@ -245,137 +366,81 @@ describe('Freeze', () => {
battle.makeChoices('move sacredfire', 'auto');
assert.equal(frozenMon.status, '');
});
-});
-describe('Burn [Gen 6]', () => {
- afterEach(() => {
- battle.destroy();
- });
+ describe(`[Gen 1]`, () => {
+ it(`should cause a desync if a Pokémon attacks immediately after thawing without having attacked since its last switch`, () => {
+ // https://www.youtube.com/watch?v=iSSf4XaqGAU
+ // The game will desync if side.lastSelectedMove and the move in slot side.lastSelectedMoveSlot do not match
+ // side.lastSelectedMove never resets, while side.lastSelectedMoveSlot resets on every switch
+ // PP should be deducted from lastSelectedMoveSlot even if Desync Clause Mod is activated
- it('should inflict 1/8 of max HP at the end of the turn, rounded down', () => {
- battle = common.gen(6).createBattle([
- [{ species: 'Machamp', ability: 'noguard', moves: ['bulkup'] }],
- [{ species: 'Sableye', ability: 'prankster', moves: ['willowisp'] }],
- ]);
- const target = battle.p1.active[0];
- assert.hurtsBy(target, Math.floor(target.maxhp / 8), () => battle.makeChoices('move bulkup', 'move willowisp'));
- });
-});
-
-describe('Toxic Poison [Gen 1]', () => {
- afterEach(() => {
- battle.destroy();
- });
-
- it(`should affect Leech Seed damage counter`, () => {
- battle = common.gen(1).createBattle([[
- { species: 'Venusaur', moves: ['toxic', 'leechseed'] },
- ], [
- { species: 'Chansey', moves: ['splash'] },
- ]]);
-
- // Modding accuracy so the status moves always hit
- battle.onEvent('Accuracy', battle.format, true);
-
- battle.makeChoices('move toxic', 'move splash');
- const chansey = battle.p2.active[0];
- assert.equal(chansey.maxhp - chansey.hp, Math.floor(chansey.maxhp / 16));
- battle.makeChoices('move leechseed', 'move splash');
- // (1/16) + (2/16) + (3/16) = (6/16)
- assert.equal(chansey.maxhp - chansey.hp, Math.floor(chansey.maxhp / 16) * 6);
- });
-});
-
-describe('Toxic Poison [Gen 2]', () => {
- afterEach(() => {
- battle.destroy();
- });
-
- it(`should not affect Leech Seed damage counter`, () => {
- battle = common.gen(2).createBattle({ forceRandomChance: true }, [[
- { species: 'Venusaur', moves: ['toxic', 'leechseed'] },
- ], [
- { species: 'Chansey', moves: ['splash'] },
- ]]);
- battle.makeChoices('move toxic', 'move splash');
- const pokemon = battle.p2.active[0];
- assert.equal(pokemon.maxhp - pokemon.hp, Math.floor(pokemon.maxhp / 16));
- battle.makeChoices('move leechseed', 'move splash');
- // (1/16) + (2/16) + (1/8) = (5/16)
- assert.equal(pokemon.maxhp - pokemon.hp, Math.floor(pokemon.maxhp / 16) * 5);
- });
-
- it(`should pass the damage counter to Pokemon with Baton Pass`, () => {
- battle = common.gen(2).createBattle([[
- { species: 'Smeargle', moves: ['toxic', 'willowisp', 'splash'] },
- ], [
- { species: 'Chansey', moves: ['splash'] },
- { species: 'Celebi', moves: ['batonpass', 'splash'] },
- ]]);
-
- // Modding accuracy so the status moves always hit
- battle.onEvent('Accuracy', battle.format, true);
-
- battle.makeChoices('move willowisp', 'move splash');
- const chansey = battle.p2.active[0];
- battle.makeChoices('move toxic', 'switch 2');
- battle.makeChoices('move splash', 'move splash');
- battle.makeChoices('move splash', 'move splash');
- battle.makeChoices('move splash', 'move batonpass');
- battle.makeChoices('', 'switch 2');
- let hp = chansey.hp;
- battle.makeChoices('move splash', 'move splash');
- assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16) * 4, `Chansey should have taken a lot more damage from burn`);
-
- // Only hint about this once per battle, not every turn.
- assert.equal(battle.log.filter(m => m.startsWith('|-hint')).length, 1);
-
- // Damage counter should be removed on regular switch out
- battle.makeChoices('move splash', 'switch 2');
- hp = chansey.hp;
- battle.makeChoices('move splash', 'switch 2');
- assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 8), `Chansey should have taken normal damage from burn`);
- });
-
- it('should revert to regular poison on switch in, even for Poison types', () => {
- battle = common.gen(2).createBattle([
- [{ species: 'Smeargle', moves: ['toxic', 'splash'] }],
- [
- { species: 'Qwilfish', moves: ['transform', 'splash'] },
- { species: 'Gengar', moves: ['nightshade'] },
- ],
- ]);
- battle.makeChoices('move toxic', 'move transform');
- battle.makeChoices('move splash', 'switch 2');
- battle.makeChoices('move splash', 'switch 2');
- // We could check 'psn' at this point, but the following line caused crashes
- // before #5463 was fixed so its useful to execute for regression testing purposes.
- battle.makeChoices('move splash', 'move splash');
- assert.equal(battle.p2.active[0].status, 'psn');
- });
-
- it('should not have its damage counter affected by Heal Bell', () => {
- battle = common.gen(2).createBattle([[
- { species: 'Smeargle', moves: ['toxic', 'willowisp', 'splash'] },
- ], [
- { species: 'Chansey', moves: ['splash', 'healbell'] },
- ]]);
-
- // Modding accuracy so the status moves always hit
- battle.onEvent('Accuracy', battle.format, true);
-
- battle.makeChoices('move toxic', 'move splash');
- const chansey = battle.p2.active[0];
- battle.makeChoices('move splash', 'move healbell');
- battle.makeChoices('move willowisp', 'move splash');
- let hp = chansey.hp;
- battle.makeChoices('move splash', 'move splash');
- assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16) * 3);
- hp = chansey.hp;
-
- battle.makeChoices('move splash', 'move healbell');
- battle.makeChoices('move toxic', 'move splash');
- // Toxic counter should be reset by a successful Toxic
- assert.equal(hp - chansey.hp, Math.floor(chansey.maxhp / 16));
+ // lastSelectedMove = '', lastSelectedMoveSlot = 0 (tackle)
+ battle = common.gen(1).createBattle({
+ customRules: 'guaranteedsecondarymod',
+ }, [[
+ { species: 'jynx', moves: ['icepunch', 'firepunch'] },
+ ], [
+ { species: 'bulbasaur', moves: ['tackle'] },
+ { species: 'poliwhirl', moves: ['tackle'] },
+ ]]);
+ battle.makeChoices('move icepunch', 'switch 2');
+ assert.equal(battle.p2.active[0].status, 'frz');
+ assert.cantMove(() => battle.p2.choose('move tackle'));
+ battle.makeChoices('move firepunch', 'move fight');
+ assert(battle.log.some(line => line.includes('Desync Clause Mod activated')));
+ assert.equal(battle.p2.active[0].moveSlots[0].pp, 55);
+
+ // lastSelectedMove = 'toxic', lastSelectedMoveSlot = 1 (toxic)
+ battle = common.gen(1).createBattle({
+ customRules: 'guaranteedsecondarymod',
+ }, [[
+ { species: 'jynx', moves: ['tackle', 'icepunch', 'firepunch'] },
+ ], [
+ { species: 'poliwhirl', moves: ['tackle', 'toxic'] },
+ ]]);
+ battle.makeChoices('move tackle', 'move tackle');
+ battle.makeChoices('move icepunch', 'move toxic');
+ assert.equal(battle.p2.active[0].status, 'frz');
+ assert.cantMove(() => battle.p2.choose('move tackle'));
+ assert.cantMove(() => battle.p2.choose('move toxic'));
+ battle.makeChoices('move firepunch', 'move fight');
+ assert(!battle.log.some(line => line.includes('Desync Clause Mod activated')));
+ assert.equal(battle.p2.active[0].moveSlots[0].pp, 55);
+ assert.equal(battle.p2.active[0].moveSlots[1].pp, 15);
+
+ // Player 2 lastSelectedMove = 'tackle', lastSelectedMoveSlot = 0 (tackle)
+ battle = common.gen(1).createBattle({
+ customRules: 'guaranteedsecondarymod',
+ }, [[
+ { species: 'jynx', moves: ['tackle', 'icepunch', 'firepunch'] },
+ ], [
+ { species: 'bulbasaur', moves: ['toxic'] },
+ { species: 'poliwhirl', moves: ['tackle'] },
+ ]]);
+ battle.makeChoices('move tackle', 'move toxic');
+ battle.makeChoices('move icepunch', 'switch 2');
+ assert.equal(battle.p2.active[0].status, 'frz');
+ assert.cantMove(() => battle.p2.choose('move tackle'));
+ battle.makeChoices('move firepunch', 'move fight');
+ assert(battle.log.some(line => line.includes('Desync Clause Mod activated')));
+ assert.equal(battle.p2.active[0].moveSlots[0].pp, 55);
+
+ // Player 2 lastSelectedMove = 'tackle', lastSelectedMoveSlot = 0 (tackle)
+ battle = common.gen(1).createBattle({
+ customRules: 'guaranteedsecondarymod',
+ }, [[
+ { species: 'jynx', moves: ['tackle', 'icepunch', 'firepunch'] },
+ ], [
+ { species: 'bulbasaur', moves: ['splash', 'splash', 'tackle'] },
+ { species: 'poliwhirl', moves: ['tackle'] },
+ ]]);
+ battle.makeChoices('move tackle', 'move tackle');
+ battle.makeChoices('move icepunch', 'switch 2');
+ assert.equal(battle.p2.active[0].status, 'frz');
+ assert.cantMove(() => battle.p2.choose('move tackle'));
+ battle.makeChoices('move firepunch', 'move fight');
+ assert(!battle.log.some(line => line.includes('Desync Clause Mod activated')));
+ assert.equal(battle.p2.active[0].moveSlots[0].pp, 55);
+ });
});
});
diff --git a/test/sim/moves/bide.js b/test/sim/moves/bide.js
index cdff20e1ad..3d6134e63d 100644
--- a/test/sim/moves/bide.js
+++ b/test/sim/moves/bide.js
@@ -138,7 +138,7 @@ describe('[Gen 1] Bide', () => {
const aerodactyl = battle.p1.active[0];
battle.makeChoices();
assert.equal(aerodactyl.volatiles['bide'].time, 3);
- assert.equal(aerodactyl.volatiles['disable'].move, 'bide');
+ assert.equal(aerodactyl.volatiles['disable'].slotIndex, 0);
// Struggle is the choice
const choices = aerodactyl.getMoveRequestData().moves;
assert.equal(choices[0].id, 'struggle');
diff --git a/test/sim/moves/disable.js b/test/sim/moves/disable.js
index 462d0ccea5..4a01a9f455 100644
--- a/test/sim/moves/disable.js
+++ b/test/sim/moves/disable.js
@@ -86,12 +86,42 @@ describe('Disable', () => {
{ species: 'Muk', moves: ['hyperbeam', 'fireblast', 'blizzard', 'tackle'] },
]]);
const muk = battle.p2.active[0];
- muk.deductPP('hyperbeam', 8);
- muk.deductPP('fireblast', 8);
- muk.deductPP('blizzard', 8);
+ muk.moveSlots[0].pp = 0;
+ muk.moveSlots[1].pp = 0;
+ muk.moveSlots[2].pp = 0;
battle.makeChoices('auto', 'move tackle');
- assert('disable' in muk.volatiles);
- assert.equal(muk.volatiles.disable.move, 'tackle');
+ assert(!!muk.volatiles['disable']);
+ assert.equal(muk.volatiles.disable.slotIndex, 3);
+ });
+
+ it(`should keep the slot disabled even if the move is replaced by Mimic`, () => {
+ battle = common.gen(1).createBattle({ seed: [2, 0, 0, 0] }, [[
+ { species: 'Drowzee', moves: ['mimic', 'tackle'] },
+ ], [
+ { species: 'Abra', moves: ['tackle', 'disable'] },
+ ]]);
+ const disabled = battle.p1.active[0];
+ battle.makeChoices('move mimic', 'move disable');
+ assert.equal(disabled.moveSlots[0].id, 'tackle');
+ assert.equal(disabled.volatiles['disable'].slotIndex, 1);
+ assert.equal(disabled.volatiles['disable'].move, 'tackle');
+ assert.cantMove(() => battle.p1.choose('move 2'));
+ // can select the Tackle in the first slot, but the move will still fail
+ battle.makeChoices('move 1', 'move tackle');
+ assert.fullHP(battle.p2.active[0]);
+ });
+
+ it(`should keep the slot disabled even if the move is replaced by Transform`, () => {
+ battle = common.gen(1).createBattle({ seed: [2, 0, 0, 0] }, [[
+ { species: 'Drowzee', moves: ['transform', 'tackle'] },
+ ], [
+ { species: 'Abra', moves: ['tackle', 'disable'] },
+ ]]);
+ battle.makeChoices('move tackle', 'move disable');
+ assert.cantMove(() => battle.p1.choose('move tackle'));
+ battle.makeChoices('move transform', 'move tackle');
+ assert.cantMove(() => battle.p1.choose('move disable'));
+ battle.makeChoices('move tackle', 'move tackle');
});
it(`Disable should build Rage, even if it misses/fails`, () => {
diff --git a/test/sim/moves/hyperbeam.js b/test/sim/moves/hyperbeam.js
index 2c7e66d12e..3b1227b269 100644
--- a/test/sim/moves/hyperbeam.js
+++ b/test/sim/moves/hyperbeam.js
@@ -99,7 +99,7 @@ describe(`Hyper Beam [Gen 1]`, () => {
battle.makeChoices('move wrap', 'auto');
assert.false(battle.p2.active[0].volatiles['partiallytrapped']);
assert(battle.p2.active[0].volatiles['mustrecharge']);
- assert(battle.log.includes("|-hint|In Gen 1, if a pokemon is forced to use a move with 0 PP, the move will underflow to have 63 PP."));
+ assert(battle.log.includes("|-hint|In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP."));
assert.equal(battle.p2.active[0].moveSlots[0].pp, 63);
});
From e813cf649cf5757e0877be8cf5cdddf3c991e8d1 Mon Sep 17 00:00:00 2001
From: Spammernoob69
Date: Sun, 22 Mar 2026 16:42:12 -0400
Subject: [PATCH 160/233] CAP: Implement Flox (#11807)
CAP35 Prevo implemented as per https://www.smogon.com/forums/threads/cap-35-prevo-so-far.3776855/
Shox typing edited as per https://www.smogon.com/forums/threads/cap-35-prevo-part-2-typing-discussion.3777113/post-10858448
---
data/formats-data.ts | 4 +++
data/learnsets.ts | 61 ++++++++++++++++++++++++++++++++++++++++++++
data/pokedex.ts | 17 +++++++++++-
3 files changed, 81 insertions(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 249e442540..499e991f05 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -6162,6 +6162,10 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
isNonstandard: "CAP",
tier: "CAP",
},
+ flox: {
+ isNonstandard: "CAP",
+ tier: "CAP LC",
+ },
shox: {
isNonstandard: "CAP",
tier: "CAP",
diff --git a/data/learnsets.ts b/data/learnsets.ts
index f5f778f2d6..717977dcf2 100644
--- a/data/learnsets.ts
+++ b/data/learnsets.ts
@@ -100092,6 +100092,67 @@ export const Learnsets: import('../sim/dex-species').LearnsetDataTable = {
{generation: 9, level: 50, shiny: true, abilities: ["armortail"], moves: ["celebrate", "dragontail", "sludgebomb", "dragondance"], pokeball: "cherishball"},
],
},
+ flox: {
+ learnset: {
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ charge: ["9M", "9L15"],
+ chargebeam: ["9M"],
+ charm: ["9M", "9L15"],
+ dig: ["9M"],
+ disarmingvoice: ["9M"],
+ discharge: ["9L40"],
+ doubleedge: ["9M", "9L50"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endeavor: ["9M", "9E"],
+ endure: ["9M"],
+ facade: ["9M"],
+ glare: ["9E"],
+ growl: ["9L1"],
+ headbutt: ["9L20"],
+ helpinghand: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ milkdrink: ["9L30"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nuzzle: ["9E"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ spark: ["9L25"],
+ spitup: ["9E"],
+ stockpile: ["9E"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ swallow: ["9E"],
+ tackle: ["9L1"],
+ takedown: ["9M", "9L35"],
+ terablast: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thundershock: ["9L10"],
+ thunderwave: ["9M", "9L5"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ zapcannon: ["9L55"],
+ zenheadbutt: ["9M"],
+ },
+ },
shox: {
learnset: {
blizzard: ["9M"],
diff --git a/data/pokedex.ts b/data/pokedex.ts
index e0700637b1..27ac63c823 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -20678,15 +20678,30 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
eggGroups: ["Dragon", "Mineral"],
gen: 9,
},
+ flox: {
+ num: -76,
+ name: "Flox",
+ types: ["Normal", "Electric"],
+ baseStats: { hp: 96, atk: 25, def: 67, spa: 73, spd: 68, spe: 61 },
+ abilities: { 0: "Static", 1: "Sticky Hold", H: "Cud Chew" },
+ heightm: 0.9,
+ weightkg: 66.6,
+ color: "Brown",
+ evos: ["Shox"],
+ eggGroups: ["Field"],
+ gen: 9,
+ },
shox: {
num: -77,
name: "Shox",
- types: ["Electric", "Normal"],
+ types: ["Normal", "Electric"],
baseStats: { hp: 136, atk: 55, def: 87, spa: 108, spd: 108, spe: 56 },
abilities: { 0: "Electromorphosis", 1: "Sticky Hold", H: "Cud Chew" },
heightm: 3,
weightkg: 99.9,
color: "Brown",
+ prevo: "Flox",
+ evoLevel: 34,
eggGroups: ["Field"],
gen: 9,
},
From 0effd41ff7c339413f5e6f974d358f990692d6d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Tue, 24 Mar 2026 00:10:06 +0000
Subject: [PATCH 161/233] Comment inherited mod field removals (#11833)
---
data/mods/chatbats/moves.ts | 33 +-
data/mods/gen1/conditions.ts | 2 +-
data/mods/gen1/moves.ts | 38 +-
data/mods/gen1stadium/conditions.ts | 2 +-
data/mods/gen1stadium/moves.ts | 3 -
data/mods/gen2/conditions.ts | 4 +-
data/mods/gen2/items.ts | 44 +-
data/mods/gen2/moves.ts | 41 +-
data/mods/gen2stadium2/items.ts | 2 +-
data/mods/gen3/abilities.ts | 12 +-
data/mods/gen3/conditions.ts | 2 +-
data/mods/gen3/items.ts | 70 +--
data/mods/gen3/moves.ts | 26 +-
data/mods/gen4/abilities.ts | 52 +-
data/mods/gen4/conditions.ts | 2 +-
data/mods/gen4/items.ts | 28 +-
data/mods/gen4/moves.ts | 46 +-
data/mods/gen5/abilities.ts | 8 +-
data/mods/gen5/moves.ts | 24 +-
data/mods/gen6/abilities.ts | 4 +-
data/mods/gen6/conditions.ts | 2 +-
data/mods/gen6/items.ts | 2 +-
data/mods/gen6/moves.ts | 6 +-
data/mods/gen6megasrevisited/abilities.ts | 4 +-
data/mods/gen7/abilities.ts | 10 +-
data/mods/gen7/moves.ts | 12 +-
data/mods/gen8/abilities.ts | 8 +-
data/mods/gen8/moves.ts | 2 +-
data/mods/gen8/pokedex.ts | 4 +-
data/mods/gen9predlc/abilities.ts | 4 +-
data/mods/gen9ssb/moves.ts | 106 ----
data/moves.ts | 714 ----------------------
sim/dex-moves.ts | 18 +-
test/sim/abilities/poisontouch.js | 2 +-
34 files changed, 242 insertions(+), 1095 deletions(-)
diff --git a/data/mods/chatbats/moves.ts b/data/mods/chatbats/moves.ts
index ba238506fb..4dafec9af8 100644
--- a/data/mods/chatbats/moves.ts
+++ b/data/mods/chatbats/moves.ts
@@ -2,7 +2,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
ancientpower: {
inherit: true,
category: "Physical",
- secondary: null,
+ secondary: undefined, // no inherit
// Ancient Power is physical and boosts on-kill
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) {
@@ -44,7 +44,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Crunch', target);
this.add('-anim', source, 'Rock Slide', target);
},
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Clever",
@@ -60,7 +59,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Tough",
@@ -197,7 +195,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.field.setWeather('snowscape');
},
},
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Clever",
@@ -254,7 +251,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterSubDamage(damage, target, source, move) {
if (!source.isAlly(target)) this.hint(move.category + " Geyser");
},
- secondary: null,
target: "normal",
type: "Water",
desc: "This move is Special + no contact if it would be stronger.",
@@ -281,7 +277,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('encore');
},
weather: 'raindance',
- secondary: null,
target: "normal",
type: "Water",
zMove: { boost: { spe: 1 } },
@@ -343,7 +338,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Ivy Cudgel Rock', target);
this.add('-anim', source, 'Splash');
},
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Beautiful",
@@ -366,7 +360,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source, move) {
this.add('-anim', source, 'Metal Claw', target);
},
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Beautiful",
@@ -395,7 +388,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thunderouskick: {
inherit: true,
- secondary: null,
+ secondary: undefined, // no inherit
onHit(target, source, move) {
// random # 0 or 1
const randomNum = this.random(2);
@@ -444,7 +437,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "foeSide",
type: "Rock",
zMove: { boost: { def: 1 } },
@@ -487,7 +479,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "foeSide",
type: "Ground",
zMove: { boost: { def: 1 } },
@@ -584,7 +575,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
source.switchFlag = true;
},
- secondary: null,
hasSheerForce: true,
target: "normal",
type: "Dragon",
@@ -658,7 +648,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Spirit Shackle', target);
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -687,7 +676,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Clever",
@@ -833,7 +821,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
contestType: "Cool",
@@ -853,7 +840,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', target, 'typechange', 'Steel');
},
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -890,7 +876,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Extreme Speed', target);
this.add('-anim', source, 'Thunder', target);
},
- secondary: null,
+ secondary: undefined, // no inherit
desc: "Nearly always goes first.",
shortDesc: "Nearly always goes first.",
},
@@ -938,7 +924,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Cute",
@@ -1078,7 +1063,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -1174,7 +1158,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Fire",
zMove: { basePower: 160 },
@@ -1209,7 +1192,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -1275,7 +1257,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -1319,7 +1300,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [10, 10],
- secondary: null,
target: "normal",
type: "Dark",
zMove: { basePower: 140 },
@@ -1368,7 +1348,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return null;
},
callsMove: true,
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -1395,7 +1374,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return priority + 1;
}
},
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Cool",
@@ -1422,7 +1400,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return priority + 1;
}
},
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -1450,7 +1427,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.boost({ spe: 1 }, source, source);
}
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -1617,7 +1593,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Explosion', target);
this.add('-anim', source, 'Mind Blown', target);
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -1695,7 +1670,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -1739,7 +1713,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Curse', target);
this.add('-anim', source, 'Bug Bite', target);
},
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cute",
diff --git a/data/mods/gen1/conditions.ts b/data/mods/gen1/conditions.ts
index ab27044db4..7947c9d867 100644
--- a/data/mods/gen1/conditions.ts
+++ b/data/mods/gen1/conditions.ts
@@ -265,7 +265,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
inherit: true,
duration: 0,
onBeforeMovePriority: 7,
- onStart() {},
+ onStart: undefined, // no inherit
onAfterMove(pokemon, target, move) {
if (target && target.hp <= 0) {
delete pokemon.volatiles['mustrecharge'];
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index 9069c3658f..cc49b919aa 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -217,7 +217,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
condition: {
inherit: true,
- durationCallback: undefined,
+ durationCallback: undefined, // no inherit
onStart(pokemon) {
// disable can only select moves that have pp > 0, hence the onTryHit modification
const [slotIndex, moveSlot] = this.sample(Array.from(pokemon.moveSlots.entries()).filter(([i, ms]) => ms.pp > 0));
@@ -253,7 +253,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
dizzypunch: {
inherit: true,
- secondary: null,
+ secondary: undefined, // no inherit
},
doubleedge: {
inherit: true,
@@ -308,7 +308,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
// This does nothing as it's dealt with on critical hit calculation.
- onModifyCritRatio() {},
+ onModifyCritRatio: undefined, // no inherit
},
},
glare: {
@@ -391,7 +391,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
leechseed: {
inherit: true,
- onHit() {},
+ onHit: undefined, // no inherit
condition: {
inherit: true,
onAfterMoveSelfPriority: 1,
@@ -421,7 +421,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
lightscreen: {
inherit: true,
volatileStatus: 'lightscreen',
- sideCondition: undefined,
+ sideCondition: undefined, // no inherit
onTryHit(pokemon) {
if (pokemon.volatiles['lightscreen']) {
return false;
@@ -476,7 +476,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onSourceModifyDamage() {},
+ onSourceModifyDamage: undefined, // no inherit
},
},
mirrormove: {
@@ -519,7 +519,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
petaldance: {
inherit: true,
- onMoveFail() {},
+ onMoveFail: undefined, // no inherit
},
poisonsting: {
inherit: true,
@@ -597,7 +597,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
recover: {
inherit: true,
- heal: null,
+ heal: undefined, // no inherit
onHit(target) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@@ -617,7 +617,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
reflect: {
inherit: true,
volatileStatus: 'reflect',
- sideCondition: undefined,
+ sideCondition: undefined, // no inherit
onTryHit(pokemon) {
if (pokemon.volatiles['reflect']) {
return false;
@@ -632,7 +632,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
rest: {
inherit: true,
- onTry() {},
+ onTry: undefined, // no inherit
onHit(target, source, move) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@@ -655,12 +655,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
roar: {
inherit: true,
forceSwitch: false,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
priority: 0,
},
rockslide: {
inherit: true,
- secondary: null,
+ secondary: undefined, // no inherit
target: "normal",
},
rockthrow: {
@@ -736,7 +736,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
softboiled: {
inherit: true,
- heal: null,
+ heal: undefined, // no inherit
onHit(target) {
if (target.hp === target.maxhp) return false;
// Fail when health is 255 or 511 less than max, unless it is divisible by 256
@@ -757,7 +757,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
pp: 10,
recoil: [1, 2],
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
},
substitute: {
inherit: true,
@@ -789,7 +789,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
delete target.volatiles['partiallytrapped'];
}
},
- onTryPrimaryHit() {},
+ onTryPrimaryHit: undefined, // no inherit
onTryHitPriority: -1,
onTryHit(target, source, move) {
if (move.category === 'Status') {
@@ -862,7 +862,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thrash: {
inherit: true,
- onMoveFail() {},
+ onMoveFail: undefined, // no inherit
},
thunder: {
inherit: true,
@@ -873,14 +873,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
triattack: {
inherit: true,
- onHit() {},
- secondary: null,
+ onHit: undefined, // no inherit
+ secondary: undefined, // no inherit
},
whirlwind: {
inherit: true,
accuracy: 85,
forceSwitch: false,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
priority: 0,
},
wingattack: {
diff --git a/data/mods/gen1stadium/conditions.ts b/data/mods/gen1stadium/conditions.ts
index 8709455f95..f39ad0fbe0 100644
--- a/data/mods/gen1stadium/conditions.ts
+++ b/data/mods/gen1stadium/conditions.ts
@@ -101,7 +101,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
flinch: {
inherit: true,
- onStart() {},
+ onStart: undefined, // no inherit
},
partiallytrapped: {
name: 'partiallytrapped',
diff --git a/data/mods/gen1stadium/moves.ts b/data/mods/gen1stadium/moves.ts
index 3f125e606a..5c9f729588 100644
--- a/data/mods/gen1stadium/moves.ts
+++ b/data/mods/gen1stadium/moves.ts
@@ -174,7 +174,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
recover: {
inherit: true,
- heal: null,
onHit(target) {
if (target.hp === target.maxhp) {
return false;
@@ -197,7 +196,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
softboiled: {
inherit: true,
- heal: null,
onHit(target) {
// Fail when health is 255 or 511 less than max
if (target.hp === target.maxhp) {
@@ -271,7 +269,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return 0;
},
},
- secondary: null,
target: "self",
type: "Normal",
},
diff --git a/data/mods/gen2/conditions.ts b/data/mods/gen2/conditions.ts
index 1e559eb155..f30c844f9f 100644
--- a/data/mods/gen2/conditions.ts
+++ b/data/mods/gen2/conditions.ts
@@ -62,8 +62,8 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
this.add('cant', pokemon, 'frz');
return false;
},
- onModifyMove() {},
- onDamagingHit() {},
+ onModifyMove: undefined, // no inherit
+ onDamagingHit: undefined, // no inherit
onAfterMoveSecondary(target, source, move) {
if ((move.secondary && move.secondary.status === 'brn') || move.statusRoll === 'brn') {
target.cureStatus();
diff --git a/data/mods/gen2/items.ts b/data/mods/gen2/items.ts
index c31e371bc9..1a559bceb5 100644
--- a/data/mods/gen2/items.ts
+++ b/data/mods/gen2/items.ts
@@ -5,7 +5,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackbelt: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Fighting') {
return damage * 1.1;
@@ -14,7 +14,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackglasses: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Dark') {
return damage * 1.1;
@@ -31,7 +31,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
charcoal: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Fire') {
return damage * 1.1;
@@ -40,7 +40,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonfang: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
},
dragonscale: {
inherit: true,
@@ -65,7 +65,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
hardstone: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Rock') {
return damage * 1.1;
@@ -106,7 +106,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
lightball: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
},
loveball: {
inherit: true,
@@ -127,7 +127,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magnet: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Electric') {
return damage * 1.1;
@@ -136,7 +136,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
metalcoat: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Steel') {
return damage * 1.1;
@@ -146,12 +146,12 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
metalpowder: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
- onModifyDef() {},
- onModifySpD() {},
+ onModifyDef: undefined, // no inherit
+ onModifySpD: undefined, // no inherit
},
miracleseed: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Grass') {
return damage * 1.1;
@@ -164,7 +164,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
mysticwater: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Water') {
return damage * 1.1;
@@ -173,7 +173,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
nevermeltice: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ice') {
return damage * 1.1;
@@ -182,7 +182,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
poisonbarb: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Poison') {
return damage * 1.1;
@@ -191,7 +191,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sharpbeak: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Flying') {
return damage * 1.1;
@@ -200,7 +200,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silverpowder: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Bug') {
return damage * 1.1;
@@ -209,7 +209,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
softsand: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ground') {
return damage * 1.1;
@@ -218,7 +218,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
spelltag: {
inherit: true,
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Ghost') {
return damage * 1.1;
@@ -241,11 +241,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
thickclub: {
inherit: true,
// In Gen 2 this happens in stat calculation directly.
- onModifyAtk() {},
+ onModifyAtk: undefined, // no inherit
},
twistedspoon: {
inherit: true,
- onModifySpA() {},
+ onModifySpA: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Psychic') {
return damage * 1.1;
@@ -290,7 +290,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
pinkbow: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Normal') {
return damage * 1.1;
@@ -300,7 +300,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
polkadotbow: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyDamage(damage, source, target, move) {
if (move?.type === 'Normal') {
return damage * 1.1;
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index 93c28999fb..92b3575d2b 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -69,8 +69,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return false;
},
- beforeTurnCallback() {},
- onTry() {},
+ beforeTurnCallback: undefined, // no inherit
+ onTry: undefined, // no inherit
condition: {},
priority: -1,
},
@@ -90,7 +90,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterMoveSelf(pokemon) {
this.damage(pokemon.baseMaxhp / 4);
},
- onResidual() {},
+ onResidual: undefined, // no inherit
},
},
detect: {
@@ -115,7 +115,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
- onSourceModifyDamage() {},
+ onSourceModifyDamage: undefined, // no inherit
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'earthquake' || move.id === 'magnitude') {
return this.chainModify(2);
@@ -142,7 +142,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', target, 'Encore');
},
onResidualOrder: 13,
- onResidualSubOrder: undefined,
+ onResidualSubOrder: undefined, // no inherit
},
},
endure: {
@@ -180,7 +180,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return;
return false;
},
- onSourceModifyDamage() {},
+ onSourceModifyDamage: undefined, // no inherit
onSourceBasePower(basePower, target, source, move) {
if (move.id === 'gust' || move.id === 'twister') {
return this.chainModify(2);
@@ -248,10 +248,10 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
leechseed: {
inherit: true,
- onHit() {},
+ onHit: undefined, // no inherit
condition: {
inherit: true,
- onResidual() {},
+ onResidual: undefined, // no inherit
onAfterMoveSelfPriority: 2,
onAfterMoveSelf(pokemon) {
if (!pokemon.hp) return;
@@ -288,16 +288,14 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
condition: {
inherit: true,
- onSourceInvulnerability() {},
+ onSourceInvulnerability: undefined, // no inherit
},
},
lowkick: {
inherit: true,
accuracy: 90,
basePower: 50,
- basePowerCallback() {
- return 50;
- },
+ basePowerCallback: undefined, // no inherit
secondary: {
chance: 30,
volatileStatus: 'flinch',
@@ -334,8 +332,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
return false;
},
- beforeTurnCallback() {},
- onTry() {},
+ beforeTurnCallback: undefined, // no inherit
+ onTry: undefined, // no inherit
condition: {},
priority: -1,
},
@@ -358,7 +356,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mist: {
inherit: true,
volatileStatus: 'mist',
- sideCondition: undefined,
+ sideCondition: undefined, // no inherit
condition: {
onStart(pokemon) {
this.add('-start', pokemon, 'Mist');
@@ -409,7 +407,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onResidual() {},
+ onResidual: undefined, // no inherit
onAfterMoveSelfPriority: 1,
onAfterMoveSelf(pokemon) {
if (pokemon.status === 'slp') this.damage(pokemon.baseMaxhp / 4);
@@ -468,7 +466,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
data.sources.push(pokemon);
},
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
condition: {
inherit: true,
onBeforeSwitchOut(pokemon) {
@@ -544,7 +542,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.statusState.source = target;
this.heal(target.maxhp);
},
- secondary: null,
},
return: {
inherit: true,
@@ -598,7 +595,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
return source.status !== 'slp';
},
- secondary: null,
+ secondary: undefined, // no inherit
},
slash: {
inherit: true,
@@ -628,7 +625,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return source.status !== 'slp';
},
// Rain weakening done directly in the damage formula
- onBasePower() {},
+ onBasePower: undefined, // no inherit
},
spiderweb: {
inherit: true,
@@ -638,7 +635,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onSideRestart: undefined,
+ onSideRestart: undefined, // no inherit
},
},
substitute: {
@@ -722,7 +719,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
thief: {
inherit: true,
- onAfterHit() {},
+ onAfterHit: undefined, // no inherit
secondary: {
chance: 100,
onHit(target, source) {
diff --git a/data/mods/gen2stadium2/items.ts b/data/mods/gen2stadium2/items.ts
index 990e14c2a4..a9d11a1181 100644
--- a/data/mods/gen2stadium2/items.ts
+++ b/data/mods/gen2stadium2/items.ts
@@ -10,6 +10,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonscale: {
inherit: true,
- onModifyDamage() {},
+ onModifyDamage: undefined, // no inherit
},
};
diff --git a/data/mods/gen3/abilities.ts b/data/mods/gen3/abilities.ts
index ebb37c42d0..33ce5bcff8 100644
--- a/data/mods/gen3/abilities.ts
+++ b/data/mods/gen3/abilities.ts
@@ -92,7 +92,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
lightningrod: {
inherit: true,
- onAnyRedirectTarget() {},
+ onAnyRedirectTarget: undefined, // no inherit
onFoeRedirectTarget(target, source, source2, move) {
// don't count Hidden Power as Electric-type
if (this.dex.moves.get(move.id).type !== 'Electric') return;
@@ -103,8 +103,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
magnetpull: {
inherit: true,
- onFoeTrapPokemon() {},
- onFoeMaybeTrapPokemon() {},
+ onFoeTrapPokemon: undefined, // no inherit
+ onFoeMaybeTrapPokemon: undefined, // no inherit
onAnyTrapPokemon(pokemon) {
if (pokemon.hasType('Steel') && pokemon.isAdjacent(this.effectState.target)) {
pokemon.tryTrap(true);
@@ -156,7 +156,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
raindish: {
inherit: true,
- onWeather() {},
+ onWeather: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 3,
onResidual(pokemon) {
@@ -191,7 +191,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
trace: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onStart(pokemon) {
const target = pokemon.side.randomFoe();
if (!target || target.fainted) return;
@@ -202,7 +202,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
truant: {
inherit: true,
- onStart() {},
+ onStart: undefined, // no inherit
onSwitchIn(pokemon) {
pokemon.truantTurn = this.turn !== 0;
},
diff --git a/data/mods/gen3/conditions.ts b/data/mods/gen3/conditions.ts
index 79d353ebba..6f176de671 100644
--- a/data/mods/gen3/conditions.ts
+++ b/data/mods/gen3/conditions.ts
@@ -51,6 +51,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
sandstorm: {
inherit: true,
- onModifySpD() {},
+ onModifySpD: undefined, // no inherit
},
};
diff --git a/data/mods/gen3/items.ts b/data/mods/gen3/items.ts
index c1dbacdc51..5a1054053c 100644
--- a/data/mods/gen3/items.ts
+++ b/data/mods/gen3/items.ts
@@ -1,7 +1,7 @@
export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
aguavberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -12,7 +12,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
apicotberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -23,7 +23,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
berryjuice: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -37,7 +37,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackbelt: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Fighting') {
@@ -47,7 +47,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
blackglasses: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Dark') {
@@ -57,7 +57,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
charcoal: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Fire') {
@@ -67,7 +67,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
dragonfang: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Dragon') {
@@ -90,7 +90,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
figyberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -101,7 +101,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
ganlonberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -112,7 +112,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
hardstone: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Rock') {
@@ -126,7 +126,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
iapapaberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -152,7 +152,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lansatberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -175,7 +175,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
liechiberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -191,7 +191,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
return this.chainModify(2);
}
},
- onBasePower() {},
+ onBasePower: undefined, // no inherit
},
loveball: {
inherit: true,
@@ -203,7 +203,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magnet: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Electric') {
@@ -213,7 +213,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
magoberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -224,7 +224,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
metalcoat: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Steel') {
@@ -234,7 +234,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
miracleseed: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Grass') {
@@ -248,7 +248,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
mysticwater: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Water') {
@@ -258,7 +258,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
nevermeltice: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Ice') {
@@ -268,7 +268,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
oranberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -279,7 +279,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
petayaberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -290,7 +290,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
poisonbarb: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Poison') {
@@ -300,12 +300,12 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
quickclaw: {
inherit: true,
- onFractionalPriority() {},
+ onFractionalPriority: undefined, // no inherit
// implemented in Pokemon#getActionSpeed()
},
salacberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -316,7 +316,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
seaincense: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Water') {
@@ -326,7 +326,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sharpbeak: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Flying') {
@@ -336,7 +336,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silkscarf: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Normal') {
@@ -346,7 +346,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
silverpowder: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Bug') {
@@ -356,7 +356,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
sitrusberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -370,7 +370,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
softsand: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Ground') {
@@ -380,7 +380,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
spelltag: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyAtkPriority: 1,
onModifyAtk(atk, user, target, move) {
if (move?.type === 'Ghost') {
@@ -394,7 +394,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
starfberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
@@ -405,7 +405,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
twistedspoon: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, user, target, move) {
if (move?.type === 'Psychic') {
@@ -415,7 +415,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
wikiberry: {
inherit: true,
- onUpdate() {},
+ onUpdate: undefined, // no inherit
onResidualOrder: 10,
onResidualSubOrder: 4,
onResidual(pokemon) {
diff --git a/data/mods/gen3/moves.ts b/data/mods/gen3/moves.ts
index fdff16dfe1..06cdde7a04 100644
--- a/data/mods/gen3/moves.ts
+++ b/data/mods/gen3/moves.ts
@@ -60,7 +60,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
condition: {
inherit: true,
- onAfterSetStatus() {},
+ onAfterSetStatus: undefined, // no inherit
onBeforeMove(pokemon, target, move) {
if (this.effectState.duration === 1) {
this.add('-end', pokemon, 'move: Bide');
@@ -102,7 +102,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
blizzard: {
inherit: true,
- onModifyMove() { },
+ onModifyMove: undefined, // no inherit
},
brickbreak: {
inherit: true,
@@ -115,7 +115,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
charge: {
inherit: true,
- boosts: null,
+ boosts: undefined, // no inherit
},
conversion: {
inherit: true,
@@ -168,7 +168,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
- onDamagingHit() {},
+ onDamagingHit: undefined, // no inherit
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@@ -207,8 +207,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
durationCallback() {
return this.random(2, 6);
},
- "onResidualOrder": undefined,
- "onResidualSubOrder": undefined,
+ "onResidualOrder": undefined, // no inherit
+ "onResidualSubOrder": undefined, // no inherit
},
},
dive: {
@@ -302,7 +302,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
followme: {
inherit: true,
- volatileStatus: undefined,
+ volatileStatus: undefined, // no inherit
slotCondition: 'followme',
condition: {
inherit: true,
@@ -412,7 +412,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (source !== this.effectState.target || !this.effectState.slot) return;
return this.getAtSlot(this.effectState.slot);
},
- onDamagingHit() {},
+ onDamagingHit: undefined, // no inherit
onDamagePriority: -101,
onDamage(damage, target, source, effect) {
if (
@@ -428,7 +428,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
mirrormove: {
inherit: true,
flags: { metronome: 1, failencore: 1, nosleeptalk: 1, noassist: 1 },
- onTryHit() { },
+ onTryHit: undefined, // no inherit
onHit(pokemon) {
const noMirror = [
'assist', 'curse', 'doomdesire', 'focuspunch', 'futuresight', 'magiccoat', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'psychup', 'roleplay', 'sketch', 'sleeptalk', 'spikes', 'spitup', 'taunt', 'teeterdance', 'transform',
@@ -594,11 +594,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
duration: 2,
- durationCallback: undefined,
+ durationCallback: undefined, // no inherit
onEnd(target) {
this.add('-end', target, 'move: Taunt', '[silent]');
},
- onBeforeMovePriority: undefined,
+ onBeforeMovePriority: undefined, // no inherit
},
},
teeterdance: {
@@ -624,11 +624,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
volttackle: {
inherit: true,
- secondary: null,
+ secondary: undefined, // no inherit
},
waterfall: {
inherit: true,
- secondary: null,
+ secondary: undefined, // no inherit
},
weatherball: {
inherit: true,
diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts
index f75a93d785..461e5956b4 100644
--- a/data/mods/gen4/abilities.ts
+++ b/data/mods/gen4/abilities.ts
@@ -1,7 +1,7 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
airlock: {
inherit: true,
- onSwitchIn() {},
+ onSwitchIn: undefined, // no inherit
onStart(pokemon) {
pokemon.abilityState.ending = false;
},
@@ -24,8 +24,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
blaze: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {
@@ -36,7 +36,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
cloudnine: {
inherit: true,
- onSwitchIn() {},
+ onSwitchIn: undefined, // no inherit
onStart(pokemon) {
pokemon.abilityState.ending = false;
},
@@ -51,7 +51,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
this.add('-start', target, 'typechange', type, '[from] ability: Color Change');
}
},
- onAfterMoveSecondary() {},
+ onAfterMoveSecondary: undefined, // no inherit
},
compoundeyes: {
onSourceModifyAccuracyPriority: 9,
@@ -129,8 +129,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
condition: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onModifyDamagePhase1(atk, attacker, defender, move) {
if (move.type === 'Fire') {
this.debug('Flash Fire boost');
@@ -202,7 +202,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
hydration: {
inherit: true,
- onResidual() {},
+ onResidual: undefined, // no inherit
onWeather(target, source, effect) {
if (effect.id === 'raindance' && target.status) {
this.add('-activate', target, 'ability: Hydration');
@@ -250,7 +250,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
lightningrod: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
rating: 0,
},
liquidooze: {
@@ -275,7 +275,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
minus: {
inherit: true,
- onModifySpAPriority: undefined,
+ onModifySpAPriority: undefined, // no inherit
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility('plus')) {
@@ -286,7 +286,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
naturalcure: {
inherit: true,
- onCheckShow(pokemon) {},
+ onCheckShow: undefined, // no inherit
onSwitchOut(pokemon) {
if (!pokemon.status || pokemon.status === 'fnt') return;
@@ -307,8 +307,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
overgrow: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) {
@@ -319,13 +319,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
pickup: {
inherit: true,
- onResidual() {},
+ onResidual: undefined, // no inherit
rating: 0,
// No competitive use
},
plus: {
inherit: true,
- onModifySpAPriority: undefined,
+ onModifySpAPriority: undefined, // no inherit
onModifySpA(spa, pokemon) {
for (const allyActive of pokemon.allies()) {
if (allyActive.hasAbility('minus')) {
@@ -389,7 +389,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
simple: {
inherit: true,
- onChangeBoost() {},
+ onChangeBoost: undefined, // no inherit
onModifyBoost(boosts) {
let key: BoostID;
for (key in boosts) {
@@ -425,7 +425,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
stench: {
inherit: true,
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
rating: 0,
// No competitive use
},
@@ -440,18 +440,18 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
stormdrain: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
rating: 0,
},
sturdy: {
inherit: true,
- onDamage() {},
+ onDamage: undefined, // no inherit
rating: 0,
},
swarm: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) {
@@ -484,8 +484,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
thickfat: {
inherit: true,
- onSourceModifyAtk() {},
- onSourceModifySpA() {},
+ onSourceModifyAtk: undefined, // no inherit
+ onSourceModifySpA: undefined, // no inherit
onSourceBasePowerPriority: 1,
onSourceBasePower(basePower, attacker, defender, move) {
if (move.type === 'Ice' || move.type === 'Fire') {
@@ -495,8 +495,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
torrent: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onBasePowerPriority: 2,
onBasePower(basePower, attacker, defender, move) {
if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) {
@@ -541,6 +541,6 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
rebound: {
inherit: true,
- onTryHitSide() {},
+ onTryHitSide: undefined, // no inherit
},
};
diff --git a/data/mods/gen4/conditions.ts b/data/mods/gen4/conditions.ts
index 116a067c80..1f1d1a2dae 100644
--- a/data/mods/gen4/conditions.ts
+++ b/data/mods/gen4/conditions.ts
@@ -118,7 +118,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
lockedmove: {
inherit: true,
- onAfterMove() {},
+ onAfterMove: undefined, // no inherit
},
choicelock: {
inherit: true,
diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts
index b21ef163b2..1f61b55399 100644
--- a/data/mods/gen4/items.ts
+++ b/data/mods/gen4/items.ts
@@ -32,24 +32,24 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
choiceband: {
inherit: true,
- onStart() {},
- onModifyMove() {},
+ onStart: undefined, // no inherit
+ onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
},
choicescarf: {
inherit: true,
- onStart() {},
- onModifyMove() {},
+ onStart: undefined, // no inherit
+ onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
},
choicespecs: {
inherit: true,
- onStart() {},
- onModifyMove() {},
+ onStart: undefined, // no inherit
+ onModifyMove: undefined, // no inherit
onAfterMove(pokemon) {
pokemon.addVolatile('choicelock');
},
@@ -72,7 +72,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
custapberry: {
inherit: true,
- onFractionalPriority() {},
+ onFractionalPriority: undefined, // no inherit
onBeforeTurn(pokemon) {
if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.ability === 'gluttony')) {
const action = this.queue.willMove(pokemon);
@@ -144,7 +144,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
focussash: {
inherit: true,
- onDamage() {},
+ onDamage: undefined, // no inherit
onTryHit(target, source, move) {
if (target !== source && target.hp === target.maxhp) {
target.addVolatile('focussash');
@@ -186,7 +186,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
ironball: {
inherit: true,
- onEffectiveness() {},
+ onEffectiveness: undefined, // no inherit
},
ironplate: {
inherit: true,
@@ -227,8 +227,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lifeorb: {
inherit: true,
- onModifyDamage() {},
- onAfterMoveSecondarySelf() {},
+ onModifyDamage: undefined, // no inherit
+ onAfterMoveSecondarySelf: undefined, // no inherit
onBasePower(basePower, user, target) {
if (!target.volatiles['substitute']) {
user.addVolatile('lifeorb');
@@ -250,8 +250,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
lightball: {
inherit: true,
- onModifyAtk() {},
- onModifySpA() {},
+ onModifyAtk: undefined, // no inherit
+ onModifySpA: undefined, // no inherit
onBasePower(basePower, pokemon) {
if (pokemon.species.name === 'Pikachu') {
return this.chainModify(2);
@@ -319,7 +319,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
}
this.effectState.lastMove = move.id;
},
- onModifyDamage() {},
+ onModifyDamage: undefined, // no inherit
onModifyDamagePhase2(damage, source, target, move) {
return damage * (1 + (this.effectState.numConsecutive / 10));
},
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 26b54a66b6..9e0c836f58 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -300,7 +300,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
condition: {
inherit: true,
- duration: undefined,
+ duration: undefined, // no inherit
durationCallback() {
return this.random(4, 8);
},
@@ -398,7 +398,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
volatileStatus: 'encore',
condition: {
inherit: true,
- duration: undefined,
+ duration: undefined, // no inherit
durationCallback() {
return this.random(4, 9);
},
@@ -497,11 +497,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
focuspunch: {
inherit: true,
- priorityChargeCallback() {},
+ priorityChargeCallback: undefined, // no inherit
beforeTurnCallback(pokemon) {
pokemon.addVolatile('focuspunch');
},
- beforeMoveCallback() {},
+ beforeMoveCallback: undefined, // no inherit
onTry(pokemon) {
if (pokemon.volatiles['focuspunch']?.lostFocus) {
this.attrLastMove('[still]');
@@ -576,12 +576,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onFieldResidualOrder: 9,
- onFieldResidualSubOrder: undefined,
+ onFieldResidualSubOrder: undefined, // no inherit
},
},
growth: {
inherit: true,
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
boosts: {
spa: 1,
},
@@ -722,7 +722,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onAnyModifyDamage() {},
+ onAnyModifyDamage: undefined, // no inherit
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Special') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -733,7 +733,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
onSideResidualOrder: 2,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
lockon: {
@@ -749,7 +749,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 6,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
lunardance: {
@@ -797,7 +797,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(newMove, target, { target: source });
return null;
},
- onAllyTryHitSide() {},
+ onAllyTryHitSide: undefined, // no inherit
},
},
magmastorm: {
@@ -822,7 +822,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifyDamagePhase2(damage) {
return damage * 1.5;
},
@@ -891,7 +891,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
mirrormove: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
onHit(pokemon) {
const lastAttackedBy = pokemon.getLastAttackedBy();
if (!lastAttackedBy?.source.lastMove || !lastAttackedBy.move) {
@@ -912,7 +912,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 3,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
moonlight: {
@@ -1109,7 +1109,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onAnyModifyDamage() {},
+ onAnyModifyDamage: undefined, // no inherit
onAnyModifyDamagePhase1(damage, source, target, move) {
if (target !== source && this.effectState.target.hasAlly(target) && this.getCategory(move) === 'Physical') {
if (!target.getMoveHitData(move).crit && !move.infiltrates) {
@@ -1120,7 +1120,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
onSideResidualOrder: 1,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
reversal: {
@@ -1167,7 +1167,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onSideResidualOrder: 4,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
sandtomb: {
@@ -1250,7 +1250,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
- onSwitchIn() {},
+ onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots')) return;
const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
@@ -1267,7 +1267,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
- onSwitchIn() {},
+ onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (pokemon.hasItem('heavydutyboots')) return;
const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
@@ -1385,7 +1385,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return spe * 2;
},
onSideResidualOrder: 5,
- onSideResidualSubOrder: undefined,
+ onSideResidualSubOrder: undefined, // no inherit
},
},
taunt: {
@@ -1393,7 +1393,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { protect: 1, mirror: 1, bypasssub: 1, metronome: 1 },
condition: {
inherit: true,
- duration: undefined,
+ duration: undefined, // no inherit
durationCallback() {
return this.random(3, 6);
},
@@ -1436,7 +1436,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: { metronome: 1, mustpressure: 1 },
condition: {
inherit: true,
- onSwitchIn() {},
+ onSwitchIn: undefined, // no inherit
onEntryHazard(pokemon) {
if (!pokemon.isGrounded()) return;
if (pokemon.hasType('Poison')) {
@@ -1468,7 +1468,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onFieldResidualOrder: 13,
- onFieldResidualSubOrder: undefined,
+ onFieldResidualSubOrder: undefined, // no inherit
},
},
uproar: {
@@ -1476,7 +1476,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
basePower: 50,
condition: {
inherit: true,
- duration: undefined,
+ duration: undefined, // no inherit
durationCallback() {
return this.random(3, 7);
},
diff --git a/data/mods/gen5/abilities.ts b/data/mods/gen5/abilities.ts
index 32d1a0f1b2..624d6884c0 100644
--- a/data/mods/gen5/abilities.ts
+++ b/data/mods/gen5/abilities.ts
@@ -31,7 +31,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
keeneye: {
inherit: true,
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
},
magicbounce: {
inherit: true,
@@ -68,13 +68,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onImmunity(type, pokemon) {
if (type === 'sandstorm' || type === 'hail') return false;
},
- onTryHit() {},
+ onTryHit: undefined, // no inherit
flags: {},
rating: 0.5,
},
sapsipper: {
inherit: true,
- onAllyTryHitSide() {},
+ onAllyTryHitSide: undefined, // no inherit
},
serenegrace: {
inherit: true,
@@ -89,7 +89,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
soundproof: {
inherit: true,
- onAllyTryHitSide() {},
+ onAllyTryHitSide: undefined, // no inherit
},
rebound: {
inherit: true,
diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts
index 0ab479f34a..bb0f793430 100644
--- a/data/mods/gen5/moves.ts
+++ b/data/mods/gen5/moves.ts
@@ -36,7 +36,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
autotomize: {
inherit: true,
volatileStatus: 'autotomize',
- onHit() {},
+ onHit: undefined, // no inherit
condition: {
noCopy: true, // doesn't get copied by Baton Pass
onStart(pokemon) {
@@ -152,7 +152,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
cottonspore: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
target: "normal",
},
covet: {
@@ -485,7 +485,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
knockoff: {
inherit: true,
basePower: 20,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
},
leafstorm: {
inherit: true,
@@ -565,7 +565,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 20,
condition: {
inherit: true,
- onAccuracy() {},
+ onAccuracy: undefined, // no inherit
},
},
moonlight: {
@@ -578,7 +578,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
mudsport: {
inherit: true,
- pseudoWeather: undefined,
+ pseudoWeather: undefined, // no inherit
volatileStatus: 'mudsport',
condition: {
noCopy: true,
@@ -596,7 +596,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
naturepower: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
onHit(pokemon) {
this.actions.useMove('earthquake', pokemon);
},
@@ -628,7 +628,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
poisonpowder: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
powergem: {
inherit: true,
@@ -780,7 +780,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
sleeppowder: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
smellingsalts: {
inherit: true,
@@ -813,7 +813,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
spore: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
stormthrow: {
inherit: true,
@@ -831,7 +831,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
stunspore: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
substitute: {
inherit: true,
@@ -924,7 +924,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
toxic: {
inherit: true,
- onPrepareHit() {},
+ onPrepareHit: undefined, // no inherit
},
uproar: {
inherit: true,
@@ -952,7 +952,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
watersport: {
inherit: true,
- pseudoWeather: undefined,
+ pseudoWeather: undefined, // no inherit
volatileStatus: 'watersport',
condition: {
noCopy: true,
diff --git a/data/mods/gen6/abilities.ts b/data/mods/gen6/abilities.ts
index 1da8541209..eb65bae007 100644
--- a/data/mods/gen6/abilities.ts
+++ b/data/mods/gen6/abilities.ts
@@ -54,7 +54,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
move.type = 'Normal';
}
},
- onBasePower() {},
+ onBasePower: undefined, // no inherit
rating: -1,
},
parentalbond: {
@@ -93,7 +93,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
const targetForme = (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade');
if (attacker.species.name !== targetForme) attacker.formeChange(targetForme);
},
- onModifyMove() {},
+ onModifyMove: undefined, // no inherit
},
symbiosis: {
inherit: true,
diff --git a/data/mods/gen6/conditions.ts b/data/mods/gen6/conditions.ts
index fedfe5dafa..ee569eb1a0 100644
--- a/data/mods/gen6/conditions.ts
+++ b/data/mods/gen6/conditions.ts
@@ -40,6 +40,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
},
choicelock: {
inherit: true,
- onBeforeMove() {},
+ onBeforeMove: undefined, // no inherit
},
};
diff --git a/data/mods/gen6/items.ts b/data/mods/gen6/items.ts
index ebf483dd32..2fbaa0900d 100644
--- a/data/mods/gen6/items.ts
+++ b/data/mods/gen6/items.ts
@@ -165,7 +165,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
souldew: {
inherit: true,
- onBasePower() {},
+ onBasePower: undefined, // no inherit
onModifySpAPriority: 1,
onModifySpA(spa, pokemon) {
if (pokemon.baseSpecies.num === 380 || pokemon.baseSpecies.num === 381) {
diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts
index 538a35bafc..81483dc239 100644
--- a/data/mods/gen6/moves.ts
+++ b/data/mods/gen6/moves.ts
@@ -14,7 +14,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
darkvoid: {
inherit: true,
accuracy: 80,
- onTry() {},
+ onTry: undefined, // no inherit
},
destinybond: {
inherit: true,
@@ -24,7 +24,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
diamondstorm: {
inherit: true,
- self: null,
+ self: undefined, // no inherit
secondary: {
chance: 50,
self: {
@@ -66,7 +66,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onTryAddVolatile() {},
+ onTryAddVolatile: undefined, // no inherit
},
},
mysticalfire: {
diff --git a/data/mods/gen6megasrevisited/abilities.ts b/data/mods/gen6megasrevisited/abilities.ts
index 037690e30b..8482c1cfc7 100644
--- a/data/mods/gen6megasrevisited/abilities.ts
+++ b/data/mods/gen6megasrevisited/abilities.ts
@@ -33,8 +33,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
inherit: true,
// Ability suppression cancelled in scripts.ts
// new Ability suppression implemented in scripts.ts
- onSwitchIn(pokemon) {},
- onEnd(source) {},
+ onSwitchIn: undefined, // no inherit
+ onEnd: undefined, // no inherit
onStart(pokemon) {
this.add('-ability', pokemon, 'Neutralizing Gas');
},
diff --git a/data/mods/gen7/abilities.ts b/data/mods/gen7/abilities.ts
index 66905bd080..e530405104 100644
--- a/data/mods/gen7/abilities.ts
+++ b/data/mods/gen7/abilities.ts
@@ -34,7 +34,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
innerfocus: {
inherit: true,
rating: 1,
- onTryBoost() {},
+ onTryBoost: undefined, // no inherit
},
moody: {
inherit: true,
@@ -65,19 +65,19 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
oblivious: {
inherit: true,
- onTryBoost() {},
+ onTryBoost: undefined, // no inherit
},
owntempo: {
inherit: true,
- onTryBoost() {},
+ onTryBoost: undefined, // no inherit
},
rattled: {
inherit: true,
- onAfterBoost() {},
+ onAfterBoost: undefined, // no inherit
},
scrappy: {
inherit: true,
- onTryBoost() {},
+ onTryBoost: undefined, // no inherit
},
slowstart: {
inherit: true,
diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts
index 0e5aae3fcc..c19919fa33 100644
--- a/data/mods/gen7/moves.ts
+++ b/data/mods/gen7/moves.ts
@@ -273,7 +273,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
grassknot: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
grasswhistle: {
inherit: true,
@@ -367,11 +367,11 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
heatcrash: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
heavyslam: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
hiddenpower: {
inherit: true,
@@ -536,7 +536,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
lowkick: {
inherit: true,
- onTryHit() {},
+ onTryHit: undefined, // no inherit
},
luckychant: {
inherit: true,
@@ -775,7 +775,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
rapidspin: {
inherit: true,
basePower: 20,
- secondary: null,
+ secondary: undefined, // no inherit
},
razorwind: {
inherit: true,
@@ -1081,6 +1081,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
basePower: 50,
pp: 15,
willCrit: true,
- secondary: null,
+ secondary: undefined, // no inherit
},
};
diff --git a/data/mods/gen8/abilities.ts b/data/mods/gen8/abilities.ts
index 7bb273db16..8ab23d8636 100644
--- a/data/mods/gen8/abilities.ts
+++ b/data/mods/gen8/abilities.ts
@@ -428,8 +428,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
heatproof: {
inherit: true,
- onSourceModifyAtk() {},
- onSourceModifySpA() {},
+ onSourceModifyAtk: undefined, // no inherit
+ onSourceModifySpA: undefined, // no inherit
onSourceBasePowerPriority: 18,
onSourceBasePower(basePower, attacker, defender, move) {
if (move.type === 'Fire') {
@@ -481,8 +481,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
illuminate: {
inherit: true,
- onTryBoost() {},
- onModifyMove() {},
+ onTryBoost: undefined, // no inherit
+ onModifyMove: undefined, // no inherit
flags: {},
rating: 0,
},
diff --git a/data/mods/gen8/moves.ts b/data/mods/gen8/moves.ts
index b7c3100367..bff3979b21 100644
--- a/data/mods/gen8/moves.ts
+++ b/data/mods/gen8/moves.ts
@@ -2,7 +2,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
allyswitch: {
inherit: true,
// Prevents setting the volatile used to check for Ally Switch failure
- onPrepareHit() {},
+ onPrepareHit: undefined, // no inherit
},
anchorshot: {
inherit: true,
diff --git a/data/mods/gen8/pokedex.ts b/data/mods/gen8/pokedex.ts
index 4b0acb59d8..f2c5a8d20a 100644
--- a/data/mods/gen8/pokedex.ts
+++ b/data/mods/gen8/pokedex.ts
@@ -58,8 +58,8 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
vivillonfancy: {
inherit: true,
abilities: { 0: "Shield Dust", 1: "Compound Eyes" },
- prevo: undefined,
- evoLevel: undefined,
+ prevo: undefined, // no inherit
+ evoLevel: undefined, // no inherit
},
vivillonpokeball: {
inherit: true,
diff --git a/data/mods/gen9predlc/abilities.ts b/data/mods/gen9predlc/abilities.ts
index 9cc18a8ce4..1078f9d63c 100644
--- a/data/mods/gen9predlc/abilities.ts
+++ b/data/mods/gen9predlc/abilities.ts
@@ -13,8 +13,8 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
},
illuminate: {
inherit: true,
- onTryBoost() {},
- onModifyMove() {},
+ onTryBoost: undefined, // no inherit
+ onModifyMove: undefined, // no inherit
flags: {},
rating: 0,
},
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index a18e2fc66f..1e281fd515 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -84,7 +84,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.eatItem(true);
},
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -109,7 +108,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', pokemon, 'Shift Gear', pokemon);
this.boost({ spe: 2, atk: 1 });
},
- secondary: null,
target: "self",
type: "Steel",
},
@@ -141,7 +139,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -188,7 +185,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Water",
},
@@ -218,7 +214,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target.addVolatile('healblock', source)) success = true;
return success;
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -299,7 +294,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.boost({ spa: -1, spd: -1 }, source);
}
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -370,7 +364,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Flower Trick', target);
this.add('-anim', source, 'Flower Trick', target);
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -474,7 +467,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
changeSet(this, pokemon, ssbSets['A Quag To The Past'], true);
}
},
- secondary: null,
target: "self",
type: "Ground",
},
@@ -512,7 +504,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
isZ: "lilligantiumz",
- secondary: null,
target: "self",
type: "Grass",
},
@@ -563,7 +554,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
multihit: 5,
multiaccuracy: true,
forceSTAB: true,
- secondary: null,
target: 'normal',
type: "Fire",
},
@@ -614,7 +604,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.heal(source.baseMaxhp / 2, source);
}
},
- secondary: null,
target: "self",
type: "Psychic",
},
@@ -638,7 +627,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Earthquake', target);
},
volatileStatus: 'flinch',
- secondary: null,
target: "normal",
type: "???",
},
@@ -766,7 +754,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spa: 2,
spd: 1,
},
- secondary: null,
target: "self",
type: "Psychic",
},
@@ -999,7 +986,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) this.boost({ atk: 2 }, pokemon, pokemon, move);
},
- secondary: null,
target: "normal",
type: "Bug",
},
@@ -1030,7 +1016,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-item', pokemon, item, '[from] move: what kind');
this.heal(pokemon.baseMaxhp / 4, pokemon);
},
- secondary: null,
target: "self",
type: "Water",
},
@@ -1117,7 +1102,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Dark",
},
@@ -1218,7 +1202,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -1241,7 +1224,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onEffectiveness(typeMod, target, type, move) {
return typeMod + this.dex.getEffectiveness('Fire', type);
},
- secondary: null,
target: "normal",
type: "Water",
},
@@ -1280,7 +1262,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.skipBeforeSwitchOutEventFlag = false;
}
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -1366,7 +1347,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- secondary: null,
target: "self",
type: "Normal",
// bird type crashes during testing (runStatusImmunity for Bird at sim\pokemon.ts:2101:10). no-go.
@@ -1476,7 +1456,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.setStatus(status);
}
},
- secondary: null,
target: "self",
type: "Electric",
},
@@ -1542,7 +1521,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -1578,7 +1556,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const success = !!this.heal(this.modify(source.maxhp, 0.25));
return source.addVolatile('magnetrise', source, move) || success;
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -1665,7 +1642,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onHit(target) {
this.actions.useMove('batonpass', target);
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -1742,7 +1718,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return target.addVolatile('trapped', source, move, 'trapper') || success;
},
zMove: { effect: 'heal' },
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -1769,7 +1744,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'U-turn', target);
},
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Flying",
},
@@ -1980,7 +1954,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
},
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -2021,7 +1994,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
target.addVolatile('hacked');
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -2062,7 +2034,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: 2,
},
// passive recovery implemented in conditions.ts
- secondary: null,
target: "self",
type: "Normal",
},
@@ -2132,7 +2103,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
};
pokemon.moveSlots[teaIndex] = newMoveSlot;
},
- secondary: null,
target: 'self',
type: "Flying",
},
@@ -2151,7 +2121,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.attrLastMove('[anim] Bleakwind Storm');
},
multihit: 5,
- secondary: null,
target: 'normal',
type: "Flying",
},
@@ -2176,7 +2145,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
selfSwitch: true,
recoil: [33, 100],
- secondary: null,
target: 'normal',
type: "Fighting",
},
@@ -2214,7 +2182,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: 'normal',
type: "Grass",
},
@@ -2251,7 +2218,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('taunt', source);
}
},
- secondary: null,
target: 'normal',
type: "Bug",
},
@@ -2323,7 +2289,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spe: 1,
atk: 1,
},
- secondary: null,
target: 'self',
type: "Poison",
},
@@ -2351,7 +2316,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.field.addPseudoWeather('gravity', source);
},
},
- secondary: null,
target: 'normal',
type: "???",
},
@@ -2428,7 +2392,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
self: {
volatileStatus: 'protect',
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -2492,7 +2455,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
duration: 1,
// reviving implemented in side.ts, kind of
},
- secondary: null,
target: "self",
type: "Dark",
},
@@ -2660,7 +2622,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
self: {
sideCondition: 'safeguard',
},
- secondary: null,
multihit: 3,
target: "normal",
type: "Ground",
@@ -2751,7 +2712,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add(`c:|${getName((source.illusion || source).name)}|${msg}`);
},
isZ: "irpatuziniumz",
- secondary: null,
target: "normal",
type: "Fairy",
},
@@ -2769,7 +2729,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.attrLastMove('[anim] High Jump Kick');
},
- secondary: null,
target: "allAdjacent",
type: "Psychic",
},
@@ -2797,7 +2756,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Snowscape', target);
},
weather: 'snowscape',
- secondary: null,
target: "self",
type: "Ice",
},
@@ -2813,7 +2771,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 5,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 2],
- secondary: null,
priority: 0,
onTryMove() {
this.attrLastMove('[still]');
@@ -2848,7 +2805,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onTryMove() {
this.attrLastMove('[still]');
},
- secondary: null,
target: "normal",
type: "Fighting",
},
@@ -2987,7 +2943,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: -1,
spe: -1,
},
- secondary: null,
target: "normal",
type: "Rock",
},
@@ -3099,7 +3054,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-fieldend', 'move: Anfield Atmosphere');
},
},
- secondary: null,
target: "all",
type: "Psychic",
},
@@ -3135,7 +3089,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.forceSwitchFlag = true;
}
},
- secondary: null,
target: "all",
type: "Flying",
},
@@ -3213,7 +3166,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 1,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
onTryMove() {
this.attrLastMove('[still]');
},
@@ -3329,7 +3281,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Clever",
@@ -3380,7 +3331,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', target, 'Rise Above');
},
},
- secondary: null,
target: "self",
type: "Electric",
},
@@ -3404,7 +3354,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
pseudoWeather: 'trickroom',
volatileStatus: 'powertrick',
- secondary: null,
target: "self",
type: "Psychic",
},
@@ -3506,7 +3455,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- secondary: null,
hasSheerForce: true,
onPrepareHit(target, source) {
this.attrLastMove('[still]');
@@ -3545,7 +3493,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-start', source, 'typeadd', 'Fire', '[from] move: Wrath of Frozen Flames');
}
},
- secondary: null,
target: "normal",
type: "Dragon",
},
@@ -3567,7 +3514,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit() {
this.attrLastMove('[anim] Core Enforcer');
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -3593,7 +3539,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
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",
},
@@ -3630,7 +3575,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.forceSwitchFlag = true;
}
},
- secondary: null,
target: "all",
type: "Electric",
},
@@ -3685,7 +3629,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.addVolatile('imprison', source);
source.m.usedPlagiarism = true;
},
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -3719,7 +3662,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spe: 1,
},
},
- secondary: null,
target: "all",
type: "Dragon",
},
@@ -3745,7 +3687,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onEffectiveness(typeMod, target, type) {
if (type === 'Water') return 1;
},
- secondary: null,
target: "normal",
type: "Ice",
},
@@ -3795,7 +3736,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
} // This is easier than implementing each condition manually
this.heal(target.maxhp / 4, target, target, this.effect);
},
- secondary: null,
target: "self",
type: "Grass",
},
@@ -3889,7 +3829,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Ice",
},
@@ -3960,7 +3899,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "all",
type: "Steel",
},
@@ -4024,7 +3962,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('taunt', source, move);
}
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -4159,7 +4096,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-message', `${pokemon.name} gained 10 levels!`);
},
isZ: "pearyumz",
- secondary: null,
target: "self",
type: "Steel",
},
@@ -4565,7 +4501,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success || !!this.canSwitch(source.side);
},
selfSwitch: true,
- secondary: null,
target: "self",
type: "Normal",
},
@@ -4604,7 +4539,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
isZ: "rainiumz",
- secondary: null,
target: "self",
type: "Water",
},
@@ -4627,7 +4561,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Photon Geyser', target);
},
- secondary: null,
target: "normal",
type: "Psychic",
},
@@ -4721,7 +4654,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Dragon Dance', source);
this.add('-anim', source, 'Lock-On', source);
},
- secondary: null,
target: "self",
type: "Fire",
},
@@ -4811,7 +4743,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const success = !!this.heal(this.modify(pokemon.maxhp, 0.5));
return pokemon.cureStatus() || success;
},
- secondary: null,
target: "self",
type: "Water",
},
@@ -4944,7 +4875,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(icebeam, target);
return null;
},
- secondary: null,
target: "self",
type: "Electric",
},
@@ -4989,7 +4919,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('leechseed', source);
}
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -5022,7 +4951,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -5143,7 +5071,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (target?.positiveBoosts()) return priority + 1;
return priority;
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -5167,7 +5094,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Burn Up', target);
},
- secondary: null,
target: "normal",
type: "Fire",
},
@@ -5242,7 +5168,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
def: 1,
spd: 1,
},
- secondary: null,
target: "self",
type: "Fire",
},
@@ -5289,7 +5214,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pokemon.removeVolatile('phantomweapon');
},
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -5314,7 +5238,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Nasty Plot', source);
this.add('-anim', source, 'Head Smash', target);
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -5340,7 +5263,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onPrepareHit(target, source) {
this.add('-anim', source, 'Aura Sphere', source);
},
- secondary: null,
target: "normal",
type: "Fighting",
},
@@ -5366,7 +5288,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
multihit: 10,
multiaccuracy: true,
- secondary: null,
target: "normal",
type: "Poison",
},
@@ -5395,7 +5316,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target?.faint(source);
},
ignoreImmunity: true,
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -5441,7 +5361,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'Focus Energy', target);
this.add('-anim', source, 'Agility', target);
},
- secondary: null,
target: "self",
type: "Psychic",
},
@@ -5501,7 +5420,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
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",
},
@@ -5566,7 +5484,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -5595,7 +5512,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
target.addVolatile('attract', source);
target.addVolatile('confusion', source);
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -5631,7 +5547,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Psychic",
},
@@ -5667,7 +5582,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-end', pokemon, 'Symphonie du Ze\u0301ro');
},
},
- secondary: null,
target: "normal",
type: "Fairy",
},
@@ -5744,7 +5658,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-anim', source, 'U-Turn', target);
},
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Flying",
},
@@ -5782,7 +5695,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.boost({ atk: boost }, pokemon, pokemon, move);
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -5831,7 +5743,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return success;
},
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Flying",
},
@@ -5874,7 +5785,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('detailschange', pokemon, details);
}
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -5890,7 +5800,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: { sound: 1, failcopycat: 1 },
- secondary: null,
onTryMove() {
this.attrLastMove('[still]');
},
@@ -5933,7 +5842,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
pp: 10,
priority: 0,
flags: {},
- secondary: null,
selfSwitch: true,
onTryMove() {
this.attrLastMove('[still]');
@@ -6010,7 +5918,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- secondary: null,
target: "normal",
type: "Flying",
},
@@ -6027,7 +5934,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "allAdjacent",
type: "Water",
onTryMove() {
@@ -6087,7 +5993,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return this.chainModify(1.5);
},
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -6117,7 +6022,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return this.chainModify(1.75);
}
},
- secondary: null,
target: "normal",
type: "Fire",
},
@@ -6135,7 +6039,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
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",
},
@@ -6170,7 +6073,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -6200,7 +6102,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
this.add(`c:|${getName((source.illusion || source).name)}|A blank canvas.`);
},
- secondary: null,
target: "normal",
type: "Ice",
},
@@ -6234,7 +6135,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
},
selfSwitch: true,
- secondary: null,
target: "self",
type: "Dark",
},
@@ -6298,7 +6198,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
didSomething = pokemon.addVolatile('aquaring') || didSomething;
return didSomething;
},
- secondary: null,
target: "self",
type: "Water",
},
@@ -6330,7 +6229,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
target.trySetStatus('par', source, move);
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -6370,7 +6268,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
ignoreNegativeOffensive: true,
breaksProtect: true,
ignoreAccuracy: true,
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -6409,7 +6306,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
spd: 1,
},
},
- secondary: null,
target: "self",
type: "Fire",
},
@@ -6426,7 +6322,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
overrideOffensivePokemon: 'target',
- secondary: null,
target: "normal",
type: "Dark",
onTryMove() {
@@ -7062,7 +6957,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.actions.useMove(randomMove, target);
},
multihit: [2, 5],
- secondary: null,
target: "self",
type: "???",
},
diff --git a/data/moves.ts b/data/moves.ts
index 1c23fa5522..e4eea5f69c 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -13,7 +13,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: {},
isZ: "pikashuniumz",
critRatio: 3,
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -28,7 +27,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Clever",
@@ -42,7 +40,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Cool",
@@ -78,7 +75,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 2,
},
- secondary: null,
target: "self",
type: "Poison",
zMove: { effect: 'clearnegativeboost' },
@@ -95,7 +91,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "poisoniumz",
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Cool",
@@ -135,7 +130,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -166,7 +160,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "adjacentAllyOrSelf",
type: "Normal",
zMove: { effect: 'crit2' },
@@ -181,7 +174,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1, slicing: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -196,7 +188,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1 },
critRatio: 2,
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -220,7 +211,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -238,7 +228,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: 2,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -254,7 +243,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, slicing: 1, wind: 1 },
critRatio: 2,
- secondary: null,
target: "allAdjacentFoes",
type: "Flying",
contestType: "Cool",
@@ -287,7 +275,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "fightiniumz",
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -364,7 +351,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.effectState.duration = 2;
},
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { spe: 2 } },
@@ -382,7 +368,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spd: 2,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -461,7 +446,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -475,7 +459,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -499,7 +482,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.heal(pokemon.baseMaxhp / 16);
},
},
- secondary: null,
target: "self",
type: "Water",
zMove: { boost: { def: 1 } },
@@ -535,7 +517,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -555,7 +536,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: -1,
},
},
- secondary: null,
target: "normal",
type: "Fire",
},
@@ -569,7 +549,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -621,7 +600,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spd: 1,
},
- secondary: null,
target: "adjacentAlly",
type: "Fairy",
zMove: { boost: { spd: 2 } },
@@ -658,7 +636,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.actions.useMove(randomMove, target);
},
callsMove: true,
- secondary: null,
target: "self",
type: "Normal",
contestType: "Cute",
@@ -679,7 +656,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -710,7 +686,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Ghost",
},
@@ -724,7 +699,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Clever",
@@ -780,7 +754,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryImmunity(target, source) {
return (target.gender === 'M' && source.gender === 'F') || (target.gender === 'F' && source.gender === 'M');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -795,7 +768,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, bullet: 1, pulse: 1 },
- secondary: null,
target: "any",
type: "Fighting",
contestType: "Beautiful",
@@ -898,7 +870,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'move: Aurora Veil');
},
},
- secondary: null,
target: "allySide",
type: "Ice",
zMove: { boost: { spe: 1 } },
@@ -929,7 +900,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', pokemon, 'Autotomize');
}
},
- secondary: null,
target: "self",
type: "Steel",
zMove: { effect: 'clearnegativeboost' },
@@ -954,7 +924,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: -4,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Beautiful",
@@ -991,7 +960,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: -1,
},
- secondary: null,
target: "normal",
type: "Fairy",
zMove: { boost: { def: 1 } },
@@ -1010,7 +978,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
sideCondition: 'reflect',
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -1067,7 +1034,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -1105,7 +1071,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -1123,7 +1088,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 2,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -1151,7 +1115,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
},
selfSwitch: 'copyvolatile',
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -1184,7 +1147,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onAfterMove(pokemon) {
pokemon.removeVolatile('beakblast');
},
- secondary: null,
target: "normal",
type: "Flying",
contestType: "Tough",
@@ -1208,7 +1170,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.allies = pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status);
move.multihit = move.allies.length;
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -1222,7 +1183,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, failcopycat: 1, failmimic: 1 },
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -1235,7 +1195,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, failcopycat: 1, failmimic: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -1251,7 +1210,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onDisableMove(pokemon) {
if (!pokemon.ateBerry) pokemon.disableMove('belch');
},
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Tough",
@@ -1272,7 +1230,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.directDamage(target.maxhp / 2);
this.boost({ atk: 12 }, target);
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'heal' },
@@ -1300,7 +1257,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.add('-item', target, myItem.name, '[from] move: Bestow', `[of] ${source}`);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 2 } },
@@ -1375,7 +1331,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', pokemon, 'move: Bide', '[silent]');
},
},
- secondary: null,
target: "self",
type: "Normal",
contestType: "Tough",
@@ -1390,7 +1345,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -1422,7 +1376,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1, slicing: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Fire",
},
@@ -1455,7 +1408,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "darkiniumz",
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Cool",
@@ -1472,7 +1424,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -1570,7 +1521,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -1585,7 +1535,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, cantusetwice: 1 },
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -1600,7 +1549,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "grassiumz",
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -1632,7 +1580,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
overrideOffensiveStat: 'def',
- secondary: null,
target: "normal",
type: "Fighting",
},
@@ -1671,7 +1618,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Electric",
},
@@ -1721,7 +1667,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Ground",
maxMove: { basePower: 130 },
@@ -1737,7 +1682,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Ground",
zMove: { basePower: 140 },
@@ -1753,7 +1697,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
- secondary: null,
target: "allAdjacent",
type: "Normal",
contestType: "Tough",
@@ -1814,7 +1757,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Water",
contestType: "Clever",
@@ -1828,7 +1770,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 40,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -1842,7 +1783,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1 },
recoil: [33, 100],
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -1876,7 +1816,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "normaliumz",
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -1896,7 +1835,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.side.removeSideCondition('lightscreen');
pokemon.side.removeSideCondition('auroraveil');
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -1915,7 +1853,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Water",
contestType: "Tough",
@@ -1929,7 +1866,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "allAdjacent",
type: "Dark",
contestType: "Tough",
@@ -1993,7 +1929,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (item.onEat) source.ateBerry = true;
}
},
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
@@ -2030,7 +1965,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 1,
def: 1,
},
- secondary: null,
target: "self",
type: "Fighting",
zMove: { boost: { atk: 1 } },
@@ -2064,7 +1998,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Tough",
@@ -2079,7 +2012,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Grass",
zMove: { basePower: 140 },
@@ -2138,7 +2070,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Fire",
},
@@ -2185,7 +2116,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', pokemon, 'typechange', pokemon.getTypes().join('/'), '[from] move: Burn Up');
},
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Clever",
@@ -2221,7 +2151,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: 1,
spd: 1,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -2252,7 +2181,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (target.getTypes().join() === newType || !target.setType(newType)) return false;
this.add('-start', target, 'typechange', newType);
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { evasion: 1 } },
@@ -2274,7 +2202,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: -2,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
zMove: { boost: { spd: 2 } },
@@ -2291,7 +2218,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1 },
isZ: "pikaniumz",
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -2335,7 +2261,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHit(target, source) {
this.add('-activate', target, 'move: Celebrate');
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -2390,7 +2315,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spd: 1,
},
- secondary: null,
target: "self",
type: "Electric",
zMove: { boost: { spd: 1 } },
@@ -2429,7 +2353,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: -2,
},
- secondary: null,
target: "normal",
type: "Fairy",
zMove: { boost: { def: 1 } },
@@ -2489,7 +2412,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
weather: 'snowscape',
selfSwitch: true,
- secondary: null,
condition: {
duration: 1,
onBeforeMovePriority: 100,
@@ -2513,7 +2435,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
ignoreDefensive: true,
ignoreEvasion: true,
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -2528,7 +2449,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
// Recoil implemented in battle-actions.ts
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -2557,7 +2477,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Water",
contestType: "Tough",
@@ -2576,7 +2495,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: -1,
},
},
- secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
contestType: "Tough",
@@ -2607,7 +2525,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: 1,
spe: 1,
},
- secondary: null,
target: "self",
type: "Dragon",
},
@@ -2651,7 +2568,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
target.clearBoosts();
this.add('-clearboost', target);
},
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Beautiful",
@@ -2671,7 +2587,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: -1,
},
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -2685,7 +2600,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { bypasssub: 1, allyanim: 1, metronome: 1 },
- secondary: null,
boosts: {
atk: 1,
def: 1,
@@ -2707,7 +2621,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: 1,
accuracy: 1,
},
- secondary: null,
target: "self",
type: "Poison",
zMove: { effect: 'clearnegativeboost' },
@@ -2729,7 +2642,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify([5461, 4096]);
}
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -2765,7 +2677,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
maxMove: { basePower: 100 },
@@ -2797,7 +2708,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
targetRelayVar.target = this.getAtSlot(lastDamagedBy.slot);
}
},
- secondary: null,
target: "scripted",
type: "Dark",
contestType: "Cool",
@@ -2814,7 +2724,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -2830,7 +2739,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
volatileStatus: 'confusion',
- secondary: null,
target: "normal",
type: "Ghost",
zMove: { boost: { spa: 1 } },
@@ -2884,7 +2792,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "rockiumz",
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Cool",
@@ -2903,7 +2810,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (target.hasType(type) || !target.setType(type)) return false;
this.add('-start', target, 'typechange', type);
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -2939,7 +2845,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!source.setType(randomType)) return false;
this.add('-start', source, 'typechange', randomType);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'heal' },
@@ -2965,7 +2870,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.actions.useMove(move.id, pokemon);
},
callsMove: true,
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { accuracy: 1 } },
@@ -2991,7 +2895,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (target.newlySwitched || this.queue.willMove(target)) return;
target.addVolatile('gastroacid');
},
- secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
zMove: { basePower: 140 },
@@ -3008,7 +2911,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "steeliumz",
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -3031,7 +2933,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fail', target, 'move: Corrosive Gas');
}
},
- secondary: null,
target: "allAdjacent",
type: "Poison",
},
@@ -3048,7 +2949,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: 1,
spd: 1,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { spd: 1 } },
@@ -3066,7 +2966,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 3,
},
- secondary: null,
target: "self",
type: "Grass",
zMove: { effect: 'clearnegativeboost' },
@@ -3084,7 +2983,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: -2,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Grass",
zMove: { effect: 'clearnegativeboost' },
@@ -3130,7 +3028,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "scripted",
type: "Fighting",
maxMove: { basePower: 75 },
@@ -3200,7 +3097,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-swapsideconditions');
this.add('-activate', source, 'move: Court Change');
},
- secondary: null,
target: "all",
type: "Normal",
},
@@ -3230,7 +3126,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.add('-item', source, yourItem, '[from] move: Covet', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -3245,7 +3140,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Water",
contestType: "Tough",
@@ -3276,7 +3170,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "allySide",
type: "Fairy",
zMove: { boost: { spd: 1 } },
@@ -3292,7 +3185,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -3369,7 +3261,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 190 },
@@ -3414,7 +3305,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(pokemon.baseMaxhp / 4);
},
},
- secondary: null,
target: "normal",
nonGhostTarget: "self",
type: "Ghost",
@@ -3431,7 +3321,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -3447,7 +3336,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
ignoreEvasion: true,
ignoreDefensive: true,
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Cool",
@@ -3487,7 +3375,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.hint("Only a Pokemon whose form is Darkrai can use this move.");
return null;
},
- secondary: null,
target: "allAdjacentFoes",
type: "Dark",
zMove: { effect: 'clearnegativeboost' },
@@ -3502,7 +3389,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Fairy",
contestType: "Beautiful",
@@ -3516,7 +3402,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { allyanim: 1 },
- secondary: null,
boosts: {
atk: 2,
spa: 2,
@@ -3537,7 +3422,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: 1,
spd: 1,
},
- secondary: null,
target: "self",
type: "Bug",
zMove: { boost: { def: 1 } },
@@ -3560,7 +3444,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
noCopy: true,
onRestart: () => null,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { accuracy: 1 } },
@@ -3596,7 +3479,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.field.clearTerrain();
return success;
},
- secondary: null,
target: "normal",
type: "Flying",
zMove: { boost: { accuracy: 1 } },
@@ -3641,7 +3523,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('destinybond');
},
},
- secondary: null,
target: "self",
type: "Ghost",
zMove: { effect: 'redirect' },
@@ -3664,7 +3545,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(pokemon) {
pokemon.addVolatile('stall');
},
- secondary: null,
target: "self",
type: "Fighting",
zMove: { boost: { evasion: 1 } },
@@ -3681,7 +3561,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "dragoniumz",
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Cool",
@@ -3748,7 +3627,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Tough",
@@ -3842,7 +3720,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -3857,7 +3734,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Fairy",
contestType: "Cute",
@@ -3923,7 +3799,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -3976,7 +3851,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
}
},
- secondary: null,
target: "adjacentFoe",
type: "Normal",
},
@@ -4009,7 +3883,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', source, 'Doom Desire');
return this.NOT_FAIL;
},
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Beautiful",
@@ -4024,7 +3897,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [33, 100],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -4039,7 +3911,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 140 },
@@ -4077,7 +3948,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Fighting",
maxMove: { basePower: 80 },
@@ -4104,7 +3974,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', pokemon, 'typechange', pokemon.getTypes().join('/'), '[from] move: Double Shock');
},
},
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Clever",
@@ -4120,7 +3989,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -4137,7 +4005,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
evasion: 1,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -4157,7 +4024,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Beautiful",
@@ -4226,7 +4092,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return critRatio + (this.effectState.hasDragonType ? 2 : 1);
},
},
- secondary: null,
target: "adjacentAlly",
type: "Dragon",
},
@@ -4239,7 +4104,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Cool",
@@ -4257,7 +4121,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 1,
spe: 1,
},
- secondary: null,
target: "self",
type: "Dragon",
zMove: { effect: 'clearnegativeboost' },
@@ -4274,7 +4137,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { protect: 1, mirror: 1, metronome: 1, noparentalbond: 1 },
multihit: 2,
smartTarget: true,
- secondary: null,
target: "normal",
type: "Dragon",
maxMove: { basePower: 130 },
@@ -4293,7 +4155,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
},
@@ -4306,7 +4167,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Tough",
@@ -4320,7 +4180,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1 },
- secondary: null,
target: "any",
type: "Dragon",
contestType: "Beautiful",
@@ -4336,7 +4195,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Cool",
@@ -4382,7 +4240,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [3, 4],
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Cute",
@@ -4397,7 +4254,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -4415,7 +4271,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryImmunity(target) {
return target.status === 'slp' || target.hasAbility('comatose');
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -4429,7 +4284,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -4444,7 +4298,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Tough",
@@ -4478,7 +4331,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Dragon",
maxMove: { basePower: 130 },
@@ -4494,7 +4346,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Flying",
maxMove: { basePower: 130 },
@@ -4508,7 +4359,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, failencore: 1, nosleeptalk: 1, failcopycat: 1, failmimic: 1, failinstruct: 1, noparentalbond: 1 },
- secondary: null,
target: "normal",
type: "Dragon",
},
@@ -4557,7 +4407,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
- secondary: null,
target: "allAdjacent",
type: "Ground",
contestType: "Tough",
@@ -4596,7 +4445,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -4613,7 +4461,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: -2,
},
- secondary: null,
target: "normal",
type: "Electric",
zMove: { boost: { spd: 1 } },
@@ -4654,7 +4501,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -4713,7 +4559,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Electric Terrain');
},
},
- secondary: null,
target: "all",
type: "Electric",
zMove: { boost: { spe: 1 } },
@@ -4746,7 +4591,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Electric",
zMove: { boost: { spa: 1 } },
@@ -4768,7 +4612,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Electric",
zMove: { basePower: 160 },
@@ -4791,7 +4634,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify([5461, 4096]);
}
},
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -4822,7 +4664,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- secondary: null,
hasSheerForce: true,
target: "normal",
type: "Electric",
@@ -4869,7 +4710,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', pokemon, 'Embargo');
},
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { spa: 1 } },
@@ -4947,7 +4787,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -4968,7 +4807,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryImmunity(target, pokemon) {
return pokemon.hp < target.hp;
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -5005,7 +4843,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -5054,7 +4891,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!oldAbility) return oldAbility as false | null;
if (!target.isAlly(source)) target.volatileStaleness = 'external';
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -5074,7 +4910,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Fire",
contestType: "Beautiful",
@@ -5113,7 +4948,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Dragon",
},
@@ -5137,7 +4971,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.target = 'allAdjacentFoes';
}
},
- secondary: null,
target: "normal",
type: "Psychic",
},
@@ -5151,7 +4984,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, noparentalbond: 1 },
selfdestruct: "always",
- secondary: null,
target: "allAdjacent",
type: "Normal",
contestType: "Beautiful",
@@ -5191,7 +5023,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: 2,
spe: 2,
},
- secondary: null,
target: "self",
type: "Normal",
contestType: "Beautiful",
@@ -5205,7 +5036,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 2,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -5224,7 +5054,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -5248,7 +5077,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.tryTrap();
},
},
- secondary: null,
target: "all",
type: "Fairy",
zMove: { boost: { def: 1 } },
@@ -5263,7 +5091,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 },
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Beautiful",
@@ -5303,7 +5130,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spd: -2,
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { spa: 1 } },
@@ -5318,7 +5144,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -5335,7 +5160,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -5352,7 +5176,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: -2,
},
- secondary: null,
target: "normal",
type: "Flying",
zMove: { boost: { def: 1 } },
@@ -5369,7 +5192,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { mirror: 1, noassist: 1, failcopycat: 1 },
breaksProtect: true,
// Breaking protection implemented in scripts.js
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Clever",
@@ -5384,7 +5206,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -5401,7 +5222,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onAfterMoveSecondarySelf(pokemon, target, move) {
if (!target || target.fainted || target.hp <= 0) this.boost({ atk: 3 }, pokemon, pokemon, move);
},
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cool",
@@ -5422,7 +5242,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Dragon",
},
@@ -5487,7 +5306,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: 2,
spe: 2,
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -5506,7 +5324,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, metronome: 1, noparentalbond: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
zMove: { basePower: 180 },
@@ -5629,7 +5446,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', targetSide, 'Fire Pledge');
},
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -5661,7 +5477,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -5681,7 +5496,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
@@ -5704,7 +5518,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bite: 1 },
- secondary: null,
target: "normal",
type: "Water",
},
@@ -5718,7 +5531,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
ohko: true,
- secondary: null,
target: "normal",
type: "Ground",
zMove: { basePower: 180 },
@@ -5753,7 +5565,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -5780,7 +5591,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(ally.baseMaxhp / 16, ally, source, this.dex.conditions.get('Flame Burst'));
}
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -5871,7 +5681,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
accuracy: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { evasion: 1 } },
@@ -5909,7 +5718,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: 1,
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { spd: 1 } },
@@ -5929,7 +5737,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Beautiful",
@@ -5984,7 +5791,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('fling');
},
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Cute",
@@ -5999,7 +5805,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Water",
},
@@ -6046,7 +5851,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "normal",
type: "Fairy",
zMove: { effect: 'clearnegativeboost' },
@@ -6080,7 +5884,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "all",
type: "Fairy",
zMove: { boost: { def: 1 } },
@@ -6096,7 +5899,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
willCrit: true,
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -6137,7 +5939,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "any",
type: "Flying",
contestType: "Clever",
@@ -6154,7 +5955,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return typeMod + this.dex.getEffectiveness('Flying', type);
},
priority: 0,
- secondary: null,
target: "any",
type: "Fighting",
zMove: { basePower: 170 },
@@ -6204,7 +6004,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return critRatio + 2;
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { accuracy: 1 } },
@@ -6244,7 +6043,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (status.id === 'flinch') return null;
},
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -6280,7 +6078,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -6331,7 +6128,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'crit2' },
@@ -6351,7 +6147,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!target.addType('Grass')) return false;
this.add('-start', target, 'typeadd', 'Grass', '[from] move: Forest\'s Curse');
},
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -6367,7 +6162,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
overrideOffensivePokemon: 'target',
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -6452,7 +6246,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.clearBoosts();
}
},
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Clever",
@@ -6469,7 +6262,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -6484,7 +6276,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
willCrit: true,
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Beautiful",
@@ -6502,7 +6293,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -6519,7 +6309,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -6553,7 +6342,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.effectState.duration = 2;
},
},
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cool",
@@ -6568,7 +6356,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
maxMove: { basePower: 100 },
@@ -6589,7 +6376,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -6609,7 +6395,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -6645,7 +6430,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', source, 'move: Future Sight');
return this.NOT_FAIL;
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -6680,7 +6464,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (pokemon.getAbility().flags['cantsuppress']) pokemon.removeVolatile('gastroacid');
},
},
- secondary: null,
target: "normal",
type: "Poison",
zMove: { boost: { spe: 1 } },
@@ -6697,7 +6480,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Steel",
zMove: { basePower: 180 },
@@ -6726,7 +6508,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return didSomething;
},
- secondary: null,
target: "allySide",
type: "Steel",
zMove: { boost: { spa: 1 } },
@@ -6781,7 +6562,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: 2,
spe: 2,
},
- secondary: null,
target: "self",
type: "Fairy",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -6797,7 +6577,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Clever",
@@ -6814,7 +6593,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -6828,7 +6606,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, cantusetwice: 1 },
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -6843,7 +6620,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "electriumz",
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -6857,7 +6633,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Ice",
},
@@ -6909,7 +6684,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('glaiverush');
},
},
- secondary: null,
target: "normal",
type: "Dragon",
},
@@ -6923,7 +6697,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'par',
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -6942,7 +6715,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
sideCondition: 'lightscreen',
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -7010,7 +6782,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', targetSide, 'G-Max Cannonade');
},
},
- secondary: null,
target: "adjacentFoe",
type: "Water",
contestType: "Cool",
@@ -7033,7 +6804,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Fire",
contestType: "Cool",
@@ -7075,7 +6845,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return critRatio + this.effectState.layers;
},
},
- secondary: null,
target: "adjacentFoe",
type: "Fighting",
contestType: "Cool",
@@ -7098,7 +6867,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Normal",
contestType: "Cool",
@@ -7130,7 +6898,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Dragon",
contestType: "Cool",
@@ -7147,7 +6914,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: {},
isMax: "Rillaboom",
ignoreAbility: true,
- secondary: null,
target: "adjacentFoe",
type: "Grass",
contestType: "Cool",
@@ -7170,7 +6936,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Fairy",
contestType: "Cool",
@@ -7187,7 +6952,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: {},
isMax: "Cinderace",
ignoreAbility: true,
- secondary: null,
target: "adjacentFoe",
type: "Fire",
contestType: "Cool",
@@ -7210,7 +6974,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Water",
contestType: "Cool",
@@ -7233,7 +6996,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Normal",
contestType: "Cool",
@@ -7268,7 +7030,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: {},
isMax: "Inteleon",
ignoreAbility: true,
- secondary: null,
target: "adjacentFoe",
type: "Water",
contestType: "Cool",
@@ -7313,7 +7074,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Steel",
contestType: "Cool",
@@ -7329,7 +7089,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isMax: "Urshifu",
- secondary: null,
target: "adjacentFoe",
type: "Dark",
contestType: "Cool",
@@ -7345,7 +7104,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isMax: "Urshifu-Rapid-Strike",
- secondary: null,
target: "adjacentFoe",
type: "Water",
contestType: "Cool",
@@ -7376,7 +7134,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Normal",
contestType: "Cool",
@@ -7395,7 +7152,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
sideCondition: 'auroraveil',
},
- secondary: null,
target: "adjacentFoe",
type: "Ice",
contestType: "Cool",
@@ -7418,7 +7174,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Ground",
contestType: "Cool",
@@ -7441,7 +7196,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Fairy",
contestType: "Cool",
@@ -7467,7 +7221,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (this.randomChance(1, 2)) return;
target.addVolatile('yawn');
},
- secondary: null,
target: "adjacentFoe",
type: "Dark",
contestType: "Cool",
@@ -7506,7 +7259,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
},
},
- secondary: null,
target: "adjacentFoe",
type: "Steel",
contestType: "Cool",
@@ -7529,7 +7281,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Water",
contestType: "Cool",
@@ -7557,7 +7308,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Electric",
contestType: "Cool",
@@ -7580,7 +7330,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Grass",
contestType: "Cool",
@@ -7603,7 +7352,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Grass",
contestType: "Cool",
@@ -7626,7 +7374,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Ghost",
contestType: "Cool",
@@ -7665,7 +7412,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', targetSide, 'G-Max Vine Lash');
},
},
- secondary: null,
target: "adjacentFoe",
type: "Grass",
contestType: "Cool",
@@ -7704,7 +7450,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', targetSide, 'G-Max Volcalith');
},
},
- secondary: null,
target: "adjacentFoe",
type: "Rock",
contestType: "Cool",
@@ -7727,7 +7472,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "adjacentFoe",
type: "Electric",
contestType: "Cool",
@@ -7766,7 +7510,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', targetSide, 'G-Max Wildfire');
},
},
- secondary: null,
target: "adjacentFoe",
type: "Fire",
contestType: "Cool",
@@ -7804,7 +7547,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return success;
},
},
- secondary: null,
target: "adjacentFoe",
type: "Flying",
contestType: "Cool",
@@ -7844,7 +7586,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
}
},
- secondary: null,
target: "normal",
type: "Grass",
zMove: { basePower: 160 },
@@ -7908,7 +7649,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(0.25);
},
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Beautiful",
@@ -7924,7 +7664,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { spe: 1 } },
@@ -7944,7 +7683,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return priority + 1;
}
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -8002,7 +7740,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Grassy Terrain');
},
},
- secondary: null,
target: "all",
type: "Grass",
zMove: { boost: { def: 1 } },
@@ -8115,7 +7852,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Gravity');
},
},
- secondary: null,
target: "all",
type: "Psychic",
zMove: { boost: { spa: 1 } },
@@ -8133,7 +7869,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: -1,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -8155,7 +7890,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 1,
spa: 1,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { spa: 1 } },
@@ -8196,7 +7930,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('grudge');
},
},
- secondary: null,
target: "self",
type: "Ghost",
zMove: { effect: 'redirect' },
@@ -8224,7 +7957,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "tapuniumz",
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Tough",
@@ -8247,7 +7979,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.storedStats.spd = newspd;
this.add('-activate', source, 'move: Guard Split', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -8277,7 +8008,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-swapboost', source, target, 'def, spd', '[from] move: Guard Swap');
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -8293,7 +8023,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
ohko: true,
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 180 },
@@ -8326,7 +8055,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, wind: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Clever",
@@ -8347,7 +8075,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Steel",
zMove: { basePower: 160 },
@@ -8365,7 +8092,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { metronome: 1 },
weather: 'hail',
- secondary: null,
target: "all",
type: "Ice",
zMove: { boost: { spe: 1 } },
@@ -8385,7 +8111,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spe: -1,
},
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -8402,7 +8127,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHit(target, source) {
this.add('-activate', target, 'move: Happy Hour');
},
- secondary: null,
target: "allySide",
type: "Normal",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -8420,7 +8144,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 1,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -8442,7 +8165,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -8461,7 +8183,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.clearBoosts();
}
},
- secondary: null,
target: "all",
type: "Ice",
zMove: { effect: 'heal' },
@@ -8495,7 +8216,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 4],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -8515,7 +8235,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: -1,
},
},
- secondary: null,
target: "normal",
type: "Ground",
},
@@ -8529,7 +8248,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 2],
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -8637,7 +8355,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "allAdjacentFoes",
type: "Psychic",
zMove: { boost: { spa: 2 } },
@@ -8674,7 +8391,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Psychic",
contestType: "Beautiful",
@@ -8690,7 +8406,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, metronome: 1 },
heal: [1, 2],
- secondary: null,
target: "self",
type: "Bug",
zMove: { effect: 'clearnegativeboost' },
@@ -8721,7 +8436,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "any",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -8769,7 +8483,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-swapboost', source, target, '[from] move: Heart Swap');
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { effect: 'crit2' },
@@ -8809,7 +8522,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
}
},
- secondary: null,
target: "normal",
type: "Fire",
zMove: { basePower: 160 },
@@ -8867,7 +8579,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
}
},
- secondary: null,
target: "normal",
type: "Steel",
zMove: { basePower: 160 },
@@ -8903,7 +8614,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(this.effectState.multiplier);
},
},
- secondary: null,
target: "adjacentAlly",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -8925,7 +8635,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
zMove: { basePower: 160 },
@@ -8944,7 +8653,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onModifyType(move, pokemon) {
move.type = pokemon.hpType || 'Dark';
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Clever",
@@ -8960,7 +8668,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Clever",
@@ -8976,7 +8683,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -8992,7 +8698,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Clever",
@@ -9008,7 +8713,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Clever",
@@ -9024,7 +8728,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Clever",
@@ -9040,7 +8743,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Clever",
@@ -9056,7 +8758,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Flying",
contestType: "Clever",
@@ -9072,7 +8773,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -9088,7 +8788,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Clever",
@@ -9104,7 +8803,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Clever",
@@ -9120,7 +8818,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Clever",
@@ -9136,7 +8833,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Clever",
@@ -9152,7 +8848,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -9168,7 +8863,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Clever",
@@ -9184,7 +8878,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Clever",
@@ -9200,7 +8893,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Clever",
@@ -9214,7 +8906,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Tough",
@@ -9232,7 +8923,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('High Jump Kick'));
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -9251,7 +8941,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onDamage(damage, target, source, effect) {
if (damage >= target.hp) return target.hp - 1;
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -9266,7 +8955,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 40,
priority: 0,
flags: { bypasssub: 1, nosleeptalk: 1, noassist: 1, failcopycat: 1, failmimic: 1, failinstruct: 1 },
- secondary: null,
target: "adjacentAlly",
type: "Normal",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -9285,7 +8973,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 1,
accuracy: 1,
},
- secondary: null,
target: "self",
type: "Dark",
zMove: { boost: { atk: 1 } },
@@ -9300,7 +8987,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 25,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -9315,7 +9001,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
ohko: true,
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 180 },
@@ -9332,7 +9017,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -9349,7 +9033,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: 1,
},
- secondary: null,
target: "allies",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -9396,7 +9079,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -9410,7 +9092,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -9426,7 +9107,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { protect: 1, mirror: 1, defrost: 1, metronome: 1 },
// Damage boost in Sun applied in conditions.ts
thawsTarget: true,
- secondary: null,
target: "normal",
type: "Water",
},
@@ -9441,7 +9121,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "wateriumz",
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -9458,7 +9137,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -9472,7 +9150,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Clever",
@@ -9524,7 +9201,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: -1,
},
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Tough",
@@ -9539,7 +9215,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { mirror: 1, bypasssub: 1 },
breaksProtect: true,
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -9553,7 +9228,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
contestType: "Cool",
@@ -9568,7 +9242,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -9637,7 +9310,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Beautiful",
@@ -9723,7 +9395,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spe: -1,
},
},
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Tough",
@@ -9754,7 +9425,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Beautiful",
@@ -9778,7 +9448,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.field.clearTerrain();
}
},
- secondary: null,
target: "normal",
type: "Ice",
},
@@ -9809,7 +9478,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Ice",
zMove: { basePower: 140 },
@@ -9865,7 +9533,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { spd: 2 } },
@@ -9886,7 +9553,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-enditem', pokemon, item.name, '[from] move: Incinerate');
}
},
- secondary: null,
target: "allAdjacentFoes",
type: "Fire",
contestType: "Tough",
@@ -9939,7 +9605,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "firiumz",
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Cool",
@@ -9954,7 +9619,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
@@ -9986,7 +9650,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
},
- secondary: null,
target: "self",
type: "Grass",
zMove: { boost: { spd: 1 } },
@@ -10021,7 +9684,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
targetLoc: target.lastMoveTargetLoc!,
})[0] as MoveAction);
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spa: 1 } },
@@ -10052,7 +9714,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "all",
type: "Electric",
zMove: { boost: { spa: 1 } },
@@ -10070,7 +9731,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 2,
},
- secondary: null,
target: "self",
type: "Steel",
zMove: { effect: 'clearnegativeboost' },
@@ -10140,7 +9800,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
break;
}
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -10157,7 +9816,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.addVolatile('trapped', target, move, 'trapper');
target.addVolatile('trapped', source, move, 'trapper');
},
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -10170,7 +9828,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -10191,7 +9848,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.type = item.onPlate;
}
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -10210,7 +9866,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Jump Kick'));
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -10228,7 +9883,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const success = !!this.heal(this.modify(pokemon.maxhp, 0.25));
return pokemon.cureStatus() || success;
},
- secondary: null,
target: "allies",
type: "Grass",
},
@@ -10243,7 +9897,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -10261,7 +9914,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
accuracy: -1,
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { evasion: 1 } },
@@ -10320,7 +9972,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Steel",
zMove: { effect: 'clearnegativeboost' },
@@ -10350,7 +10001,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -10364,7 +10014,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -10378,7 +10027,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Ground",
zMove: { basePower: 185 },
@@ -10415,7 +10063,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', pokemon, 'move: Laser Focus', '[silent]');
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -10436,7 +10083,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -10461,7 +10107,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return hasLastResort;
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -10478,7 +10123,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -10508,7 +10152,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 40,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -10523,7 +10166,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -10542,7 +10184,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Beautiful",
@@ -10577,7 +10218,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Clever",
@@ -10612,7 +10252,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryImmunity(target) {
return !target.hasType('Grass');
},
- secondary: null,
target: "normal",
type: "Grass",
zMove: { effect: 'clearnegativeboost' },
@@ -10630,7 +10269,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: -1,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -10647,7 +10285,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1 },
isZ: "mimikiumz",
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Cool",
@@ -10679,7 +10316,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, bypasssub: 1 },
heal: [1, 4],
- secondary: null,
target: "allies",
type: "Water",
},
@@ -10694,7 +10330,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1 },
recoil: [1, 2],
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Beautiful",
@@ -10735,7 +10370,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'move: Light Screen');
},
},
- secondary: null,
target: "allySide",
type: "Psychic",
zMove: { boost: { spd: 1 } },
@@ -10756,7 +10390,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
ignoreAbility: true,
isZ: "ultranecroziumz",
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -10807,7 +10440,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (move && source === this.effectState.target && target === this.effectState.source) return true;
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -10824,7 +10456,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -10865,7 +10496,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
}
},
- secondary: null,
target: "normal",
type: "Fighting",
zMove: { basePower: 160 },
@@ -10913,7 +10543,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'move: Lucky Chant'); // "[side.name]'s team's Lucky Chant wore off!"
},
},
- secondary: null,
target: "allySide",
type: "Normal",
zMove: { boost: { evasion: 1 } },
@@ -10950,7 +10579,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const success = !!this.heal(this.modify(pokemon.maxhp, 0.25));
return pokemon.cureStatus() || success;
},
- secondary: null,
target: "allies",
type: "Psychic",
},
@@ -10994,7 +10622,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Psychic",
contestType: "Beautiful",
@@ -11046,7 +10673,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -11060,7 +10686,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Beautiful",
@@ -11127,7 +10752,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { spd: 2 } },
@@ -11146,7 +10770,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (target.getTypes().join() === 'Psychic' || !target.setType('Psychic')) return false;
this.add('-start', target, 'typechange', 'Psychic');
},
- secondary: null,
target: "normal",
type: "Psychic",
},
@@ -11189,7 +10812,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Magic Room', '[of] ' + this.effectState.source);
},
},
- secondary: null,
target: "all",
type: "Psychic",
zMove: { boost: { spd: 1 } },
@@ -11205,7 +10827,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Tough",
@@ -11220,7 +10841,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -11247,7 +10867,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return didSomething;
},
- secondary: null,
target: "allySide",
type: "Electric",
zMove: { boost: { spd: 1 } },
@@ -11285,7 +10904,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', target, 'Magnet Rise');
},
},
- secondary: null,
target: "self",
type: "Electric",
zMove: { boost: { evasion: 1 } },
@@ -11329,7 +10947,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onUseMoveMessage(pokemon, target, move) {
this.add('-activate', pokemon, 'move: Magnitude', move.magnitude);
},
- secondary: null,
target: "allAdjacent",
type: "Ground",
zMove: { basePower: 140 },
@@ -11350,7 +10967,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -1,
},
},
- secondary: null,
target: "allAdjacentFoes",
type: "Steel",
contestType: "Beautiful",
@@ -11366,7 +10982,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, minimize: 1 },
isZ: "inciniumz",
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Cool",
@@ -11430,7 +11045,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "allySide",
type: "Fighting",
zMove: { boost: { def: 1 } },
@@ -11610,7 +11224,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "self",
type: "Normal",
contestType: "Cool",
@@ -11914,7 +11527,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -11933,7 +11545,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: 1,
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { atk: 1 } },
@@ -11973,7 +11584,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
},
callsMove: true,
- secondary: null,
target: "adjacentFoe",
type: "Normal",
zMove: { boost: { spe: 2 } },
@@ -11989,7 +11599,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "normal",
type: "Grass",
zMove: { basePower: 120 },
@@ -12004,7 +11613,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cool",
@@ -12018,7 +11626,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -12032,7 +11639,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -12051,7 +11657,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
selfdestruct: "ifHit",
- secondary: null,
target: "normal",
type: "Dark",
zMove: { effect: 'healreplacement' },
@@ -12069,7 +11674,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: {},
isZ: "lunaliumz",
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -12100,7 +11704,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
targetRelayVar.target = this.getAtSlot(lastDamagedBy.slot);
}
},
- secondary: null,
target: "scripted",
type: "Steel",
contestType: "Cool",
@@ -12138,7 +11741,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spd: -2,
},
- secondary: null,
target: "normal",
type: "Steel",
zMove: { boost: { spa: 1 } },
@@ -12157,7 +11759,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Fighting",
},
@@ -12182,7 +11783,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- secondary: null,
target: "normal",
type: "Rock",
},
@@ -12230,7 +11830,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.actions.useMove(randomMove, pokemon);
},
callsMove: true,
- secondary: null,
target: "self",
type: "Normal",
contestType: "Cute",
@@ -12244,7 +11843,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, mirror: 1, metronome: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Rock",
},
@@ -12258,7 +11856,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, metronome: 1 },
heal: [1, 2],
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -12297,7 +11894,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
};
this.add('-start', source, 'Mimic', move.name);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { accuracy: 1 } },
@@ -12323,7 +11919,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "allAdjacent",
type: "Fire",
contestType: "Cool",
@@ -12345,7 +11940,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.addVolatile('lockon', target);
this.add('-activate', source, 'move: Mind Reader', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spa: 1 } },
@@ -12379,7 +11973,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
evasion: 2,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -12413,7 +12006,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spa: 1 } },
@@ -12459,7 +12051,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "scripted",
type: "Psychic",
contestType: "Beautiful",
@@ -12483,7 +12074,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
callsMove: true,
- secondary: null,
target: "normal",
type: "Flying",
zMove: { boost: { atk: 2 } },
@@ -12546,7 +12136,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'Mist');
},
},
- secondary: null,
target: "allySide",
type: "Ice",
zMove: { effect: 'heal' },
@@ -12587,7 +12176,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(1.5);
}
},
- secondary: null,
target: "allAdjacent",
type: "Fairy",
},
@@ -12644,7 +12232,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'Misty Terrain');
},
},
- secondary: null,
target: "all",
type: "Fairy",
zMove: { boost: { spd: 1 } },
@@ -12679,7 +12266,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1 },
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -12715,7 +12301,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "self",
type: "Fairy",
zMove: { effect: 'clearnegativeboost' },
@@ -12752,7 +12337,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -12928,7 +12512,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Mud Sport');
},
},
- secondary: null,
target: "all",
type: "Ground",
zMove: { boost: { spd: 1 } },
@@ -12948,7 +12531,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (pokemon.ignoringItem()) return;
move.type = this.runEvent('Memory', pokemon, null, move, 'Normal');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 185 },
@@ -13006,7 +12588,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: 2,
},
- secondary: null,
target: "self",
type: "Dark",
zMove: { effect: 'clearnegativeboost' },
@@ -13039,7 +12620,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.usedItemThisTurn = true;
this.runEvent('AfterUseItem', pokemon, null, null, item);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -13071,7 +12651,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
callsMove: true,
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -13089,7 +12668,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Tough",
@@ -13123,7 +12701,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "ghostiumz",
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -13171,7 +12748,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(pokemon.baseMaxhp / 4);
},
},
- secondary: null,
target: "normal",
type: "Ghost",
zMove: { boost: { spa: 1 } },
@@ -13187,7 +12763,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -13202,7 +12777,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Cool",
@@ -13220,7 +12794,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
ignoreEvasion: true,
ignoreDefensive: true,
ignoreImmunity: { 'Fairy': true },
- secondary: null,
target: "allAdjacentFoes",
type: "Dragon",
},
@@ -13237,7 +12810,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: -1,
spa: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -13274,7 +12846,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: 1,
spe: 1,
},
- secondary: null,
target: "self",
type: "Fighting",
},
@@ -13326,7 +12897,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, distance: 1, heal: 1, metronome: 1 },
drain: [3, 4],
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -13384,7 +12954,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Dark",
},
@@ -13399,7 +12968,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "primariumz",
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -13456,7 +13024,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (this.effectState.source?.isActive) pokemon.tryTrap();
},
},
- secondary: null,
target: "normal",
type: "Fighting",
},
@@ -13474,7 +13041,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHit(target) {
if (target.volatiles['miracleeye']) return false;
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -13531,7 +13097,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
break;
}
},
- secondary: null,
hasSheerForce: true,
target: "normal",
type: "Dragon",
@@ -13561,7 +13126,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'lockedmove',
},
- secondary: null,
target: "randomNormal",
type: "Dragon",
contestType: "Cool",
@@ -13575,7 +13139,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, sound: 1, bypasssub: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Electric",
},
@@ -13593,7 +13156,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Fire",
contestType: "Beautiful",
@@ -13616,7 +13178,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.sethp(averagehp);
this.add('-sethp', pokemon, pokemon.getHealth, '[from] move: Pain Split');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -13632,7 +13193,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, heal: 1, metronome: 1 },
drain: [1, 2],
- secondary: null,
target: "allAdjacent",
type: "Electric",
contestType: "Clever",
@@ -13653,7 +13213,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Dark",
zMove: { effect: 'healreplacement' },
@@ -13676,7 +13235,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Tough",
@@ -13690,7 +13248,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Clever",
@@ -13704,7 +13261,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -13749,7 +13305,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-start', pokemon, `perish${duration}`);
},
},
- secondary: null,
target: "all",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -13764,7 +13319,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, wind: 1 },
- secondary: null,
target: "allAdjacent",
type: "Grass",
contestType: "Beautiful",
@@ -13781,7 +13335,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'lockedmove',
},
- secondary: null,
target: "randomNormal",
type: "Grass",
contestType: "Beautiful",
@@ -13811,7 +13364,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
duration: 2,
onInvulnerability: false,
},
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -13829,7 +13381,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical';
},
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -13849,7 +13400,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cute",
@@ -13864,7 +13414,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Bug",
zMove: { basePower: 140 },
@@ -13882,7 +13431,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1 },
pseudoWeather: 'iondeluge',
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -13899,7 +13447,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -13944,7 +13491,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (item.onEat) source.ateBerry = true;
}
},
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cute",
@@ -13976,7 +13522,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'psn',
- secondary: null,
target: "allAdjacentFoes",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -14009,7 +13554,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1 },
status: 'psn',
- secondary: null,
target: "normal",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -14079,7 +13623,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
@@ -14099,7 +13642,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHit(target, source, move) {
this.add('-activate', target, 'move: Poltergeist', this.dex.items.get(target.item).name);
},
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -14114,7 +13656,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, slicing: 1 },
multihit: 10,
multiaccuracy: true,
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -14146,7 +13687,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -14177,7 +13717,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Bug",
zMove: { boost: { spd: 2 } },
@@ -14209,7 +13748,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Beautiful",
@@ -14250,7 +13788,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('Power Shift');
},
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -14272,7 +13809,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.storedStats.spa = newspa;
this.add('-activate', source, 'move: Power Split', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -14302,7 +13838,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-swapboost', source, target, 'atk, spa', '[from] move: Power Swap');
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -14343,7 +13878,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('Power Trick');
},
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { boost: { atk: 1 } },
@@ -14363,7 +13897,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dark",
zMove: { basePower: 160 },
@@ -14401,7 +13934,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -14441,7 +13973,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.basePower = 120;
}
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -14458,7 +13989,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -14507,7 +14037,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -14539,7 +14068,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
- secondary: null,
onBasePower(basePower, source) {
if (this.field.isTerrain('electricterrain')) {
this.debug('psyblade electric terrain boost');
@@ -14583,7 +14111,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.side.removeSideCondition('lightscreen');
pokemon.side.removeSideCondition('auroraveil');
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -14659,7 +14186,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Psychic Terrain');
},
},
- secondary: null,
target: "all",
type: "Psychic",
zMove: { boost: { spa: 1 } },
@@ -14679,7 +14205,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: -2,
},
},
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -14694,7 +14219,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -14718,7 +14242,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.cureStatus();
},
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spa: 2 } },
@@ -14752,7 +14275,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.add('-copyboost', source, target, '[from] move: Psych Up');
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'heal' },
@@ -14788,7 +14310,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Beautiful",
@@ -14803,7 +14324,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -14821,7 +14341,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Clever",
@@ -14837,7 +14356,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1 },
isZ: "snorliumz",
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -14858,7 +14376,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Dark",
zMove: { basePower: 160 },
@@ -14883,7 +14400,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.heal(Math.ceil(source.maxhp * 0.5), source);
},
- secondary: null,
target: "normal",
type: "Poison",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -14954,7 +14470,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -14992,7 +14507,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
action.order = 201;
this.add('-activate', target, 'move: Quash');
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { spe: 1 } },
@@ -15007,7 +14521,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -15054,7 +14567,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "allySide",
type: "Fighting",
zMove: { boost: { def: 1 } },
@@ -15074,7 +14586,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: 1,
spe: 1,
},
- secondary: null,
target: "self",
type: "Bug",
zMove: { effect: 'clearnegativeboost' },
@@ -15108,7 +14619,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('rage');
},
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -15125,7 +14635,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
},
@@ -15159,7 +14668,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Bug",
zMove: { effect: 'clearnegativeboost' },
@@ -15193,7 +14701,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
break;
}
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -15209,7 +14716,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'lockedmove',
},
- secondary: null,
target: "randomNormal",
type: "Fire",
},
@@ -15223,7 +14729,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { metronome: 1 },
weather: 'RainDance',
- secondary: null,
target: "all",
type: "Water",
zMove: { boost: { spe: 1 } },
@@ -15292,7 +14797,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "allAdjacentFoes",
type: "Grass",
contestType: "Cool",
@@ -15338,7 +14842,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
critRatio: 2,
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
contestType: "Cool",
@@ -15353,7 +14856,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, metronome: 1 },
heal: [1, 2],
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -15375,7 +14877,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-item', pokemon, this.dex.items.get(item), '[from] move: Recycle');
pokemon.setItem(item, source, move);
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { spe: 2 } },
@@ -15417,7 +14918,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'Reflect');
},
},
- secondary: null,
target: "allySide",
type: "Psychic",
zMove: { boost: { def: 1 } },
@@ -15450,7 +14950,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.knownType = target.isAlly(source) && target.knownType;
if (!source.knownType) source.apparentType = oldApparentType;
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spa: 1 } },
@@ -15470,7 +14969,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (['', 'slp', 'frz'].includes(pokemon.status)) return false;
pokemon.cureStatus();
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'heal' },
@@ -15537,7 +15035,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
target.statusState.startTime = 3;
this.heal(target.maxhp); // Aesthetic only as the healing happens after you fall asleep in-game
},
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'clearnegativeboost' },
@@ -15558,7 +15055,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -15576,7 +15072,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -15599,7 +15094,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (type === '???' && types[1]) type = types[1];
move.type = type;
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -15624,7 +15118,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: -4,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -15657,7 +15150,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
zMove: { basePower: 160 },
@@ -15687,7 +15179,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
duration: 1,
// reviving implemented in side.ts, kind of
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -15707,7 +15198,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Electric",
maxMove: { basePower: 140 },
@@ -15722,7 +15212,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: -6,
flags: { reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1 },
forceSwitch: true,
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -15740,7 +15229,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Beautiful",
@@ -15755,7 +15243,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Rock",
zMove: { basePower: 140 },
@@ -15792,7 +15279,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: 2,
},
- secondary: null,
target: "self",
type: "Rock",
zMove: { effect: 'clearnegativeboost' },
@@ -15843,7 +15329,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -15879,7 +15364,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'mustrecharge',
},
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -15901,7 +15385,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const oldAbility = source.setAbility(target.ability, target);
if (!oldAbility) return oldAbility as false | null;
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -15986,7 +15469,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Cute",
@@ -16022,7 +15504,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return types.filter(type => type !== 'Flying');
},
},
- secondary: null,
target: "self",
type: "Flying",
zMove: { effect: 'clearnegativeboost' },
@@ -16057,7 +15538,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.boost({ atk: 1, spa: 1 }, pokemon, source);
}
},
- secondary: null,
target: "all",
type: "Ground",
zMove: { boost: { atk: 1 } },
@@ -16088,7 +15568,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Beautiful",
@@ -16105,7 +15584,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Tough",
@@ -16138,7 +15616,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
ignoreEvasion: true,
ignoreDefensive: true,
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -16195,7 +15672,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'Safeguard');
},
},
- secondary: null,
target: "allySide",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -16242,7 +15718,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
accuracy: -1,
},
- secondary: null,
target: "normal",
type: "Ground",
zMove: { boost: { evasion: 1 } },
@@ -16279,7 +15754,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { metronome: 1, wind: 1 },
weather: 'Sandstorm',
- secondary: null,
target: "all",
type: "Rock",
zMove: { boost: { spe: 1 } },
@@ -16295,7 +15769,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Clever",
@@ -16314,7 +15787,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (target.hasType('Grass')) return null;
target.addVolatile('leechseed', source);
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Clever",
@@ -16330,7 +15802,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "buginiumz",
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cool",
@@ -16369,7 +15840,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spe: 1,
},
},
- secondary: null,
target: "normal",
type: "Dragon",
zMove: { basePower: 140 },
@@ -16387,7 +15857,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: -2,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -16419,7 +15888,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -16436,7 +15904,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: -2,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -16472,7 +15939,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1 },
isZ: "solganiumz",
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -16534,7 +16000,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Beautiful",
@@ -16548,7 +16013,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, bullet: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -16582,7 +16046,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
maxMove: { basePower: 75 },
@@ -16598,7 +16061,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, noparentalbond: 1 },
selfdestruct: "always",
- secondary: null,
target: "allAdjacent",
type: "Normal",
contestType: "Beautiful",
@@ -16652,7 +16114,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -16682,7 +16143,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
duration: 2,
onInvulnerability: false,
},
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -16696,7 +16156,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -16710,7 +16169,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Clever",
@@ -16728,7 +16186,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: 1,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -16745,7 +16202,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "psychiumz",
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -16783,7 +16239,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
},
selfSwitch: 'shedtail',
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -16797,7 +16252,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
ohko: 'Ice',
target: "normal",
type: "Ice",
@@ -16862,7 +16316,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spa: 2,
spe: 2,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -16903,7 +16356,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "allAdjacentFoes",
type: "Fire",
contestType: "Tough",
@@ -16920,7 +16372,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 2,
},
- secondary: null,
target: "self",
type: "Steel",
},
@@ -16937,7 +16388,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spe: 2,
atk: 1,
},
- secondary: null,
target: "self",
type: "Steel",
zMove: { effect: 'clearnegativeboost' },
@@ -16952,7 +16402,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -16978,7 +16427,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "self",
type: "Ground",
zMove: { effect: 'clearnegativeboost' },
@@ -17100,7 +16548,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const oldAbility = target.setAbility('simple');
if (!oldAbility) return oldAbility as false | null;
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spa: 1 } },
@@ -17116,7 +16563,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -17133,7 +16579,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "decidiumz",
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -17188,7 +16633,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.baseMoveSlots[sketchIndex] = sketchedMove;
this.add('-activate', source, 'move: Sketch', move.name);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -17206,7 +16650,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
return this.skillSwap(source, target);
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -17252,7 +16695,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -17396,7 +16838,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "any",
type: "Flying",
contestType: "Tough",
@@ -17411,7 +16852,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -17426,7 +16866,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, metronome: 1 },
heal: [1, 2],
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -17441,7 +16880,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -17456,7 +16894,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -17471,7 +16908,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { spe: 1 } },
@@ -17509,7 +16945,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.actions.useMove(randomMove, pokemon);
},
callsMove: true,
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'crit2' },
@@ -17608,7 +17043,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
// groundedness implemented in battle.engine.js:BattlePokemon#isGrounded
},
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -17622,7 +17056,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -17647,7 +17080,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target) {
if (target.status === 'par') target.cureStatus();
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -17681,7 +17113,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
accuracy: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { evasion: 1 } },
@@ -17698,7 +17129,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -17750,7 +17180,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return null;
},
},
- secondary: null,
target: "self",
type: "Dark",
zMove: { boost: { spe: 2 } },
@@ -17767,7 +17196,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
tracksTarget: true,
- secondary: null,
target: "normal",
type: "Water",
},
@@ -17802,7 +17230,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
weather: 'snowscape',
- secondary: null,
target: "all",
type: "Ice",
},
@@ -17824,7 +17251,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.add('-start', target, 'typechange', 'Water');
},
- secondary: null,
target: "normal",
type: "Water",
zMove: { boost: { spa: 1 } },
@@ -17840,7 +17266,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { snatch: 1, heal: 1, metronome: 1 },
heal: [1, 2],
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -17878,7 +17303,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(0.5);
}
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -17915,7 +17339,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(0.5);
}
},
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -17931,7 +17354,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -17947,7 +17369,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1 },
isZ: "marshadiumz",
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -17962,7 +17383,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Dragon",
contestType: "Beautiful",
@@ -18037,7 +17457,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Clever",
@@ -18054,7 +17473,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, bypasssub: 1 },
stealsBoosts: true,
// Boost stealing implemented in scripts.js
- secondary: null,
target: "normal",
type: "Ghost",
contestType: "Cool",
@@ -18074,7 +17492,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
source.storedStats.spe = targetSpe;
this.add('-activate', source, 'move: Speed Swap', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 1 } },
@@ -18093,7 +17510,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 2,
def: -2,
},
- secondary: null,
target: "normal",
type: "Grass",
},
@@ -18110,7 +17526,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
return target.addVolatile('trapped', source, move, 'trapper');
},
- secondary: null,
target: "normal",
type: "Bug",
zMove: { boost: { def: 1 } },
@@ -18127,7 +17542,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
maxMove: { basePower: 120 },
@@ -18160,7 +17574,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
},
},
- secondary: null,
target: "foeSide",
type: "Ground",
zMove: { boost: { def: 1 } },
@@ -18218,7 +17631,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Grass",
zMove: { boost: { def: 1 } },
@@ -18238,7 +17650,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spe: -2,
},
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -18297,7 +17708,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!ppDeducted) return false;
this.add("-activate", target, 'move: Spite', move.name, ppDeducted);
},
- secondary: null,
target: "normal",
type: "Ghost",
zMove: { effect: 'heal' },
@@ -18322,7 +17732,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onAfterMove(pokemon) {
pokemon.removeVolatile('stockpile');
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -18346,7 +17755,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHit(target, source) {
this.add('-nothing');
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 3 } },
@@ -18369,7 +17777,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.field.clearTerrain();
},
isZ: "lycaniumz",
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Cool",
@@ -18402,7 +17809,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1 },
status: 'slp',
- secondary: null,
target: "normal",
type: "Grass",
zMove: { effect: 'clearnegativeboost' },
@@ -18436,7 +17842,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -18481,7 +17886,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
},
},
- secondary: null,
target: "foeSide",
type: "Rock",
zMove: { boost: { def: 1 } },
@@ -18542,7 +17946,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -18564,7 +17967,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onAfterSubDamage() {
this.field.clearTerrain();
},
- secondary: null,
target: "normal",
type: "Steel",
},
@@ -18609,7 +18011,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
},
},
- secondary: null,
target: "foeSide",
type: "Bug",
zMove: { boost: { spe: 1 } },
@@ -18663,7 +18064,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'heal' },
@@ -18721,7 +18121,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Tough",
@@ -18763,7 +18162,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
critRatio: 2,
- secondary: null,
target: "normal",
type: "Rock",
contestType: "Tough",
@@ -18782,7 +18180,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { basePower: 160 },
@@ -18800,7 +18197,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
willCrit: true,
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -18830,7 +18226,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -18850,7 +18245,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const success = this.boost({ atk: -1 }, target, source, null, false, true);
return !!(this.heal(atk, source, target) || success);
},
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { def: 1 } },
@@ -18868,7 +18262,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: -2,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Bug",
zMove: { boost: { spe: 1 } },
@@ -18892,7 +18285,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-activate', pokemon, 'move: Struggle');
},
struggleRecoil: true,
- secondary: null,
target: "randomNormal",
type: "Normal",
contestType: "Tough",
@@ -18935,7 +18327,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!this.boost({ def: 2 })) return null;
pokemon.eatItem(true);
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -18949,7 +18340,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1, powder: 1 },
status: 'par',
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { spd: 1 } },
@@ -18966,7 +18356,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 4],
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -19043,7 +18432,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', target, 'Substitute');
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -19060,7 +18448,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "iciumz",
- secondary: null,
target: "normal",
type: "Ice",
contestType: "Cool",
@@ -19081,7 +18468,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Clever",
@@ -19096,7 +18482,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { metronome: 1 },
weather: 'sunnyday',
- secondary: null,
target: "all",
type: "Fire",
zMove: { boost: { spe: 1 } },
@@ -19112,7 +18497,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
ignoreAbility: true,
- secondary: null,
target: "normal",
type: "Steel",
contestType: "Cool",
@@ -19130,7 +18514,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onMoveFail(target, source, move) {
this.damage(source.baseMaxhp / 2, source, source, this.dex.conditions.get('Supercell Slam'));
},
- secondary: null,
target: "normal",
type: "Electric",
},
@@ -19146,7 +18529,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -19166,7 +18548,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: -1,
},
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -19181,7 +18562,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, sound: 1, bypasssub: 1, metronome: 1 },
volatileStatus: 'confusion',
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
@@ -19198,7 +18578,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "flyiniumz",
- secondary: null,
target: "normal",
type: "Flying",
contestType: "Cool",
@@ -19212,7 +18591,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { protect: 1, mirror: 1, nonsky: 1, metronome: 1 },
- secondary: null,
target: "allAdjacent",
type: "Water",
contestType: "Beautiful",
@@ -19228,7 +18606,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, punch: 1 },
willCrit: true,
multihit: 3,
- secondary: null,
target: "normal",
type: "Water",
zMove: { basePower: 140 },
@@ -19247,7 +18624,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: 2,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -19274,7 +18650,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.removeVolatile('stockpile');
return success || this.NOT_FAIL;
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -19290,7 +18665,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
volatileStatus: 'confusion',
- secondary: null,
target: "normal",
type: "Fairy",
zMove: { boost: { spa: 1 } },
@@ -19308,7 +18682,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
evasion: -2,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
zMove: { boost: { accuracy: 1 } },
@@ -19323,7 +18696,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
contestType: "Cool",
@@ -19370,7 +18742,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-enditem', source, myItem, '[silent]', '[from] move: Switcheroo');
}
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { spe: 2 } },
@@ -19388,7 +18759,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
atk: 2,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { effect: 'clearnegativeboost' },
@@ -19407,7 +18777,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryImmunity(target, source) {
return target.hasType(source.getTypes());
},
- secondary: null,
target: "allAdjacent",
type: "Psychic",
contestType: "Clever",
@@ -19443,7 +18812,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return success;
},
- secondary: null,
target: "self",
type: "Grass",
zMove: { effect: 'clearnegativeboost' },
@@ -19494,7 +18862,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1, slicing: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Steel",
zMove: { basePower: 180 },
@@ -19510,7 +18877,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -19527,7 +18893,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spa: 3,
},
- secondary: null,
target: "self",
type: "Bug",
zMove: { effect: 'clearnegativeboost' },
@@ -19543,7 +18908,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 140 },
@@ -19562,7 +18926,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: -1,
},
- secondary: null,
target: "allAdjacentFoes",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -19603,7 +18966,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-sideend', side, 'move: Tailwind');
},
},
- secondary: null,
target: "allySide",
type: "Flying",
zMove: { effect: 'crit2' },
@@ -19619,7 +18981,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 4],
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -19637,7 +18998,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
const success = !!this.boost({ spa: 1, spd: 1 });
return pokemon.cureStatus() || success;
},
- secondary: null,
target: "self",
type: "Psychic",
},
@@ -19667,7 +19027,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: -1,
},
- secondary: null,
target: "normal",
type: "Rock",
},
@@ -19709,7 +19068,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { atk: 1 } },
@@ -19728,7 +19086,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: -1,
spa: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -19762,7 +19119,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pokemon.eatItem(true);
}
},
- secondary: null,
target: "all",
type: "Normal",
},
@@ -19780,7 +19136,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (pokemon.ignoringItem()) return;
move.type = this.runEvent('Drive', pokemon, null, move, 'Normal');
},
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cool",
@@ -19796,7 +19151,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "groundiumz",
- secondary: null,
target: "normal",
type: "Ground",
contestType: "Cool",
@@ -19811,7 +19165,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, dance: 1, metronome: 1 },
volatileStatus: 'confusion',
- secondary: null,
target: "allAdjacent",
type: "Normal",
zMove: { boost: { spa: 1 } },
@@ -19865,7 +19218,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-end', target, 'Telekinesis');
},
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spa: 1 } },
@@ -19884,7 +19236,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return !!this.canSwitch(source.side);
},
selfSwitch: true,
- secondary: null,
target: "self",
type: "Psychic",
zMove: { effect: 'heal' },
@@ -19906,7 +19257,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fire",
},
@@ -19943,7 +19293,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.self = { boosts: { atk: -1, spa: -1 } };
}
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -19969,7 +19318,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
move.target = 'allAdjacentFoes';
}
},
- secondary: null,
target: "normal",
type: "Normal",
},
@@ -20005,7 +19353,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.debug('BP doubled in Terrain');
}
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -20036,7 +19383,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-enditem', target, yourItem, '[silent]', '[from] move: Thief', `[of] ${source}`);
this.add('-item', source, yourItem, '[from] move: Thief', `[of] ${target}`);
},
- secondary: null,
target: "normal",
type: "Dark",
contestType: "Tough",
@@ -20061,7 +19407,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
volatileStatus: 'smackdown',
ignoreImmunity: { 'Ground': true },
- secondary: null,
target: "allAdjacentFoes",
type: "Ground",
zMove: { basePower: 180 },
@@ -20080,7 +19425,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
if (source.isActive) target.addVolatile('trapped', source, move, 'trapper');
},
- secondary: null,
target: "allAdjacentFoes",
type: "Ground",
contestType: "Tough",
@@ -20097,7 +19441,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
volatileStatus: 'lockedmove',
},
- secondary: null,
target: "randomNormal",
type: "Normal",
contestType: "Tough",
@@ -20207,7 +19550,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Electric",
},
@@ -20227,7 +19569,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Clever",
@@ -20317,7 +19658,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'par',
ignoreImmunity: false,
- secondary: null,
target: "normal",
type: "Electric",
zMove: { boost: { spd: 1 } },
@@ -20336,7 +19676,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: -1,
def: -1,
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { def: 1 } },
@@ -20369,7 +19708,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (success) this.add('-activate', pokemon, 'move: Tidy Up');
return !!this.boost({ atk: 1, spe: 1 }, pokemon, pokemon, null, false, true) || success;
},
- secondary: null,
target: "self",
type: "Normal",
},
@@ -20393,7 +19731,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!success) return false;
this.add('-invertboost', target, '[from] move: Topsy-Turvy');
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { atk: 1 } },
@@ -20447,7 +19784,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (pokemon.lastMove && pokemon.lastMove.id !== 'struggle') pokemon.disableMove(pokemon.lastMove.id);
},
},
- secondary: null,
target: "normal",
type: "Dark",
zMove: { boost: { def: 1 } },
@@ -20464,7 +19800,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
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,
target: "normal",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -20505,7 +19840,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "foeSide",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -20524,7 +19858,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
spe: -1,
},
- secondary: null,
target: "normal",
type: "Poison",
zMove: { boost: { spe: 1 } },
@@ -20565,7 +19898,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return false;
}
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { effect: 'heal' },
@@ -20639,7 +19971,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-enditem', source, myItem, '[silent]', '[from] move: Trick');
}
},
- secondary: null,
target: "normal",
type: "Psychic",
zMove: { boost: { spe: 2 } },
@@ -20668,7 +19999,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
}
},
- secondary: null,
target: "normal",
type: "Ghost",
zMove: { boost: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } },
@@ -20710,7 +20040,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Trick Room');
},
},
- secondary: null,
target: "all",
type: "Psychic",
zMove: { boost: { accuracy: 1 } },
@@ -20754,7 +20083,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 3,
multiaccuracy: true,
- secondary: null,
target: "normal",
type: "Ice",
zMove: { basePower: 120 },
@@ -20770,7 +20098,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 3,
- secondary: null,
target: "normal",
type: "Water",
},
@@ -20788,7 +20115,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
multihit: 3,
multiaccuracy: true,
- secondary: null,
target: "normal",
type: "Fighting",
zMove: { basePower: 120 },
@@ -20854,7 +20180,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
noPPBoosts: true,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -20871,7 +20196,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1 },
multihit: 2,
- secondary: null,
target: "normal",
type: "Psychic",
contestType: "Cool",
@@ -20907,7 +20231,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: {},
isZ: "fairiumz",
- secondary: null,
target: "normal",
type: "Fairy",
contestType: "Cool",
@@ -21006,7 +20329,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "randomNormal",
type: "Normal",
contestType: "Cute",
@@ -21021,7 +20343,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cute",
@@ -21035,7 +20356,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 1,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -21057,7 +20377,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
spd: -1,
},
},
- secondary: null,
target: "normal",
type: "Fire",
zMove: { basePower: 220 },
@@ -21078,7 +20397,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 20,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Cute",
@@ -21099,7 +20417,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
return false;
},
- secondary: null,
target: "allAdjacentFoes",
type: "Poison",
zMove: { boost: { def: 1 } },
@@ -21119,7 +20436,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.chainModify(2);
}
},
- secondary: null,
target: "normal",
type: "Poison",
contestType: "Beautiful",
@@ -21138,7 +20454,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
def: 1,
spe: 1,
},
- secondary: null,
target: "self",
type: "Fighting",
},
@@ -21151,7 +20466,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 25,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Cool",
@@ -21165,7 +20479,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 30,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -21180,7 +20493,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 10,
priority: -1,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Cool",
@@ -21195,7 +20507,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
selfSwitch: true,
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Cool",
@@ -21238,7 +20549,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target) {
if (target.status === 'slp') target.cureStatus();
},
- secondary: null,
target: "normal",
type: "Fighting",
contestType: "Tough",
@@ -21269,7 +20579,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 25,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cute",
@@ -21341,7 +20650,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -21380,7 +20688,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 1,
flags: { protect: 1, mirror: 1, metronome: 1 },
multihit: [2, 5],
- secondary: null,
target: "normal",
type: "Water",
contestType: "Cool",
@@ -21414,7 +20721,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Water Sport');
},
},
- secondary: null,
target: "all",
type: "Water",
zMove: { boost: { spd: 1 } },
@@ -21434,7 +20740,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "allAdjacentFoes",
type: "Water",
contestType: "Beautiful",
@@ -21449,7 +20754,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [33, 100],
- secondary: null,
target: "normal",
type: "Water",
},
@@ -21501,7 +20805,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
this.debug(`BP: ${move.basePower}`);
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 160 },
@@ -21518,7 +20821,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Water",
contestType: "Beautiful",
@@ -21533,7 +20835,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: -6,
flags: { reflectable: 1, mirror: 1, bypasssub: 1, allyanim: 1, metronome: 1, noassist: 1, failcopycat: 1, wind: 1 },
forceSwitch: true,
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -21549,7 +20850,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, punch: 1 },
willCrit: true,
- secondary: null,
target: "normal",
type: "Dark",
},
@@ -21616,7 +20916,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return this.NOT_FAIL;
},
},
- secondary: null,
target: "allySide",
type: "Rock",
zMove: { boost: { def: 1 } },
@@ -21653,7 +20952,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [1, 4],
- secondary: null,
target: "normal",
type: "Electric",
contestType: "Tough",
@@ -21668,7 +20966,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { protect: 1, reflectable: 1, mirror: 1, metronome: 1 },
status: 'brn',
- secondary: null,
target: "normal",
type: "Fire",
zMove: { boost: { atk: 1 } },
@@ -21683,7 +20980,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 35,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, distance: 1, metronome: 1 },
- secondary: null,
target: "any",
type: "Flying",
contestType: "Cool",
@@ -21720,7 +21016,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { spd: 1 } },
@@ -21738,7 +21033,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
boosts: {
def: 1,
},
- secondary: null,
target: "self",
type: "Water",
zMove: { boost: { def: 1 } },
@@ -21788,7 +21082,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
this.add('-fieldend', 'move: Wonder Room');
},
},
- secondary: null,
target: "all",
type: "Psychic",
zMove: { boost: { spd: 1 } },
@@ -21804,7 +21097,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
recoil: [33, 100],
- secondary: null,
target: "normal",
type: "Grass",
contestType: "Tough",
@@ -21822,7 +21114,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
atk: 1,
spa: 1,
},
- secondary: null,
target: "self",
type: "Normal",
zMove: { boost: { atk: 1 } },
@@ -21854,7 +21145,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!oldAbility) return oldAbility as false | null;
if (target.status === 'slp') target.cureStatus();
},
- secondary: null,
target: "normal",
type: "Grass",
zMove: { boost: { spe: 1 } },
@@ -21870,7 +21160,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
volatileStatus: 'partiallytrapped',
- secondary: null,
target: "normal",
type: "Normal",
contestType: "Tough",
@@ -21892,7 +21181,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 5,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
- secondary: null,
target: "normal",
type: "Normal",
zMove: { basePower: 190 },
@@ -21908,7 +21196,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
pp: 15,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
- secondary: null,
target: "normal",
type: "Bug",
contestType: "Cool",
@@ -21940,7 +21227,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
target.trySetStatus('slp', this.effectState.source);
},
},
- secondary: null,
target: "normal",
type: "Normal",
zMove: { boost: { spe: 1 } },
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index 3fd3be5763..438d7c4901 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -70,7 +70,7 @@ export interface HitEffect {
onHit?: MoveEventMethods['onHit'];
// set pokemon conditions
- boosts?: SparseBoostsTable | null;
+ boosts?: SparseBoostsTable;
status?: string;
volatileStatus?: string;
@@ -190,7 +190,7 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
// -----------
ohko?: boolean | 'Ice';
thawsTarget?: boolean;
- heal?: number[] | null;
+ heal?: number[];
forceSwitch?: boolean;
selfSwitch?: 'copyvolatile' | 'shedtail' | boolean;
selfBoost?: { boosts?: SparseBoostsTable };
@@ -207,9 +207,9 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
mindBlownRecoil?: boolean;
stealsBoosts?: boolean;
struggleRecoil?: boolean;
- secondary?: SecondaryEffect | null;
- secondaries?: SecondaryEffect[] | null;
- self?: SecondaryEffect | null;
+ secondary?: SecondaryEffect;
+ secondaries?: SecondaryEffect[];
+ self?: SecondaryEffect;
hasSheerForce?: boolean;
// Hit effect modifiers
@@ -376,13 +376,13 @@ export class DataMove extends BasicEffect implements Readonly {
battle.onEvent('ModifyMove', battle.format, -99, move => {
if (move.id === 'falseswipe') {
// If False Swipe had a psn secondary, it would have a 60% chance to activate
- assert.equal(move.secondaries, null);
+ assert.equal(move.secondaries, undefined);
}
});
From ee0cf5e37d81fd4e72f66643848aeb7caa47b4d6 Mon Sep 17 00:00:00 2001
From: dot-Comfey <84290266+dot-Comfey@users.noreply.github.com>
Date: Mon, 23 Mar 2026 22:33:36 -0700
Subject: [PATCH 162/233] Optimize Pokemon Go validation (#11840)
---
sim/team-validator.ts | 66 ++++++++++++++++++++++++-------------------
1 file changed, 37 insertions(+), 29 deletions(-)
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index 90befa2195..07953271da 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -112,6 +112,11 @@ export class PokemonSources {
* Used to deal with compatibility issues for prevo/evo-exclusive moves
*/
learnsetDomain?: string[] | null;
+ /**
+ * A list of moves which are incompatible with a Pokemon GO origin,
+ * used to generate error messages
+ */
+ goIncompatibleMoves?: string[];
/**
* Some Pokemon evolve by having a move in their learnset (like Piloswine
* with Ancient Power). These can only carry three other moves from their
@@ -311,6 +316,16 @@ export class PokemonSources {
this.dreamWorldMoveCount += other.dreamWorldMoveCount;
if (other.sourcesAfter > this.sourcesAfter) this.sourcesAfter = other.sourcesAfter;
if (other.isHidden) this.isHidden = true;
+
+ if (other.sourcesBefore < 8 && !other.sources.some(source => source === '8V') && this.restrictiveMoves) {
+ this.addGoIncompatibleMove(this.restrictiveMoves[this.restrictiveMoves.length - 1]);
+ }
+ }
+
+ addGoIncompatibleMove(move: string) {
+ if (!this.goIncompatibleMoves) this.goIncompatibleMoves = [];
+ if (move) this.goIncompatibleMoves.push(move);
+ this.isFromPokemonGo = false;
}
}
@@ -854,6 +869,16 @@ export class TeamValidator {
if (ruleTable.has('obtainablemoves')) {
moveProblems = this.validateMoves(outOfBattleSpecies, set.moves, setSources, set, name, moveLegalityWhitelist);
problems.push(...moveProblems);
+
+ const incompatibleMoves = setSources.goIncompatibleMoves;
+ if (pokemonGoProblems && incompatibleMoves) {
+ if (incompatibleMoves?.length) {
+ pokemonGoProblems.push(`${name}'s move${incompatibleMoves.length === 1 ? `` : `s`} ${incompatibleMoves.join(`, `)} ` +
+ `${incompatibleMoves.length === 1 ? `is` : `are`} incompatible with a Pokemon GO origin.`);
+ } else {
+ pokemonGoProblems.push(`${name} has moves which are incompatible with a Pokemon GO origin.`);
+ }
+ }
}
let eventOnlyData;
@@ -1005,7 +1030,6 @@ export class TeamValidator {
// Hardcoded forced validation for Pokemon GO
const pokemonGoOnlySpecies = ['meltan', 'melmetal', 'gimmighoulroaming'];
if (ruleTable.has('obtainablemisc') && (pokemonGoOnlySpecies.includes(species.id))) {
- setSources.isFromPokemonGo = true;
if (pokemonGoProblems?.length) {
problems.push(`${name} is only obtainable from Pokemon GO, and failed to validate because:`);
for (const pokemonGoProblem of pokemonGoProblems) {
@@ -1014,17 +1038,6 @@ export class TeamValidator {
}
}
- // Attempt move validation again after verifying Pokemon GO origin
- if (ruleTable.has('obtainablemoves') && setSources.isFromPokemonGo) {
- setSources.restrictiveMoves = [];
- setSources.sources = ['8V'];
- setSources.sourcesBefore = 0;
- if (moveProblems && !moveProblems.length) {
- problems.push(...this.validateMoves(outOfBattleSpecies, set.moves, setSources, set, name,
- moveLegalityWhitelist));
- }
- }
-
if (ruleTable.has('obtainablemoves')) {
if (species.id === 'keldeo' && set.moves.includes('secretsword') && this.minSourceGen > 5 && dex.gen <= 7) {
problems.push(`${name} has Secret Sword, which is only compatible with Keldeo-Ordinary obtained from Gen 5.`);
@@ -2359,9 +2372,11 @@ export class TeamValidator {
if (otherProblems) {
problems = otherProblems;
} else {
+ setSources.isFromPokemonGo = false;
return null;
}
} else {
+ setSources.isFromPokemonGo = false;
return null;
}
} else {
@@ -2655,8 +2670,7 @@ export class TeamValidator {
} else if (this.ruleTable.has('pomegglitchclause') && level >= 5 && learnedGen === 3 && species.canHatch) {
// Pomeg Glitch
learned = `${learnedGen}Epomeg` as MoveSource;
- } else if (species.gender !== 'N' &&
- learnedGen >= 2 && species.canHatch && !setSources.isFromPokemonGo) {
+ } else if (species.gender !== 'N' && learnedGen >= 2 && species.canHatch) {
// available as egg move
if (species.gender === 'M' && !this.motherCanLearn(toID(species.mother), moveid)) {
// male-only Pokemon can have level-up egg moves if it can have a mother that learns the move
@@ -2678,10 +2692,8 @@ export class TeamValidator {
if (learnedGen === dex.gen && learned.charAt(1) !== 'R') {
// current-gen level-up, TM or tutor moves:
// always available
- if (!(learnedGen >= 8 && learned.charAt(1) === 'E') && babyOnly &&
- setSources.isFromPokemonGo && species.evoLevel) {
- cantLearnReason = `is from a prevo, which is incompatible with its Pokemon GO origin.`;
- continue;
+ if (!(learnedGen >= 8 && learned.charAt(1) === 'E') && babyOnly && species.evoLevel) {
+ setSources.addGoIncompatibleMove(move.name);
}
if (!moveSources.moveEvoCarryCount && !babyOnly) return null;
}
@@ -2740,9 +2752,8 @@ export class TeamValidator {
} else if (learned.charAt(1) === 'V' && this.minSourceGen < learnedGen) {
// Virtual Console or Let's Go transfer moves:
// only if that was the source
- if (learned === '8V' && setSources.isFromPokemonGo && babyOnly && species.evoLevel) {
- cantLearnReason = `is from a prevo, which is incompatible with its Pokemon GO origin.`;
- continue;
+ if (learned === '8V' && babyOnly && species.evoLevel) {
+ setSources.addGoIncompatibleMove(move.name);
}
moveSources.add(learned);
}
@@ -2822,8 +2833,7 @@ export class TeamValidator {
}
const checkedSpecies = babyOnly ? fullLearnset[fullLearnset.length - 1].species : baseSpecies;
- if (checkedSpecies && setSources.isFromPokemonGo &&
- (setSources.pokemonGoSource === 'purified' || checkedSpecies.id === 'mew')) {
+ if (checkedSpecies && (setSources.pokemonGoSource === 'purified' || checkedSpecies.id === 'mew')) {
// Pokemon that cannot be sent from Pokemon GO to Let's Go can only access Let's Go moves through HOME
// It can only obtain a chain of four level up moves and cannot have TM moves
const pokemonGoData = dex.species.getPokemonGoData(checkedSpecies.id);
@@ -2836,10 +2846,8 @@ export class TeamValidator {
for (const restrictiveMove in pokemonGoData.LGPERestrictiveMoves) {
const moveLevel = pokemonGoData.LGPERestrictiveMoves[restrictiveMove];
if (toID(move) === restrictiveMove) {
- if (!moveLevel) {
- return `'s move ${move.name} is incompatible with its Pokemon GO origin.`;
- } else if (set.level && set.level < moveLevel) {
- return ` must be at least level ${moveLevel} to learn ${move.name} due to its Pokemon GO origin.`;
+ if (!moveLevel || (set.level && set.level < moveLevel)) {
+ setSources.addGoIncompatibleMove(move.name);
}
}
if (levelUpMoveCount) levelUpMoveCount++;
@@ -2847,7 +2855,8 @@ export class TeamValidator {
if (!levelUpMoveCount) {
levelUpMoveCount++;
} else if (levelUpMoveCount > 4) {
- return `'s moves ${(setSources.restrictiveMoves || []).join(', ')} are incompatible with its Pokemon GO origin.`;
+ // Moves which are only incompatible when together
+ setSources.addGoIncompatibleMove('');
}
}
}
@@ -2901,7 +2910,6 @@ export class TeamValidator {
// prevents a crash if OMs override `checkCanLearn` to keep validating after an error
setSources.sources = backupSources;
setSources.sourcesBefore = backupSourcesBefore;
- if (setSources.isFromPokemonGo) return `'s move ${move.name} is incompatible with its Pokemon GO origin.`;
return `'s moves ${(setSources.restrictiveMoves || []).join(', ')} are incompatible.`;
}
From 91628f0b68f7f7fc4ad02614ab29cc6d66c578d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 25 Mar 2026 03:08:02 +0000
Subject: [PATCH 163/233] Implement Meganium, Emboar and Feraligatr Mega
abilities (#11852)
* Implement Meganium, Emboar and Feraligatr mega abilities
* Check for activePokemon
* Update comment to reflect Utility Umbrella
---
data/abilities.ts | 28 ++++++++++++++++++++++++++++
data/mods/gen9legendsou/pokedex.ts | 24 ------------------------
data/pokedex.ts | 6 +++---
sim/pokemon.ts | 1 +
4 files changed, 32 insertions(+), 27 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index c54de73b98..c2f553ff4b 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -1033,6 +1033,27 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 3.5,
num: 88,
},
+ dragonize: {
+ onModifyTypePriority: -1,
+ onModifyType(move, pokemon) {
+ const noModifyType = [
+ 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
+ ];
+ if (move.type === 'Normal' && (!noModifyType.includes(move.id) || this.activeMove?.isMax) &&
+ !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {
+ move.type = 'Dragon';
+ move.typeChangerBoosted = this.effect;
+ }
+ },
+ onBasePowerPriority: 23,
+ onBasePower(basePower, pokemon, target, move) {
+ if (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);
+ },
+ flags: {},
+ name: "Dragonize",
+ rating: 4,
+ num: 312, // TODO confirm
+ },
dragonsmaw: {
onModifyAtkPriority: 5,
onModifyAtk(atk, attacker, defender, move) {
@@ -2497,6 +2518,13 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 3,
num: 178,
},
+ megasol: {
+ flags: {},
+ name: "Mega Sol",
+ rating: 3,
+ num: 311, // TODO confirm
+ // Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts
+ },
merciless: {
onModifyCritRatio(critRatio, source, target) {
if (target && ['psn', 'tox'].includes(target.status)) return 5;
diff --git a/data/mods/gen9legendsou/pokedex.ts b/data/mods/gen9legendsou/pokedex.ts
index 398847927c..8d8a5d0894 100644
--- a/data/mods/gen9legendsou/pokedex.ts
+++ b/data/mods/gen9legendsou/pokedex.ts
@@ -24,14 +24,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Sheer Force" },
},
- meganiummega: {
- inherit: true,
- abilities: { 0: "Flower Veil" },
- },
- feraligatrmega: {
- inherit: true,
- abilities: { 0: "Dragon's Maw" },
- },
ampharosmega: {
inherit: true,
abilities: { 0: "Fluffy" },
@@ -84,10 +76,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Dark Aura" },
},
- emboarmega: {
- inherit: true,
- abilities: { 0: "Supreme Overlord" },
- },
excadrillmega: {
inherit: true,
abilities: { 0: "Sand Rush" },
@@ -116,18 +104,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Magic Guard" },
},
- chesnaughtmega: {
- inherit: true,
- abilities: { 0: "Grassy Surge" },
- },
- delphoxmega: {
- inherit: true,
- abilities: { 0: "Levitate" },
- },
- greninjamega: {
- inherit: true,
- abilities: { 0: "Protean" },
- },
meowsticmmega: {
inherit: true,
abilities: { 0: "Psychic Surge" },
diff --git a/data/pokedex.ts b/data/pokedex.ts
index 27ac63c823..66b4aa6afc 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -3470,7 +3470,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Grass", "Fairy"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 80, atk: 92, def: 115, spa: 143, spd: 115, spe: 80 },
- abilities: { 0: "Overgrow", H: "Leaf Guard" },
+ abilities: { 0: "Mega Sol" },
heightm: 2.4,
weightkg: 201,
color: "Green",
@@ -3590,7 +3590,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Water", "Dragon"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 85, atk: 160, def: 125, spa: 89, spd: 93, spe: 78 },
- abilities: { 0: "Torrent", H: "Sheer Force" },
+ abilities: { 0: "Dragonize" },
heightm: 2.3,
weightkg: 108.8,
color: "Blue",
@@ -9484,7 +9484,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Fire", "Fighting"],
genderRatio: { M: 0.875, F: 0.125 },
baseStats: { hp: 110, atk: 148, def: 75, spa: 110, spd: 110, spe: 75 },
- abilities: { 0: "Blaze", H: "Reckless" },
+ abilities: { 0: "Mold Breaker" },
heightm: 1.8,
weightkg: 180.3,
color: "Red",
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 4fc69bea34..66aaa63477 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -2177,6 +2177,7 @@ export class Pokemon {
case 'primordialsea':
if (this.hasItem('utilityumbrella')) return '';
}
+ if (this.hasAbility('megasol') && this.battle.activePokemon === this) return 'sunnyday';
return weather;
}
From 7d769eaaf727d47ceefcdfad9d6e4a86fd911837 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Tue, 24 Mar 2026 21:20:47 -0600
Subject: [PATCH 164/233] Disallow Dragonize/Mega Sol in formats `!Obtainable
Abilities` without `+Future`
---
data/abilities.ts | 2 ++
data/mods/gen9legendsou/abilities.ts | 10 ++++++++++
data/mods/mixandmega/scripts.ts | 2 ++
3 files changed, 14 insertions(+)
create mode 100644 data/mods/gen9legendsou/abilities.ts
diff --git a/data/abilities.ts b/data/abilities.ts
index c2f553ff4b..2ca4dd0f42 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -1034,6 +1034,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
num: 88,
},
dragonize: {
+ isNonstandard: "Future",
onModifyTypePriority: -1,
onModifyType(move, pokemon) {
const noModifyType = [
@@ -2519,6 +2520,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
num: 178,
},
megasol: {
+ isNonstandard: "Future",
flags: {},
name: "Mega Sol",
rating: 3,
diff --git a/data/mods/gen9legendsou/abilities.ts b/data/mods/gen9legendsou/abilities.ts
new file mode 100644
index 0000000000..69612df64f
--- /dev/null
+++ b/data/mods/gen9legendsou/abilities.ts
@@ -0,0 +1,10 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ dragonize: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ megasol: {
+ inherit: true,
+ isNonstandard: null,
+ },
+};
diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts
index 312f9bba8d..087f070a0f 100644
--- a/data/mods/mixandmega/scripts.ts
+++ b/data/mods/mixandmega/scripts.ts
@@ -1,6 +1,8 @@
export const Scripts: ModdedBattleScriptsData = {
gen: 9,
init() {
+ this.modData('Abilities', 'dragonize').isNonstandard = null;
+ this.modData('Abilities', 'megasol').isNonstandard = null;
for (const i in this.data.Items) {
const item = this.data.Items[i];
if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue;
From ae608f5fcf6d72d0da7251582f7b0383a6d28b70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Fri, 27 Mar 2026 22:40:55 +0000
Subject: [PATCH 165/233] Fix Order Up's interaction with Sheer Force (#10891)
---
data/abilities.ts | 4 ++--
data/mods/chatbats/moves.ts | 2 +-
data/mods/gen9predlc/moves.ts | 2 +-
data/mods/gen9ssb/moves.ts | 2 +-
data/moves.ts | 4 ++--
data/random-battles/gen7/teams.ts | 2 +-
data/random-battles/gen9/teams.ts | 2 +-
server/chat-commands/info.ts | 4 +++-
server/chat-plugins/datasearch.ts | 2 +-
server/chat-plugins/randombattles/ssb.tsx | 4 +++-
sim/dex-moves.ts | 13 ++++++++-----
test/sim/moves/orderup.js | 2 +-
12 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 2ca4dd0f42..57f6069350 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -4145,7 +4145,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
sheerforce: {
onModifyMove(move, pokemon) {
- if (move.secondaries) {
+ if (move.secondaries && !move.hasSheerForceBoost) {
delete move.secondaries;
// Technically not a secondary effect, but it is negated
delete move.self;
@@ -4156,7 +4156,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
onBasePowerPriority: 21,
onBasePower(basePower, pokemon, target, move) {
- if (move.hasSheerForce) return this.chainModify([5325, 4096]);
+ if (move.hasSheerForce || move.hasSheerForceBoost) return this.chainModify([5325, 4096]);
},
flags: {},
name: "Sheer Force",
diff --git a/data/mods/chatbats/moves.ts b/data/mods/chatbats/moves.ts
index 4dafec9af8..5a09a1c96f 100644
--- a/data/mods/chatbats/moves.ts
+++ b/data/mods/chatbats/moves.ts
@@ -575,7 +575,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
source.switchFlag = true;
},
- hasSheerForce: true,
+ hasSheerForceBoost: true,
target: "normal",
type: "Dragon",
desc: "Dondozo eats a mon on the user's team, KOing it. Dondozo then gains a stat boost depending on the eaten mon's highest stat: +3 Attack for Atk/SpA, +2 Def/+2 SpD for Def/SpD, and +3 Speed for Speed.",
diff --git a/data/mods/gen9predlc/moves.ts b/data/mods/gen9predlc/moves.ts
index 1af9032814..6c66c3f344 100644
--- a/data/mods/gen9predlc/moves.ts
+++ b/data/mods/gen9predlc/moves.ts
@@ -37,7 +37,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
jetpunch: {
inherit: true,
- hasSheerForce: true,
+ hasSheerForceBoost: true,
},
matchagotcha: {
inherit: true,
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index 1e281fd515..22bb504ca9 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -3455,7 +3455,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- hasSheerForce: true,
+ hasSheerForceBoost: true,
onPrepareHit(target, source) {
this.attrLastMove('[still]');
this.add('-anim', source, 'Lunar Dance', target);
diff --git a/data/moves.ts b/data/moves.ts
index e4eea5f69c..b09213c5b8 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -4664,7 +4664,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
attacker.addVolatile('twoturnmove', defender);
return null;
},
- hasSheerForce: true,
+ hasSheerForceBoost: true,
target: "normal",
type: "Electric",
},
@@ -13097,7 +13097,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
break;
}
},
- hasSheerForce: true,
+ hasSheerForceBoost: true,
target: "normal",
type: "Dragon",
},
diff --git a/data/random-battles/gen7/teams.ts b/data/random-battles/gen7/teams.ts
index e54572d390..e971a977d8 100644
--- a/data/random-battles/gen7/teams.ts
+++ b/data/random-battles/gen7/teams.ts
@@ -199,7 +199,7 @@ export class RandomGen7Teams extends RandomGen8Teams {
if (move.priority > 0) counter.add('priority');
}
// Moves with secondary effects:
- if (move.secondary || move.hasSheerForce) {
+ if (move.secondary || move.hasSheerForceBoost) {
counter.add('sheerforce');
if (sereneGraceBenefits(move)) {
counter.add('serenegrace');
diff --git a/data/random-battles/gen9/teams.ts b/data/random-battles/gen9/teams.ts
index 266f9b65ec..40f8986395 100644
--- a/data/random-battles/gen9/teams.ts
+++ b/data/random-battles/gen9/teams.ts
@@ -433,7 +433,7 @@ export class RandomTeams {
}
}
// Moves with secondary effects:
- if (move.secondary || move.hasSheerForce) {
+ if (move.secondary || move.hasSheerForceBoost) {
counter.add('sheerforce');
if (sereneGraceBenefits(move)) {
counter.add('serenegrace');
diff --git a/server/chat-commands/info.ts b/server/chat-commands/info.ts
index 926174b18c..ffd8857c29 100644
--- a/server/chat-commands/info.ts
+++ b/server/chat-commands/info.ts
@@ -754,7 +754,9 @@ export const commands: Chat.ChatCommands = {
const pastGensOnly = (move.isNonstandard === "Past" && dex.gen >= 8) ||
(move.isNonstandard === "Gigantamax" && dex.gen !== 8);
if (pastGensOnly) details["✗ Past Gens Only"] = "";
- if (move.secondary || move.secondaries || move.hasSheerForce) details["✓ Boosted by Sheer Force"] = "";
+ if (move.secondary || move.secondaries || move.hasSheerForceBoost) {
+ details["✓ Boosted by Sheer Force"] = "";
+ }
if (move.flags['contact'] && dex.gen >= 3) details["✓ Contact"] = "";
if (move.flags['sound'] && dex.gen >= 3) details["✓ Sound"] = "";
if (move.flags['bullet'] && dex.gen >= 6) details["✓ Bullet"] = "";
diff --git a/server/chat-plugins/datasearch.ts b/server/chat-plugins/datasearch.ts
index 2526285def..140ef725c5 100644
--- a/server/chat-plugins/datasearch.ts
+++ b/server/chat-plugins/datasearch.ts
@@ -2118,7 +2118,7 @@ function runMovesearch(target: string, cmd: string, message: string, isTest: boo
for (const flag in alts.flags) {
if (flag === 'secondary') {
- if (!(move.secondary || move.secondaries || move.hasSheerForce) === !alts.flags[flag]) {
+ if (!(move.secondary || move.secondaries || move.hasSheerForceBoost) === !alts.flags[flag]) {
matched = true;
break;
}
diff --git a/server/chat-plugins/randombattles/ssb.tsx b/server/chat-plugins/randombattles/ssb.tsx
index 10d2f329d3..ec309d5177 100644
--- a/server/chat-plugins/randombattles/ssb.tsx
+++ b/server/chat-plugins/randombattles/ssb.tsx
@@ -52,7 +52,9 @@ class SSBMoveHTML extends Chat.JSX.Component<{ sigMove: Move, dex: ModdedDex }>
};
if (sigMove.isNonstandard === "Past" && dex.gen >= 8) details["Past Gens Only"] = "x";
- if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForce) details["Boosted by Sheer Force"] = "";
+ if (sigMove.secondary || sigMove.secondaries || sigMove.hasSheerForceBoost) {
+ details["Boosted by Sheer Force"] = "";
+ }
if (sigMove.flags['contact'] && dex.gen >= 3) details["Contact"] = "";
if (sigMove.flags['sound'] && dex.gen >= 3) details["Sound"] = "";
if (sigMove.flags['bullet'] && dex.gen >= 6) details["Bullet"] = "";
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index 438d7c4901..e32d7e56c6 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -210,7 +210,10 @@ export interface MoveData extends EffectData, MoveEventMethods, HitEffect {
secondary?: SecondaryEffect;
secondaries?: SecondaryEffect[];
self?: SecondaryEffect;
- hasSheerForce?: boolean;
+ /**
+ * Boosted by Sheer Force without suppressing secondary effects.
+ */
+ hasSheerForceBoost?: boolean;
// Hit effect modifiers
// --------------------
@@ -384,10 +387,10 @@ export class DataMove extends BasicEffect implements Readonly {
battle.destroy();
});
- it.skip(`should boost Dondozo's stat even if Sheer Force-boosted`, () => {
+ it(`should boost Dondozo's stat even if Sheer Force-boosted`, () => {
battle = common.createBattle({ gameType: 'doubles' }, [[
{ species: 'wynaut', moves: ['sleeptalk'] },
{ species: 'mew', ability: 'shellarmor', moves: ['sleeptalk'] },
From 7cc114ad4cc728f48ee3134a97871948a427df77 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Sun, 29 Mar 2026 15:42:49 -0400
Subject: [PATCH 166/233] Add Abilities to Mega Dragonite and Froslass (#11866)
---
data/mods/gen9legendsou/pokedex.ts | 8 --------
data/pokedex.ts | 4 ++--
2 files changed, 2 insertions(+), 10 deletions(-)
diff --git a/data/mods/gen9legendsou/pokedex.ts b/data/mods/gen9legendsou/pokedex.ts
index 8d8a5d0894..e746555e29 100644
--- a/data/mods/gen9legendsou/pokedex.ts
+++ b/data/mods/gen9legendsou/pokedex.ts
@@ -20,10 +20,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 },
abilities: { 0: "Pure Power" },
},
- dragonitemega: {
- inherit: true,
- abilities: { 0: "Sheer Force" },
- },
ampharosmega: {
inherit: true,
abilities: { 0: "Fluffy" },
@@ -56,10 +52,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Sharpness" },
},
- froslassmega: {
- inherit: true,
- abilities: { 0: "Snow Warning" },
- },
garchompmegaz: {
inherit: true,
abilities: { 0: "Rough Skin" },
diff --git a/data/pokedex.ts b/data/pokedex.ts
index 66b4aa6afc..831969ee26 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -3352,7 +3352,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Dragon", "Flying"],
baseStats: { hp: 91, atk: 124, def: 115, spa: 145, spd: 125, spe: 100 },
- abilities: { 0: "Inner Focus", H: "Multiscale" },
+ abilities: { 0: "Multiscale" },
heightm: 2.2,
weightkg: 290,
color: "Brown",
@@ -8708,7 +8708,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Ice", "Ghost"],
gender: "F",
baseStats: { hp: 70, atk: 80, def: 70, spa: 140, spd: 100, spe: 120 },
- abilities: { 0: "Snow Cloak", H: "Cursed Body" },
+ abilities: { 0: "Snow Warning" },
heightm: 2.6,
weightkg: 29.6,
color: "White",
From 7ae9bc6d4cb17fd4dd5fa160aa62e7f28b1a14cb Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Tue, 31 Mar 2026 20:34:54 -0400
Subject: [PATCH 167/233] Descriptions: Add Dragonize and Mega Sol (#11867)
---
data/text/abilities.ts | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/data/text/abilities.ts b/data/text/abilities.ts
index 49a91d02da..3348e5229b 100644
--- a/data/text/abilities.ts
+++ b/data/text/abilities.ts
@@ -379,6 +379,11 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = {
desc: "On switch-in, this Pokemon's Attack or Special Attack is raised by 1 stage based on the weaker combined defensive stat of all opposing Pokemon. Attack is raised if their Defense is lower, and Special Attack is raised if their Special Defense is the same or lower.",
shortDesc: "On switch-in, Attack or Sp. Atk is raised 1 stage based on the foes' weaker Defense.",
},
+ dragonize: {
+ name: "Dragonize",
+ desc: "This Pokemon's Normal-type moves become Dragon-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
+ shortDesc: "This Pokemon's Normal-type moves become Dragon type and have 1.2x power.",
+ },
dragonsmaw: {
name: "Dragon's Maw",
shortDesc: "This Pokemon's offensive stat is multiplied by 1.5 while using a Dragon-type attack.",
@@ -980,6 +985,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = {
desc: "This Pokemon's pulse moves have their power multiplied by 1.5. Heal Pulse restores 3/4 of a target's maximum HP, rounded half down.",
shortDesc: "This Pokemon's pulse moves have 1.5x power. Heal Pulse heals 3/4 target's max HP.",
},
+ megasol: {
+ name: "Mega Sol",
+ shortDesc: "This Pokemon's moves are used as if the effects of Sunny Day were active.",
+ },
merciless: {
name: "Merciless",
shortDesc: "This Pokemon's attacks are critical hits if the target is poisoned.",
From 441e6677d3a86e434ea8d33a47e21c6f09a2c952 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:14:10 -0600
Subject: [PATCH 168/233] Add April 2026 rotational ladders
---
config/formats.ts | 572 +++++++++++++++++++++-------------------------
data/aliases.ts | 8 +-
2 files changed, 266 insertions(+), 314 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index b2fb884b51..a75c0c0d64 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -313,6 +313,21 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Zekrom', 'Commander', 'Moody', 'Focus Sash', 'King\'s Rock', 'Razor Fang', 'Ally Switch', 'Final Gambit', 'Perish Song', 'Swagger',
],
},
+ {
+ name: "[Gen 9] 4v4 Doubles UU",
+ desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.",
+ mod: 'gen9',
+ gameType: 'doubles',
+ searchShow: false,
+ bestOfDefault: true,
+ ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'],
+ banlist: [
+ 'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane',
+ 'Gholdengo', 'Gouging Fire', 'Incineroar', 'Indeedee-F', 'Iron Crown', 'Landorus-Incarnate', 'Landorus-Therian', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring',
+ 'Porygon2', 'Raging Bolt', 'Regidrago', 'Rillaboom', 'Roaring Moon', 'Sneasler', 'Ting-Lu', 'Torkoal', 'Tornadus-Incarnate', 'Ursaluna-Base', 'Urshifu-Single-Strike',
+ 'Urshifu-Rapid-Strike', 'Whimsicott', 'Commander', 'Bright Powder', 'King\'s Rock', 'Razor Fang',
+ ],
+ },
{
name: "[Gen 9] Anything Goes",
mod: 'gen9',
@@ -508,141 +523,218 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 9] Linked",
- desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
- mod: 'linked',
- // searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'],
- banlist: [
- 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
- 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
- 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin',
- 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
- 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody',
- 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Quick Claw', 'Razor Fang',
- 'Baton Pass', 'Last Respects', 'Shed Tail',
- ],
- restricted: [
- 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
- 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
- ],
- onValidateSet(set) {
- const problems = [];
- for (const [i, moveid] of set.moves.entries()) {
- const move = this.dex.moves.get(moveid);
- if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
- problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
- }
- }
- return problems;
- },
- },
- {
- name: "[Gen 9] 350 Cup",
- desc: `Pokemon with a BST of 350 or lower have their stats doubled.`,
+ name: "[Gen 9] Alphabet Cup",
+ desc: `Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.`,
mod: 'gen9',
// searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'],
- banlist: ['Calyrex-Shadow', 'Clefairy', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Smeargle', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
- },
- {
- name: "[Gen 9] Pokebilities AAA",
- desc: `Pokémon have all of their released abilities simultaneously, as well as one ability they cannot normally use.`,
- mod: 'pokebilities',
- // searchShow: false,
- ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
+ ruleset: ['Standard OMs', 'Alphabet Cup Move Legality', 'Sleep Moves Clause', 'Terastal Clause'],
banlist: [
- 'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
- 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite',
- 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', 'Hawlucha',
- 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
- 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin',
- 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon',
- 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap',
- 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Shadow Tag',
- 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll',
- 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive',
- 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush',
- 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
+ 'Annihilape', 'Arceus', 'Baxcalibur', 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
+ 'Dragapult', 'Dragonite', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon',
+ 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mamoswine', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
+ 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Sceptile', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna',
+ 'Urshifu-Single-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'Heat Rock',
+ 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Orichalcum Pulse',
- 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden',
- 'Water Bubble', 'Wonder Guard',
+ 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Glacial Lance', 'Glare', 'Lumina Crash', 'Rage Fist', 'Revival Blessing',
+ 'Sacred Fire', 'Salt Cure', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Triple Arrows',
],
- onValidateSet(set) {
+ },
+ {
+ name: "[Gen 9] Cross Evolution",
+ desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and moves from the next stage Pokémon.`,
+ mod: 'gen9',
+ // searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'],
+ banlist: [
+ 'Basculin-White-Striped', 'Duraludon', 'Kyogre', 'Miraidon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap',
+ 'Huge Power', 'Pure Power', 'Shadow Tag', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail',
+ ],
+ restricted: ['Espathra', 'Frosmoth', 'Gallade', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'],
+ onValidateTeam(team) {
+ const nums = new Set();
+ for (const set of team) {
+ const name = set.name;
+ const species = this.dex.species.get(name);
+ if (nums.has(species.num)) {
+ return [
+ `Your Pok\u00e9mon must have different nicknames.`,
+ `(You have more than one Pok\u00e9mon named after a form of '${species.name}')`,
+ ];
+ }
+ if (species.exists && species.name !== set.species) nums.add(species.num);
+ }
+ if (!nums.size) {
+ return [
+ `${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
+ `(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
+ ];
+ }
+ },
+ checkCanLearn(move, species, lsetData, set) {
+ if (!(set as any).sp?.exists || !(set as any).crossSpecies?.exists) {
+ return this.checkCanLearn(move, species, lsetData, set);
+ }
+ const problem = this.checkCanLearn(move, (set as any).sp);
+ if (!problem) return null;
+ if (this.checkCanLearn(move, (set as any).crossSpecies)) return problem;
+ return null;
+ },
+ validateSet(set, teamHas) {
+ const crossSpecies = this.dex.species.get(set.name);
+ let problems = this.dex.formats.get('Obtainable Misc').onChangeSet?.call(this, set, this.format) || null;
+ if (Array.isArray(problems) && problems.length) return problems;
+ const crossNonstandard = (!this.ruleTable.has('natdexmod') && crossSpecies.isNonstandard === 'Past') ||
+ crossSpecies.isNonstandard === 'Future';
+ const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
+ if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas);
const species = this.dex.species.get(set.species);
- const unSeenAbilities = Object.keys(species.abilities)
- .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
- .map(key => species.abilities[key as "0" | "1" | "H" | "S"])
- .filter(ability => ability !== set.ability);
- if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
- for (const abilityName of unSeenAbilities) {
- const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
- if (banReason) {
- return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
- }
+ const check = this.checkSpecies(set, species, species, {});
+ if (check) return [check];
+ const nonstandard = !this.ruleTable.has('natdexmod') && species.isNonstandard === 'Past';
+ const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
+ if (!species.exists || nonstandard || isCap || species === crossSpecies) return this.validateSet(set, teamHas);
+ if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`];
+ const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" &&
+ !this.ruleTable.has('+unobtainable'));
+ if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
+ return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
+ }
+ if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
+ return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
+ }
+ const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
+ if (!crossPrevoSpecies.prevo !== !species.prevo) {
+ return [
+ `${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
+ ];
+ }
+ const item = this.dex.items.get(set.item);
+ if (item.itemUser?.length) {
+ if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) {
+ return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
}
}
+ const ability = this.dex.abilities.get(set.ability);
+ if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
+ set.species = crossSpecies.name;
+ }
+
+ (set as any).sp = species;
+ (set as any).crossSpecies = crossSpecies;
+ problems = this.validateSet(set, teamHas);
+ set.name = crossSpecies.name;
+ set.species = species.name;
+ return problems;
+ },
+ onModifySpecies(species, target, source, effect) {
+ if (!target) return; // chat
+ if (effect && ['imposter', 'transform'].includes(effect.id)) return;
+ if (target.set.name === target.set.species) return;
+ const crossSpecies = this.dex.species.get(target.set.name);
+ if (!crossSpecies.exists) return;
+ if (species.battleOnly || !species.nfe) return;
+ const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" &&
+ !this.ruleTable.has('+unobtainable'));
+ if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return;
+ const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
+ if (!crossPrevoSpecies.prevo !== !species.prevo) return;
+
+ const mixedSpecies = this.dex.deepClone(species);
+ mixedSpecies.weightkg =
+ Math.max(0.1, species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg).toFixed(1);
+ mixedSpecies.nfe = false;
+ mixedSpecies.evos = [];
+ mixedSpecies.eggGroups = crossSpecies.eggGroups;
+ mixedSpecies.abilities = crossSpecies.abilities;
+ mixedSpecies.bst = 0;
+ let i: StatID;
+ for (i in species.baseStats) {
+ const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
+ mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
+ mixedSpecies.bst += mixedSpecies.baseStats[i];
+ }
+ if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];
+ if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
+ mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
+ }
+ if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];
+
+ return mixedSpecies;
},
onBegin() {
for (const pokemon of this.getAllPokemon()) {
- if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
- continue;
- }
- pokemon.m.innates = Object.keys(pokemon.species.abilities)
- .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
- .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
- .filter(ability => ability !== pokemon.ability);
+ pokemon.baseSpecies = pokemon.species;
}
},
- onBeforeSwitchIn(pokemon) {
- if (pokemon.m.innates) {
- for (const innate of pokemon.m.innates) {
- if (pokemon.hasAbility(innate)) continue;
- const effect = 'ability:' + this.toID(innate);
- pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon });
- }
- }
- },
- onSwitchOut(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- pokemon.removeVolatile(innate);
- }
- },
- onFaint(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- const innateEffect = this.dex.conditions.get(innate) as Effect;
- this.singleEvent('End', innateEffect, null, pokemon);
- }
- },
- onAfterMega(pokemon) {
- for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
- pokemon.removeVolatile(innate);
- }
- pokemon.m.innates = undefined;
- },
},
{
- name: "[Gen 9] 4v4 Doubles UU",
- desc: "VGC rules, but only Pokémon that get less than 4.52% usage on the VGC ladder are legal, as well as a few other guidelines.",
+ name: "STAAABmons",
+ desc: `Pokémon have access to almost any ability and can use any move of their typing, in addition to the moves they can normally learn.`,
mod: 'gen9',
- gameType: 'doubles',
- bestOfDefault: true,
- ruleset: ['[Gen 9] VGC 2026 Reg F', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'OHKO Clause'],
+ ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'],
banlist: [
- 'Amoonguss', 'Annihilape', 'Arcanine-Hisui', 'Basculegion-M', 'Chi-Yu', 'Chien-Pao', 'Cresselia', 'Dondozo', 'Dragonite', 'Enamorus-Incarnate', 'Farigiraf', 'Flutter Mane',
- 'Gholdengo', 'Gouging Fire', 'Incineroar', 'Indeedee-F', 'Iron Crown', 'Landorus-Incarnate', 'Landorus-Therian', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring',
- 'Porygon2', 'Raging Bolt', 'Regidrago', 'Rillaboom', 'Roaring Moon', 'Sneasler', 'Ting-Lu', 'Torkoal', 'Tornadus-Incarnate', 'Ursaluna-Base', 'Urshifu-Single-Strike',
- 'Urshifu-Rapid-Strike', 'Whimsicott', 'Commander', 'Bright Powder', 'King\'s Rock', 'Razor Fang',
+ 'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Ceruledge', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite',
+ 'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', 'Iron Bundle', 'Iron Moth', 'Iron Valiant',
+ 'Keldeo', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane',
+ 'Noivern', 'Ogerpon-Cornerstone', 'Ogerpon-Hearthflame', 'Ogerpon-Wellspring', 'Palkia', 'Palkia-Origin', 'Raging Bolt', 'Rayquaza', 'Regigigas', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky',
+ 'Slaking', 'Sneasler', 'Solgaleo', 'Spectrier', 'Thundurus', 'Thundurus-Therian', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake',
+ 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Ice Scales',
+ 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple',
+ 'Speed Boost', 'Stakeout', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ ],
+ restricted: [
+ 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Eruption', 'Esper Wing', 'Extreme Speed', 'Fillet Away',
+ 'Final Gambit', 'Gigaton Hammer', 'Glacial Lance', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Population Bomb', 'Rage Fist', 'Revival Blessing', 'Rising Voltage', 'Shell Smash',
+ 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Take Heart', 'Torch Song', 'Transform', 'Triple Arrows', 'V-create', 'Victory Dance', 'Water Spout', 'Wicked Blow', 'Wicked Torque',
],
},
{
- name: "[Gen 9] National Dex RU",
+ name: "[Gen 9] Monocolor",
+ desc: `All Pokémon on a team must share a color.`,
+ mod: 'gen9',
+ ruleset: ['[Gen 9] OU', 'Same Color Clause'],
+ banlist: ['Ogerpon-Wellspring'],
+ unbanlist: ['Archaludon', 'Volcarona'],
+ },
+ {
+ name: "[Gen 9] National Dex 35 Pokes",
+ desc: `Only 35 Pokémon are legal.`,
mod: 'gen9',
// searchShow: false,
- ruleset: ['[Gen 9] National Dex UU'],
- banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
+ ruleset: [
+ 'Standard NatDex',
+ '!Species Clause', 'Forme Clause', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
+ ],
+ banlist: [
+ 'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
+ 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw',
+ 'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
+ ],
+ unbanlist: [
+ 'Articuno-Base', 'Brute Bonnet', 'Cacturne', 'Clefable-Base', 'Cobalion', 'Drifblim', 'Dugtrio-Base', 'Gabite', 'Gogoat', 'Hariyama', 'Hippowdon', 'Krookodile',
+ 'Lurantis-Base', 'Lycanroc-Base', 'Mabosstiff', 'Minior', 'Munkidori', 'Passimian', 'Pawmot', 'Persian-Base', 'Raichu-Alola', 'Roserade', 'Rotom-Heat', 'Sandaconda',
+ 'Sceptile-Base', 'Stoutland', 'Stunfisk-Base', 'Tentacruel', 'Thwackey', 'Tinkaton', 'Toedscruel', 'Tsareena', 'Uxie', 'Vivillon', 'Whiscash',
+ 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
+ ],
+ // Stupid hardcode
+ onValidateSet(set, format, setHas, teamHas) {
+ if (set.item) {
+ const item = this.dex.items.get(set.item);
+ if (item.megaStone && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) {
+ return [`Mega Evolution is banned.`];
+ }
+ if (item.zMove && !(this.ruleTable.has(`+item:${item.id}`))) {
+ return [`${item.name} is banned.`];
+ }
+ }
+ const species = this.dex.species.get(set.species);
+ if (set.moves.map(x => this.toID(this.dex.moves.get(x).realMove) || x).includes('hiddenpower') &&
+ species.baseSpecies !== 'Unown' && !this.ruleTable.has(`+move:hiddenpower`)) {
+ return [`Hidden Power is banned.`];
+ }
+ },
},
{
name: "[Gen 6] Megas Revisited Random Battle",
@@ -678,18 +770,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 4] Ubers",
- mod: 'gen4',
+ name: "[Gen 5] Ubers",
+ mod: 'gen5',
// searchShow: false,
- ruleset: ['Standard'],
- banlist: ['AG'],
- },
- {
- name: "[Gen 6] NU",
- mod: 'gen6',
- // searchShow: false,
- ruleset: ['[Gen 6] RU'],
- banlist: ['RU', 'NUBL'],
+ ruleset: ['Standard', 'Sleep Clause Mod'],
},
{
name: "[Gen 4] VGC 2009",
@@ -960,23 +1044,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 9] Alphabet Cup",
- desc: `Allows Pokémon to use any move that shares the same first letter as their name or a previous evolution's name.`,
+ name: "[Gen 9] 350 Cup",
+ desc: `Pokemon with a BST of 350 or lower have their stats doubled.`,
mod: 'gen9',
searchShow: false,
- ruleset: ['Standard OMs', 'Alphabet Cup Move Legality', 'Sleep Moves Clause', 'Terastal Clause'],
- banlist: [
- 'Annihilape', 'Arceus', 'Baxcalibur', 'Blaziken', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
- 'Dragapult', 'Dragonite', 'Espathra', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Kingambit', 'Koraidon',
- 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Mamoswine', 'Meowscarada', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings',
- 'Necrozma-Dusk-Mane', 'Palafin', 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Sceptile', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna',
- 'Urshifu-Single-Strike', 'Weavile', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Moody', 'Shadow Tag', 'Damp Rock', 'Heat Rock',
- 'King\'s Rock', 'Light Clay', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
- ],
- restricted: [
- 'Belly Drum', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Extreme Speed', 'Fillet Away', 'Glacial Lance', 'Glare', 'Lumina Crash', 'Rage Fist', 'Revival Blessing',
- 'Sacred Fire', 'Salt Cure', 'Shell Smash', 'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Triple Arrows',
- ],
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', '350 Cup Mod', 'Evasion Clause'],
+ banlist: ['Calyrex-Shadow', 'Clefairy', 'Flittle', 'Gastly', 'Miraidon', 'Pikachu', 'Rufflet', 'Smeargle', 'Arena Trap', 'Moody', 'Shadow Tag', 'Eviolite', 'Baton Pass'],
},
{
name: "[Gen 9] Bad 'n Boosted",
@@ -1287,134 +1360,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Quiver Dance', 'Rage Fist', 'Shed Tail', 'Shell Smash', 'Spore', 'Transform',
],
},
- {
- name: "[Gen 9] Cross Evolution",
- desc: `Give a Pokémon a Pokémon name of the next evolution stage as a nickname to inherit stat changes, typing, abilities, and moves from the next stage Pokémon.`,
- mod: 'gen9',
- searchShow: false,
- ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Terastal Clause'],
- banlist: [
- 'Basculin-White-Striped', 'Duraludon', 'Kyogre', 'Miraidon', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Ursaring', 'Arena Trap',
- 'Huge Power', 'Pure Power', 'Shadow Tag', 'Moody', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Shed Tail',
- ],
- restricted: ['Espathra', 'Frosmoth', 'Gallade', 'Lilligant-Hisui', 'Lunala', 'Solgaleo'],
- onValidateTeam(team) {
- const nums = new Set();
- for (const set of team) {
- const name = set.name;
- const species = this.dex.species.get(name);
- if (nums.has(species.num)) {
- return [
- `Your Pok\u00e9mon must have different nicknames.`,
- `(You have more than one Pok\u00e9mon named after a form of '${species.name}')`,
- ];
- }
- if (species.exists && species.name !== set.species) nums.add(species.num);
- }
- if (!nums.size) {
- return [
- `${this.format.name} works using nicknames; your team has 0 nicknamed Pok\u00e9mon.`,
- `(If this was intentional, add a nickname to one Pok\u00e9mon that isn't the name of a Pok\u00e9mon species.)`,
- ];
- }
- },
- checkCanLearn(move, species, lsetData, set) {
- if (!(set as any).sp?.exists || !(set as any).crossSpecies?.exists) {
- return this.checkCanLearn(move, species, lsetData, set);
- }
- const problem = this.checkCanLearn(move, (set as any).sp);
- if (!problem) return null;
- if (this.checkCanLearn(move, (set as any).crossSpecies)) return problem;
- return null;
- },
- validateSet(set, teamHas) {
- const crossSpecies = this.dex.species.get(set.name);
- let problems = this.dex.formats.get('Obtainable Misc').onChangeSet?.call(this, set, this.format) || null;
- if (Array.isArray(problems) && problems.length) return problems;
- const crossNonstandard = (!this.ruleTable.has('natdexmod') && crossSpecies.isNonstandard === 'Past') ||
- crossSpecies.isNonstandard === 'Future';
- const crossIsCap = !this.ruleTable.has('+pokemontag:cap') && crossSpecies.isNonstandard === 'CAP';
- if (!crossSpecies.exists || crossNonstandard || crossIsCap) return this.validateSet(set, teamHas);
- const species = this.dex.species.get(set.species);
- const check = this.checkSpecies(set, species, species, {});
- if (check) return [check];
- const nonstandard = !this.ruleTable.has('natdexmod') && species.isNonstandard === 'Past';
- const isCap = !this.ruleTable.has('+pokemontag:cap') && species.isNonstandard === 'CAP';
- if (!species.exists || nonstandard || isCap || species === crossSpecies) return this.validateSet(set, teamHas);
- if (!species.nfe) return [`${species.name} cannot cross evolve because it doesn't evolve.`];
- const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" &&
- !this.ruleTable.has('+unobtainable'));
- if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) {
- return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it isn't an evolution.`];
- }
- if (this.ruleTable.isRestrictedSpecies(crossSpecies)) {
- return [`${species.name} cannot cross evolve into ${crossSpecies.name} because it is banned.`];
- }
- const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
- if (!crossPrevoSpecies.prevo !== !species.prevo) {
- return [
- `${species.name} cannot cross evolve into ${crossSpecies.name} because they are not consecutive evolution stages.`,
- ];
- }
- const item = this.dex.items.get(set.item);
- if (item.itemUser?.length) {
- if (!item.itemUser.includes(crossSpecies.name) || crossSpecies.name !== species.name) {
- return [`${species.name} cannot use ${item.name} because it is cross evolved into ${crossSpecies.name}.`];
- }
- }
- const ability = this.dex.abilities.get(set.ability);
- if (!this.ruleTable.isRestricted(`ability:${ability.id}`) || Object.values(species.abilities).includes(ability.name)) {
- set.species = crossSpecies.name;
- }
-
- (set as any).sp = species;
- (set as any).crossSpecies = crossSpecies;
- problems = this.validateSet(set, teamHas);
- set.name = crossSpecies.name;
- set.species = species.name;
- return problems;
- },
- onModifySpecies(species, target, source, effect) {
- if (!target) return; // chat
- if (effect && ['imposter', 'transform'].includes(effect.id)) return;
- if (target.set.name === target.set.species) return;
- const crossSpecies = this.dex.species.get(target.set.name);
- if (!crossSpecies.exists) return;
- if (species.battleOnly || !species.nfe) return;
- const crossIsUnreleased = (crossSpecies.tier === "Unreleased" && crossSpecies.isNonstandard === "Unobtainable" &&
- !this.ruleTable.has('+unobtainable'));
- if (crossSpecies.battleOnly || crossIsUnreleased || !crossSpecies.prevo) return;
- const crossPrevoSpecies = this.dex.species.get(crossSpecies.prevo);
- if (!crossPrevoSpecies.prevo !== !species.prevo) return;
-
- const mixedSpecies = this.dex.deepClone(species);
- mixedSpecies.weightkg =
- Math.max(0.1, species.weightkg + crossSpecies.weightkg - crossPrevoSpecies.weightkg).toFixed(1);
- mixedSpecies.nfe = false;
- mixedSpecies.evos = [];
- mixedSpecies.eggGroups = crossSpecies.eggGroups;
- mixedSpecies.abilities = crossSpecies.abilities;
- mixedSpecies.bst = 0;
- let i: StatID;
- for (i in species.baseStats) {
- const statChange = crossSpecies.baseStats[i] - crossPrevoSpecies.baseStats[i];
- mixedSpecies.baseStats[i] = this.clampIntRange(species.baseStats[i] + statChange, 1, 255);
- mixedSpecies.bst += mixedSpecies.baseStats[i];
- }
- if (crossSpecies.types[0] !== crossPrevoSpecies.types[0]) mixedSpecies.types[0] = crossSpecies.types[0];
- if (crossSpecies.types[1] !== crossPrevoSpecies.types[1]) {
- mixedSpecies.types[1] = crossSpecies.types[1] || crossSpecies.types[0];
- }
- if (mixedSpecies.types[0] === mixedSpecies.types[1]) mixedSpecies.types = [mixedSpecies.types[0]];
-
- return mixedSpecies;
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- pokemon.baseSpecies = pokemon.species;
- }
- },
- },
{
name: "[Gen 9] Fervent Impersonation",
desc: `Nickname a Pokémon after another Pokémon that it shares a moveset with, and it will transform into the Pokémon it's nicknamed after once it drops to or below 50% health.`,
@@ -1938,6 +1883,36 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Baton Pass', 'Last Respects', 'Shed Tail',
],
},
+ {
+ name: "[Gen 9] Linked",
+ desc: `The first two moves in a Pokémon's moveset are used simultaneously.`,
+ mod: 'linked',
+ searchShow: false,
+ ruleset: ['Standard OMs', 'Sleep Moves Clause', 'Evasion Clause', 'Terastal Clause'],
+ banlist: [
+ 'Annihilape', 'Arceus', 'Archaludon', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Normal', 'Dialga', 'Dialga-Origin',
+ 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Ho-Oh', 'Iron Bundle', 'Jirachi', 'Koraidon', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
+ 'Landorus-Incarnate', 'Lugia', 'Lunala', 'Magearna', 'Meloetta', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Ogerpon-Hearthflame', 'Palafin',
+ 'Palkia', 'Palkia-Origin', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Shaymin-Sky', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike',
+ 'Urshifu-Rapid-Strike', 'Volcarona', 'Zacian', 'Zacian-Crowned', 'Zamazenta-Crowned', 'Zekrom', 'Arena Trap', 'Chlorophyll', 'Drought', 'Electric Surge', 'Moody',
+ 'Sand Rush', 'Serene Grace', 'Shadow Tag', 'Slush Rush', 'Speed Boost', 'Swift Swim', 'Unburden', 'Booster Energy', 'King\'s Rock', 'Quick Claw', 'Razor Fang',
+ 'Baton Pass', 'Last Respects', 'Shed Tail',
+ ],
+ restricted: [
+ 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
+ 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
+ ],
+ onValidateSet(set) {
+ const problems = [];
+ for (const [i, moveid] of set.moves.entries()) {
+ const move = this.dex.moves.get(moveid);
+ if ([0, 1].includes(i) && this.ruleTable.isRestricted(`move:${move.id}`)) {
+ problems.push(`${set.name || set.species}'s move ${move.name} cannot be linked.`);
+ }
+ }
+ return problems;
+ },
+ },
{
name: "[Gen 9] Nature Swap",
desc: `Pokémon have their stats swapped around based on their nature. A Pokémon with a Modest nature will have its Atk and Sp. Atk stats swap.`,
@@ -3200,44 +3175,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
section: "National Dex Other Tiers",
},
- {
- name: "[Gen 9] National Dex 35 Pokes",
- desc: `Only 35 Pokémon are legal.`,
- mod: 'gen9',
- searchShow: false,
- ruleset: [
- 'Standard NatDex',
- '!Species Clause', 'Forme Clause', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
- ],
- banlist: [
- 'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
- 'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw',
- 'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
- ],
- unbanlist: [
- 'Aerodactyl-Base', 'Arctozolt', 'Armaldo', 'Armarouge', 'Bronzong', 'Centiskorch', 'Cherrim-Base', 'Cyclizar', 'Dhelmise', 'Dondozo',
- 'Drakloak', 'Empoleon', 'Glaceon', 'Golduck', 'Gyarados-Base', 'Jellicent', 'Jumpluff', 'Kecleon', 'Kilowattrel', 'Kingdra', 'Lunatone',
- 'Musharna', 'Noivern', 'Palossand', 'Pincurchin', 'Reuniclus', 'Revavroom', 'Sandslash-Alola', 'Snorlax', 'Solrock', 'Stonjourner',
- 'Vaporeon', 'Virizion', 'Wigglytuff', 'Wo-Chien', 'Ultranecrozium Z', 'Solganium Z', 'Lunalium Z', 'Mewnium Z', 'Marshadium Z', 'Yawn',
- ],
- // Stupid hardcode
- onValidateSet(set, format, setHas, teamHas) {
- if (set.item) {
- const item = this.dex.items.get(set.item);
- if (item.megaStone && !(this.ruleTable.has(`+item:${item.id}`) || this.ruleTable.has(`+pokemontag:mega`))) {
- return [`Mega Evolution is banned.`];
- }
- if (item.zMove && !(this.ruleTable.has(`+item:${item.id}`))) {
- return [`${item.name} is banned.`];
- }
- }
- const species = this.dex.species.get(set.species);
- if (set.moves.map(x => this.toID(this.dex.moves.get(x).realMove) || x).includes('hiddenpower') &&
- species.baseSpecies !== 'Unown' && !this.ruleTable.has(`+move:hiddenpower`)) {
- return [`Hidden Power is banned.`];
- }
- },
- },
{
name: "[Gen 9] National Dex Ubers",
mod: 'gen9',
@@ -3250,6 +3187,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 9] National Dex'],
banlist: ['ND OU', 'ND UUBL', 'Drizzle', 'Drought', 'Light Clay'],
},
+ {
+ name: "[Gen 9] National Dex RU",
+ mod: 'gen9',
+ searchShow: false,
+ ruleset: ['[Gen 9] National Dex UU'],
+ banlist: ['ND UU', 'ND RUBL', 'Slowbronite'],
+ },
{
name: "[Gen 9] National Dex Ubers UU",
mod: 'gen9',
@@ -4672,6 +4616,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 6] UU'],
banlist: ['UU', 'RUBL'],
},
+ {
+ name: "[Gen 6] NU",
+ mod: 'gen6',
+ searchShow: false,
+ ruleset: ['[Gen 6] RU'],
+ banlist: ['RU', 'NUBL'],
+ },
{
name: "[Gen 6] PU",
mod: 'gen6',
@@ -4837,12 +4788,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "B2/W2 Singles",
column: 4,
},
- {
- name: "[Gen 5] Ubers",
- mod: 'gen5',
- searchShow: false,
- ruleset: ['Standard', 'Sleep Clause Mod'],
- },
{
name: "[Gen 5] UU",
mod: 'gen5',
@@ -5020,6 +4965,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "DPP Singles",
column: 4,
},
+ {
+ name: "[Gen 4] Ubers",
+ mod: 'gen4',
+ searchShow: false,
+ ruleset: ['Standard'],
+ banlist: ['AG'],
+ },
{
name: "[Gen 4] UU",
mod: 'gen4',
diff --git a/data/aliases.ts b/data/aliases.ts
index d5bd11694f..22e89b70cd 100644
--- a/data/aliases.ts
+++ b/data/aliases.ts
@@ -91,10 +91,10 @@ export const Aliases: import('../sim/dex').AliasesTable = {
zaou: "[Gen 9] Legends Z-A OU",
legendsou: "[Gen 9] Legends Z-A OU",
plzaou: "[Gen 9] Legends Z-A OU",
- omotm: "[Gen 9] Linked",
- lcotm: "[Gen 9] 350 Cup",
- ommotm: "[Gen 9] Pokebilities AAA",
- ommspotlight: "[Gen 9] Pokebilities AAA",
+ omotm: "[Gen 9] Alphabet Cup",
+ lcotm: "[Gen 9] Cross Evolution",
+ ommotm: "[Gen 9] STAAABmons",
+ ommspotlight: "[Gen 9] STAAABmons",
// mega evos --- 1st ordered alphabetically by species, 2nd by alias
megasnow: "Abomasnow-Mega",
From 202ecc8e48aa418db119129bb201e77b01bd4c53 Mon Sep 17 00:00:00 2001
From: Soul-8691 <42703201+Soul-8691@users.noreply.github.com>
Date: Wed, 1 Apr 2026 05:16:14 -0400
Subject: [PATCH 169/233] [Gen 3] FRLG OU (#11875)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [Gen 3] FRLG OU
* Fix linter errors
* Update with requested changes
* More requested updates
* Update bans
* Unban Silk Scarf
* Fix linter errors
* Get rid of whitespace
* ModdedLearnsetDataTable
* Remove unnecessary Smeargle ban
* Get rid of Baton Pass + Spider Web ban
* Change Primeape tier from NFE to OU
* Change tier of Articuno, Zapdos, and Moltres to OU
* Change tiers from LC to OU for several Pokémon
* Change tier of Farfetch'd and Heracross to OU
* Change tiers from LC to OU for multiple Pokémon
* Change Chansey tier from NFE to OU
* Add lightball item with unobtainable status
* Add brightpowder and scopelens as unobtainable items
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 6 +
data/mods/gen3frlg/formats-data.ts | 1354 ++++
data/mods/gen3frlg/items.ts | 150 +
data/mods/gen3frlg/learnsets.ts | 9336 ++++++++++++++++++++++++++++
data/mods/gen3frlg/rulesets.ts | 40 +
data/mods/gen3frlg/scripts.ts | 3 +
6 files changed, 10889 insertions(+)
create mode 100644 data/mods/gen3frlg/formats-data.ts
create mode 100644 data/mods/gen3frlg/items.ts
create mode 100644 data/mods/gen3frlg/learnsets.ts
create mode 100644 data/mods/gen3frlg/rulesets.ts
create mode 100644 data/mods/gen3frlg/scripts.ts
diff --git a/config/formats.ts b/config/formats.ts
index a75c0c0d64..66674f605e 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -775,6 +775,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
// searchShow: false,
ruleset: ['Standard', 'Sleep Clause Mod'],
},
+ {
+ name: "[Gen 3] FRLG OU",
+ mod: 'gen3frlg',
+ ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'],
+ banlist: ['Uber'],
+ },
{
name: "[Gen 4] VGC 2009",
mod: 'gen4pt',
diff --git a/data/mods/gen3frlg/formats-data.ts b/data/mods/gen3frlg/formats-data.ts
new file mode 100644
index 0000000000..2d0062372f
--- /dev/null
+++ b/data/mods/gen3frlg/formats-data.ts
@@ -0,0 +1,1354 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ bulbasaur: {
+ tier: "LC",
+ },
+ ivysaur: {
+ tier: "NFE",
+ },
+ venusaur: {
+ tier: "OU",
+ },
+ charmander: {
+ tier: "LC",
+ },
+ charmeleon: {
+ tier: "NFE",
+ },
+ charizard: {
+ tier: "OU",
+ },
+ squirtle: {
+ tier: "LC",
+ },
+ wartortle: {
+ tier: "NFE",
+ },
+ blastoise: {
+ tier: "OU",
+ },
+ caterpie: {
+ tier: "LC",
+ },
+ metapod: {
+ tier: "NFE",
+ },
+ butterfree: {
+ tier: "OU",
+ },
+ weedle: {
+ tier: "LC",
+ },
+ kakuna: {
+ tier: "NFE",
+ },
+ beedrill: {
+ tier: "OU",
+ },
+ pidgey: {
+ tier: "LC",
+ },
+ pidgeotto: {
+ tier: "NFE",
+ },
+ pidgeot: {
+ tier: "OU",
+ },
+ rattata: {
+ tier: "LC",
+ },
+ raticate: {
+ tier: "OU",
+ },
+ spearow: {
+ tier: "LC",
+ },
+ fearow: {
+ tier: "OU",
+ },
+ ekans: {
+ tier: "LC",
+ },
+ arbok: {
+ tier: "OU",
+ },
+ pichu: {
+ tier: "LC",
+ },
+ pikachu: {
+ tier: "NFE",
+ },
+ raichu: {
+ tier: "OU",
+ },
+ sandshrew: {
+ tier: "LC",
+ },
+ sandslash: {
+ tier: "OU",
+ },
+ nidoranf: {
+ tier: "LC",
+ },
+ nidorina: {
+ tier: "NFE",
+ },
+ nidoqueen: {
+ tier: "OU",
+ },
+ nidoranm: {
+ tier: "LC",
+ },
+ nidorino: {
+ tier: "NFE",
+ },
+ nidoking: {
+ tier: "OU",
+ },
+ cleffa: {
+ tier: "LC",
+ },
+ clefairy: {
+ tier: "NFE",
+ },
+ clefable: {
+ tier: "OU",
+ },
+ vulpix: {
+ tier: "LC",
+ },
+ ninetales: {
+ tier: "OU",
+ },
+ igglybuff: {
+ tier: "LC",
+ },
+ jigglypuff: {
+ tier: "NFE",
+ },
+ wigglytuff: {
+ tier: "OU",
+ },
+ zubat: {
+ tier: "LC",
+ },
+ golbat: {
+ tier: "NFE",
+ },
+ crobat: {
+ tier: "OU",
+ },
+ oddish: {
+ tier: "LC",
+ },
+ gloom: {
+ tier: "NFE",
+ },
+ vileplume: {
+ tier: "OU",
+ },
+ bellossom: {
+ tier: "OU",
+ },
+ paras: {
+ tier: "LC",
+ },
+ parasect: {
+ tier: "OU",
+ },
+ venonat: {
+ tier: "LC",
+ },
+ venomoth: {
+ tier: "OU",
+ },
+ diglett: {
+ tier: "LC",
+ },
+ dugtrio: {
+ tier: "OU",
+ },
+ meowth: {
+ tier: "LC",
+ },
+ persian: {
+ tier: "OU",
+ },
+ psyduck: {
+ tier: "LC",
+ },
+ golduck: {
+ tier: "OU",
+ },
+ mankey: {
+ tier: "LC",
+ },
+ primeape: {
+ tier: "OU",
+ },
+ growlithe: {
+ tier: "LC",
+ },
+ arcanine: {
+ tier: "OU",
+ },
+ poliwag: {
+ tier: "LC",
+ },
+ poliwhirl: {
+ tier: "NFE",
+ },
+ poliwrath: {
+ tier: "OU",
+ },
+ politoed: {
+ tier: "OU",
+ },
+ abra: {
+ tier: "LC",
+ },
+ kadabra: {
+ tier: "NFE",
+ },
+ alakazam: {
+ tier: "OU",
+ },
+ machop: {
+ tier: "LC",
+ },
+ machoke: {
+ tier: "NFE",
+ },
+ machamp: {
+ tier: "OU",
+ },
+ bellsprout: {
+ tier: "LC",
+ },
+ weepinbell: {
+ tier: "NFE",
+ },
+ victreebel: {
+ tier: "OU",
+ },
+ tentacool: {
+ tier: "LC",
+ },
+ tentacruel: {
+ tier: "OU",
+ },
+ geodude: {
+ tier: "LC",
+ },
+ graveler: {
+ tier: "NFE",
+ },
+ golem: {
+ tier: "OU",
+ },
+ ponyta: {
+ tier: "LC",
+ },
+ rapidash: {
+ tier: "OU",
+ },
+ slowpoke: {
+ tier: "LC",
+ },
+ slowbro: {
+ tier: "OU",
+ },
+ slowking: {
+ tier: "OU",
+ },
+ magnemite: {
+ tier: "LC",
+ },
+ magneton: {
+ tier: "OU",
+ },
+ farfetchd: {
+ tier: "OU",
+ },
+ doduo: {
+ tier: "LC",
+ },
+ dodrio: {
+ tier: "OU",
+ },
+ seel: {
+ tier: "LC",
+ },
+ dewgong: {
+ tier: "OU",
+ },
+ grimer: {
+ tier: "LC",
+ },
+ muk: {
+ tier: "OU",
+ },
+ shellder: {
+ tier: "LC",
+ },
+ cloyster: {
+ tier: "OU",
+ },
+ gastly: {
+ tier: "LC",
+ },
+ haunter: {
+ tier: "NFE",
+ },
+ gengar: {
+ tier: "OU",
+ },
+ onix: {
+ tier: "LC",
+ },
+ steelix: {
+ tier: "OU",
+ },
+ drowzee: {
+ tier: "LC",
+ },
+ hypno: {
+ tier: "OU",
+ },
+ krabby: {
+ tier: "LC",
+ },
+ kingler: {
+ tier: "OU",
+ },
+ voltorb: {
+ tier: "LC",
+ },
+ electrode: {
+ tier: "OU",
+ },
+ exeggcute: {
+ tier: "LC",
+ },
+ exeggutor: {
+ tier: "OU",
+ },
+ cubone: {
+ tier: "LC",
+ },
+ marowak: {
+ tier: "OU",
+ },
+ tyrogue: {
+ tier: "LC",
+ },
+ hitmonlee: {
+ tier: "OU",
+ },
+ hitmonchan: {
+ tier: "OU",
+ },
+ hitmontop: {
+ tier: "OU",
+ },
+ lickitung: {
+ tier: "OU",
+ },
+ koffing: {
+ tier: "LC",
+ },
+ weezing: {
+ tier: "OU",
+ },
+ rhyhorn: {
+ tier: "LC",
+ },
+ rhydon: {
+ tier: "OU",
+ },
+ chansey: {
+ tier: "OU",
+ },
+ blissey: {
+ tier: "OU",
+ },
+ tangela: {
+ tier: "LC",
+ },
+ kangaskhan: {
+ tier: "LC",
+ },
+ horsea: {
+ tier: "LC",
+ },
+ seadra: {
+ tier: "NFE",
+ },
+ kingdra: {
+ tier: "OU",
+ },
+ goldeen: {
+ tier: "LC",
+ },
+ seaking: {
+ tier: "OU",
+ },
+ staryu: {
+ tier: "LC",
+ },
+ starmie: {
+ tier: "OU",
+ },
+ mrmime: {
+ tier: "OU",
+ },
+ scyther: {
+ tier: "OU",
+ },
+ scizor: {
+ tier: "OU",
+ },
+ smoochum: {
+ tier: "LC",
+ },
+ jynx: {
+ tier: "OU",
+ },
+ elekid: {
+ tier: "LC",
+ },
+ electabuzz: {
+ tier: "OU",
+ },
+ magby: {
+ tier: "LC",
+ },
+ magmar: {
+ tier: "OU",
+ },
+ pinsir: {
+ tier: "OU",
+ },
+ tauros: {
+ tier: "OU",
+ },
+ magikarp: {
+ tier: "LC",
+ },
+ gyarados: {
+ tier: "OU",
+ },
+ lapras: {
+ tier: "OU",
+ },
+ ditto: {
+ tier: "LC",
+ },
+ eevee: {
+ tier: "LC",
+ },
+ vaporeon: {
+ tier: "OU",
+ },
+ jolteon: {
+ tier: "OU",
+ },
+ flareon: {
+ tier: "OU",
+ },
+ espeon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ umbreon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ porygon: {
+ tier: "LC",
+ },
+ porygon2: {
+ tier: "OU",
+ },
+ omanyte: {
+ tier: "LC",
+ },
+ omastar: {
+ tier: "OU",
+ },
+ kabuto: {
+ tier: "LC",
+ },
+ kabutops: {
+ tier: "OU",
+ },
+ aerodactyl: {
+ tier: "OU",
+ },
+ snorlax: {
+ tier: "OU",
+ },
+ articuno: {
+ tier: "OU",
+ },
+ zapdos: {
+ tier: "OU",
+ },
+ moltres: {
+ tier: "OU",
+ },
+ dratini: {
+ tier: "LC",
+ },
+ dragonair: {
+ tier: "NFE",
+ },
+ dragonite: {
+ tier: "OU",
+ },
+ mewtwo: {
+ tier: "Uber",
+ },
+ mew: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ chikorita: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ bayleef: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ meganium: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ cyndaquil: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ quilava: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ typhlosion: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ totodile: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ croconaw: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ feraligatr: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sentret: {
+ tier: "LC",
+ },
+ furret: {
+ tier: "OU",
+ },
+ hoothoot: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ noctowl: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ledyba: {
+ tier: "LC",
+ },
+ ledian: {
+ tier: "OU",
+ },
+ spinarak: {
+ tier: "LC",
+ },
+ ariados: {
+ tier: "OU",
+ },
+ chinchou: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lanturn: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ togepi: {
+ tier: "LC",
+ },
+ togetic: {
+ tier: "OU",
+ },
+ natu: {
+ tier: "LC",
+ },
+ xatu: {
+ tier: "OU",
+ },
+ mareep: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ flaaffy: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ampharos: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ azurill: {
+ tier: "LC",
+ },
+ marill: {
+ tier: "NFE",
+ },
+ azumarill: {
+ tier: "OU",
+ },
+ sudowoodo: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ hoppip: {
+ tier: "LC",
+ },
+ skiploom: {
+ tier: "NFE",
+ },
+ jumpluff: {
+ tier: "OU",
+ },
+ aipom: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sunkern: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sunflora: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ yanma: {
+ tier: "OU",
+ },
+ wooper: {
+ tier: "LC",
+ },
+ quagsire: {
+ tier: "OU",
+ },
+ murkrow: {
+ tier: "OU",
+ },
+ misdreavus: {
+ tier: "OU",
+ },
+ unown: {
+ tier: "OU",
+ },
+ wynaut: {
+ tier: "Uber",
+ },
+ wobbuffet: {
+ tier: "Uber",
+ },
+ girafarig: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ pineco: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ forretress: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ dunsparce: {
+ tier: "OU",
+ },
+ gligar: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ snubbull: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ granbull: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ qwilfish: {
+ tier: "OU",
+ },
+ shuckle: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ heracross: {
+ tier: "OU",
+ },
+ sneasel: {
+ tier: "OU",
+ },
+ teddiursa: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ursaring: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ slugma: {
+ tier: "LC",
+ },
+ magcargo: {
+ tier: "OU",
+ },
+ swinub: {
+ tier: "LC",
+ },
+ piloswine: {
+ tier: "OU",
+ },
+ corsola: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ remoraid: {
+ tier: "LC",
+ },
+ octillery: {
+ tier: "OU",
+ },
+ delibird: {
+ tier: "OU",
+ },
+ mantine: {
+ tier: "OU",
+ },
+ skarmory: {
+ tier: "OU",
+ },
+ houndour: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ houndoom: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ phanpy: {
+ tier: "LC",
+ },
+ donphan: {
+ tier: "OU",
+ },
+ stantler: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ smeargle: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ miltank: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ raikou: {
+ tier: "OU",
+ },
+ entei: {
+ tier: "OU",
+ },
+ suicune: {
+ tier: "OU",
+ },
+ larvitar: {
+ tier: "LC",
+ },
+ pupitar: {
+ tier: "NFE",
+ },
+ tyranitar: {
+ tier: "OU",
+ },
+ lugia: {
+ tier: "Uber",
+ },
+ hooh: {
+ tier: "Uber",
+ },
+ celebi: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ treecko: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ grovyle: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sceptile: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ torchic: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ combusken: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ blaziken: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ mudkip: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ marshtomp: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ swampert: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ poochyena: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ mightyena: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ zigzagoon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ linoone: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ wurmple: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ silcoon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ beautifly: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ cascoon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ dustox: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lotad: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lombre: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ludicolo: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ seedot: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ nuzleaf: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ shiftry: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ taillow: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ swellow: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ wingull: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ pelipper: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ralts: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ kirlia: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ gardevoir: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ surskit: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ masquerain: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ shroomish: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ breloom: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ slakoth: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ vigoroth: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ slaking: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ nincada: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ ninjask: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ shedinja: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ whismur: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ loudred: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ exploud: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ makuhita: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ hariyama: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ nosepass: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ skitty: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ delcatty: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sableye: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ mawile: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ aron: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lairon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ aggron: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ meditite: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ medicham: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ electrike: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ manectric: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ plusle: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ minun: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ volbeat: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ illumise: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ roselia: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ gulpin: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ swalot: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ carvanha: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sharpedo: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ wailmer: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ wailord: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ numel: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ camerupt: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ torkoal: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ spoink: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ grumpig: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ spinda: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ trapinch: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ vibrava: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ flygon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ cacnea: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ cacturne: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ swablu: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ altaria: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ zangoose: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ seviper: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lunatone: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ solrock: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ barboach: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ whiscash: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ corphish: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ crawdaunt: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ baltoy: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ claydol: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ lileep: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ cradily: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ anorith: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ armaldo: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ feebas: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ milotic: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ castform: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ castformsunny: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ castformrainy: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ castformsnowy: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ kecleon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ shuppet: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ banette: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ duskull: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ dusclops: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ tropius: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ chimecho: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ absol: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ snorunt: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ glalie: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ spheal: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ sealeo: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ walrein: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ clamperl: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ huntail: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ gorebyss: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ relicanth: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ luvdisc: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ bagon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ shelgon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ salamence: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ beldum: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ metang: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ metagross: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ regirock: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ regice: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ registeel: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ latias: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ latios: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ kyogre: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ groudon: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ rayquaza: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ jirachi: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ deoxys: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+ deoxysattack: {
+ tier: "Uber",
+ },
+ deoxysdefense: {
+ tier: "Uber",
+ },
+ deoxysspeed: {
+ tier: "Unreleased",
+ isNonstandard: "Unobtainable",
+ },
+};
diff --git a/data/mods/gen3frlg/items.ts b/data/mods/gen3frlg/items.ts
new file mode 100644
index 0000000000..d30c5fc6af
--- /dev/null
+++ b/data/mods/gen3frlg/items.ts
@@ -0,0 +1,150 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ aguavberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ apicotberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ brightpowder: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ choiceband: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ clawfossil: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ cornnberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ deepseascale: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ deepseatooth: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ diveball: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ enigmaberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ figyberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ ganlonberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ grepaberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ hondewberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ kelpsyberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ lansatberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ liechiberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ lightball: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ magoberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ magostberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ mentalherb: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ nomelberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ petayaberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ pomegberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ premierball: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ qualotberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ rabutaberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ rootfossil: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ salacberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ scopelens: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ seaincense: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ shellbell: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ souldew: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ starfberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ tamatoberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ whiteherb: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+ wikiberry: {
+ inherit: true,
+ isNonstandard: "Unobtainable",
+ },
+};
diff --git a/data/mods/gen3frlg/learnsets.ts b/data/mods/gen3frlg/learnsets.ts
new file mode 100644
index 0000000000..efdd42881e
--- /dev/null
+++ b/data/mods/gen3frlg/learnsets.ts
@@ -0,0 +1,9336 @@
+export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = {
+ bulbasaur: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ curse: ["3E"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growl: ["3L4"],
+ growth: ["3L32"],
+ hiddenpower: ["3M"],
+ leechseed: ["3L7"],
+ lightscreen: ["3E"],
+ magicalleaf: ["3E"],
+ mimic: ["3T"],
+ petaldance: ["3E"],
+ poisonpowder: ["3L15"],
+ protect: ["3M"],
+ razorleaf: ["3L20"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3E"],
+ secretpower: ["3M"],
+ skullbash: ["3E"],
+ sleeppowder: ["3L15"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M", "3L46"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L25"],
+ swordsdance: ["3T"],
+ synthesis: ["3L39"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ vinewhip: ["3L10"],
+ },
+ },
+ ivysaur: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growl: ["3L1"],
+ growth: ["3L38"],
+ hiddenpower: ["3M"],
+ leechseed: ["3L1"],
+ mimic: ["3T"],
+ poisonpowder: ["3L15"],
+ protect: ["3M"],
+ razorleaf: ["3L22"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L15"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M", "3L56"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L29"],
+ swordsdance: ["3T"],
+ synthesis: ["3L47"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ vinewhip: ["3L10"],
+ },
+ },
+ venusaur: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frenzyplant: ["3T"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growl: ["3L1"],
+ growth: ["3L41"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechseed: ["3L1"],
+ mimic: ["3T"],
+ poisonpowder: ["3L15"],
+ protect: ["3M"],
+ razorleaf: ["3L22"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L15"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M", "3L65"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L29"],
+ swordsdance: ["3T"],
+ synthesis: ["3L53"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ vinewhip: ["3L1"],
+ },
+ },
+ charmander: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ bellydrum: ["3E"],
+ bite: ["3E"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ dragondance: ["3E"],
+ dragonrage: ["3L43"],
+ ember: ["3L7"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L49"],
+ flamethrower: ["3M", "3L31"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metalclaw: ["3L13"],
+ mimic: ["3T"],
+ outrage: ["3E"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ scaryface: ["3L25"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L37"],
+ smokescreen: ["3L13"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3E"],
+ toxic: ["3M"],
+ },
+ },
+ charmeleon: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ dragonrage: ["3L48"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L55"],
+ flamethrower: ["3M", "3L34"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metalclaw: ["3L13"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ scaryface: ["3L27"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L41"],
+ smokescreen: ["3L13"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ charizard: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ blastburn: ["3T"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ dragonrage: ["3L54"],
+ earthquake: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L64"],
+ flamethrower: ["3M", "3L34"],
+ fly: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ heatwave: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metalclaw: ["3L1"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ scaryface: ["3L27"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L44"],
+ smokescreen: ["3L1"],
+ steelwing: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ toxic: ["3M"],
+ wingattack: ["3L36"],
+ },
+ },
+ squirtle: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L18"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bubble: ["3L7"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3E"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L47"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ mist: ["3E"],
+ protect: ["3M", "3L28"],
+ raindance: ["3M", "3L33"],
+ rapidspin: ["3L23"],
+ refresh: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ skullbash: ["3L40"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L4"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ withdraw: ["3L10"],
+ yawn: ["3E"],
+ },
+ },
+ wartortle: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L19"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bubble: ["3L1"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L53"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M", "3L31"],
+ raindance: ["3M", "3L37"],
+ rapidspin: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ skullbash: ["3L45"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ withdraw: ["3L10"],
+ },
+ },
+ blastoise: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L19"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bubble: ["3L1"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydrocannon: ["3T"],
+ hydropump: ["3L68"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M", "3L31"],
+ raindance: ["3M", "3L42"],
+ rapidspin: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ skullbash: ["3L55"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ withdraw: ["3L1"],
+ },
+ },
+ caterpie: {
+ learnset: {
+ stringshot: ["3L1"],
+ tackle: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 3},
+ ],
+ },
+ metapod: {
+ learnset: {
+ harden: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 4},
+ ],
+ },
+ butterfree: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ confusion: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ gust: ["3L28"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ poisonpowder: ["3L13"],
+ protect: ["3M"],
+ psybeam: ["3L34"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3L40"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ silverwind: ["3L47"],
+ skillswap: ["3M"],
+ sleeppowder: ["3L15"],
+ solarbeam: ["3M"],
+ stunspore: ["3L14"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L18"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3L23"],
+ },
+ },
+ weedle: {
+ learnset: {
+ poisonsting: ["3L1"],
+ stringshot: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 3},
+ ],
+ },
+ kakuna: {
+ learnset: {
+ harden: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 4},
+ ],
+ },
+ beedrill: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L40"],
+ attract: ["3M"],
+ brickbreak: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endeavor: ["3L45"],
+ facade: ["3M"],
+ focusenergy: ["3L15"],
+ frustration: ["3M"],
+ furyattack: ["3L1"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ pinmissile: ["3L35"],
+ protect: ["3M"],
+ pursuit: ["3L30"],
+ rage: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ twineedle: ["3L20"],
+ },
+ },
+ pidgey: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L39"],
+ aircutter: ["3E"],
+ attract: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ featherdance: ["3L31"],
+ feintattack: ["3E"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ gust: ["3L9"],
+ hiddenpower: ["3M"],
+ mimic: ["3T"],
+ mirrormove: ["3L47"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ quickattack: ["3L13"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ sandattack: ["3L5"],
+ secretpower: ["3M"],
+ steelwing: ["3M", "3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3L19"],
+ wingattack: ["3L25"],
+ },
+ encounters: [
+ {generation: 3, level: 2},
+ ],
+ },
+ pidgeotto: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L43"],
+ attract: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ featherdance: ["3L34"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ gust: ["3L1"],
+ hiddenpower: ["3M"],
+ mimic: ["3T"],
+ mirrormove: ["3L52"],
+ protect: ["3M"],
+ quickattack: ["3L13"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ sandattack: ["3L1"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3L20"],
+ wingattack: ["3L27"],
+ },
+ encounters: [
+ {generation: 3, level: 7},
+ ],
+ },
+ pidgeot: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L48"],
+ attract: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ featherdance: ["3L34"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ gust: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ mirrormove: ["3L62"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ sandattack: ["3L1"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3L20"],
+ wingattack: ["3L27"],
+ },
+ },
+ rattata: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endeavor: ["3L41"],
+ facade: ["3M"],
+ flamewheel: ["3E"],
+ focusenergy: ["3L20"],
+ frustration: ["3M"],
+ furyswipes: ["3E"],
+ hiddenpower: ["3M"],
+ hyperfang: ["3L13"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L27"],
+ quickattack: ["3L7"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ superfang: ["3L34"],
+ swagger: ["3E"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 2},
+ ],
+ },
+ raticate: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endeavor: ["3L50"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hyperfang: ["3L13"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L30"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ scaryface: ["3L20"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ superfang: ["3L40"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ spearow: {
+ learnset: {
+ aerialace: ["3M", "3L25"],
+ agility: ["3L43"],
+ astonish: ["3E"],
+ attract: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3L37"],
+ facade: ["3M"],
+ falseswipe: ["3E"],
+ feintattack: ["3E"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L13"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ leer: ["3L7"],
+ mimic: ["3T"],
+ mirrormove: ["3L31"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3L19"],
+ quickattack: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ scaryface: ["3E"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ triattack: ["3E"],
+ },
+ encounters: [
+ {generation: 3, level: 3},
+ ],
+ },
+ fearow: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L47"],
+ attract: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3L40"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L1"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ mirrormove: ["3L32"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3L26"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ ekans: {
+ learnset: {
+ acid: ["3L32"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ bite: ["3L13"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ glare: ["3L20"],
+ haze: ["3L44"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ poisonsting: ["3L8"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ screech: ["3L25"],
+ secretpower: ["3M"],
+ slam: ["3E"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ spite: ["3E"],
+ spitup: ["3L37"],
+ stockpile: ["3L37"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swallow: ["3L37"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ wrap: ["3L1"],
+ },
+ },
+ arbok: {
+ learnset: {
+ acid: ["3L38"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ glare: ["3L20"],
+ haze: ["3L56"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ screech: ["3L28"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ spitup: ["3L46"],
+ stockpile: ["3L46"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swallow: ["3L46"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ wrap: ["3L1"],
+ },
+ },
+ pichu: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ charm: ["3L1"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleslap: ["3E"],
+ doubleteam: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ present: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ substitute: ["3T"],
+ sweetkiss: ["3L11"],
+ tailwhip: ["3L6"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L1"],
+ thunderwave: ["3T", "3L8"],
+ toxic: ["3M"],
+ wish: ["3E"],
+ },
+ },
+ pikachu: {
+ learnset: {
+ agility: ["3L33"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L15"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M", "3L50"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L11"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ slam: ["3L20"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ tailwhip: ["3L6"],
+ thunder: ["3M", "3L41"],
+ thunderbolt: ["3M", "3L26"],
+ thundershock: ["3L1"],
+ thunderwave: ["3T", "3L8"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 3},
+ ],
+ },
+ raichu: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ tailwhip: ["3L1"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M", "3L1"],
+ thundershock: ["3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ sandshrew: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ defensecurl: ["3T", "3L6"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ flail: ["3E"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L37"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ metalclaw: ["3E"],
+ mimic: ["3T"],
+ poisonsting: ["3L17"],
+ protect: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3E"],
+ sandattack: ["3L11"],
+ sandstorm: ["3M", "3L53"],
+ sandtomb: ["3L45"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L23"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swift: ["3T", "3L30"],
+ swordsdance: ["3T", "3E"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ sandslash: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L42"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ poisonsting: ["3L17"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandattack: ["3L1"],
+ sandstorm: ["3M", "3L62"],
+ sandtomb: ["3L52"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L24"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swift: ["3T", "3L33"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ nidoranf: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ bite: ["3L20"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ charm: ["3E"],
+ counter: ["3T", "3E"],
+ crunch: ["3L47"],
+ cut: ["3M"],
+ dig: ["3M"],
+ disable: ["3E"],
+ doubleedge: ["3T"],
+ doublekick: ["3L12"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flatter: ["3L38"],
+ focusenergy: ["3E"],
+ frustration: ["3M"],
+ furyswipes: ["3L30"],
+ growl: ["3L1"],
+ helpinghand: ["3L23"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ poisonsting: ["3L17"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3E"],
+ tailwhip: ["3L8"],
+ takedown: ["3E"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ nidorina: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bite: ["3L22"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T"],
+ crunch: ["3L53"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doublekick: ["3L12"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flatter: ["3L43"],
+ frustration: ["3M"],
+ furyswipes: ["3L34"],
+ growl: ["3L1"],
+ helpinghand: ["3L26"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ poisonsting: ["3L18"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L8"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ nidoqueen: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3L22"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doublekick: ["3L1"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ superpower: ["3L43"],
+ surf: ["3M"],
+ tailwhip: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ nidoranm: {
+ learnset: {
+ amnesia: ["3E"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ confusion: ["3E"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ disable: ["3E"],
+ doubleedge: ["3T"],
+ doublekick: ["3L12"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flatter: ["3L38"],
+ focusenergy: ["3L8"],
+ frustration: ["3M"],
+ furyattack: ["3L30"],
+ helpinghand: ["3L23"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L20"],
+ horndrill: ["3L47"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ poisonsting: ["3L17"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3E"],
+ takedown: ["3E"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ nidorino: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doublekick: ["3L12"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flatter: ["3L43"],
+ focusenergy: ["3L8"],
+ frustration: ["3M"],
+ furyattack: ["3L34"],
+ helpinghand: ["3L26"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L22"],
+ horndrill: ["3L53"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ poisonsting: ["3L18"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ nidoking: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doublekick: ["3L1"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L1"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megahorn: ["3L43"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thrash: ["3L22"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ cleffa: {
+ learnset: {
+ amnesia: ["3E"],
+ attract: ["3M"],
+ bellydrum: ["3E"],
+ bodyslam: ["3T"],
+ charm: ["3L1"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3L4"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ magicalleaf: ["3L17"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T", "3E"],
+ mimic: ["3T", "3E"],
+ pound: ["3L1"],
+ present: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L8"],
+ softboiled: ["3T"],
+ solarbeam: ["3M"],
+ splash: ["3E"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ sweetkiss: ["3L13"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wish: ["3E"],
+ },
+ },
+ clefairy: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ cosmicpower: ["3L33"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L25"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L13"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3L5"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ followme: ["3L17"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M", "3L41"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ meteormash: ["3L45"],
+ metronome: ["3T", "3L29"],
+ mimic: ["3T"],
+ minimize: ["3L21"],
+ moonlight: ["3L37"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L9"],
+ snatch: ["3M"],
+ softboiled: ["3T"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ clefable: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L1"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T", "3L1"],
+ mimic: ["3T"],
+ minimize: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L1"],
+ snatch: ["3M"],
+ softboiled: ["3T"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ vulpix: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ confuseray: ["3L21"],
+ dig: ["3M"],
+ disable: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ feintattack: ["3E"],
+ fireblast: ["3M"],
+ firespin: ["3L41"],
+ flail: ["3E"],
+ flamethrower: ["3M", "3L29"],
+ frustration: ["3M"],
+ grudge: ["3L37"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3E"],
+ imprison: ["3L25"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ psychup: ["3E"],
+ quickattack: ["3L13"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M", "3L9"],
+ safeguard: ["3M", "3L33"],
+ secretpower: ["3M"],
+ spite: ["3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L5"],
+ toxic: ["3M"],
+ willowisp: ["3L17"],
+ },
+ },
+ ninetales: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ confuseray: ["3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L45"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ safeguard: ["3M", "3L1"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ igglybuff: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ charm: ["3L1"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L4"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3E"],
+ pound: ["3L9"],
+ present: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L1"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetkiss: ["3L14"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wish: ["3E"],
+ },
+ },
+ jigglypuff: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3L34"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L4"],
+ dig: ["3M"],
+ disable: ["3L14"],
+ doubleedge: ["3T", "3L49"],
+ doubleslap: ["3L24"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hypervoice: ["3L44"],
+ icebeam: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T", "3L39"],
+ pound: ["3L9"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M", "3L29"],
+ return: ["3M"],
+ rollout: ["3T", "3L19"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L1"],
+ snatch: ["3M"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 3},
+ ],
+ },
+ wigglytuff: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ disable: ["3L1"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L1"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L1"],
+ snatch: ["3M"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ zubat: {
+ learnset: {
+ aerialace: ["3M"],
+ aircutter: ["3L31"],
+ astonish: ["3L6"],
+ attract: ["3M"],
+ bite: ["3L16"],
+ confuseray: ["3L26"],
+ curse: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ feintattack: ["3E"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ gust: ["3E"],
+ haze: ["3L46"],
+ hiddenpower: ["3M"],
+ leechlife: ["3L1"],
+ meanlook: ["3L36"],
+ mimic: ["3T"],
+ poisonfang: ["3L41"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ quickattack: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L6"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3E"],
+ wingattack: ["3L21"],
+ },
+ },
+ golbat: {
+ learnset: {
+ aerialace: ["3M"],
+ aircutter: ["3L35"],
+ astonish: ["3L1"],
+ attract: ["3M"],
+ bite: ["3L16"],
+ confuseray: ["3L28"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ haze: ["3L56"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechlife: ["3L1"],
+ meanlook: ["3L42"],
+ mimic: ["3T"],
+ poisonfang: ["3L49"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ wingattack: ["3L21"],
+ },
+ encounters: [
+ {generation: 3, level: 5},
+ ],
+ },
+ crobat: {
+ learnset: {
+ aerialace: ["3M"],
+ aircutter: ["3L35"],
+ astonish: ["3L1"],
+ attract: ["3M"],
+ bite: ["3L16"],
+ confuseray: ["3L28"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ haze: ["3L56"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechlife: ["3L1"],
+ meanlook: ["3L42"],
+ mimic: ["3T"],
+ poisonfang: ["3L49"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ wingattack: ["3L21"],
+ },
+ },
+ oddish: {
+ learnset: {
+ absorb: ["3L1"],
+ acid: ["3L23"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ ingrain: ["3E"],
+ mimic: ["3T"],
+ moonlight: ["3L32"],
+ petaldance: ["3L39"],
+ poisonpowder: ["3L14"],
+ protect: ["3M"],
+ razorleaf: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L18"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L16"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L7"],
+ swordsdance: ["3T", "3E"],
+ synthesis: ["3E"],
+ toxic: ["3M"],
+ },
+ },
+ gloom: {
+ learnset: {
+ absorb: ["3L1"],
+ acid: ["3L24"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ mimic: ["3T"],
+ moonlight: ["3L35"],
+ petaldance: ["3L44"],
+ poisonpowder: ["3L1"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L18"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L16"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L1"],
+ swordsdance: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ vileplume: {
+ learnset: {
+ absorb: ["3L1"],
+ aromatherapy: ["3L1"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ megadrain: ["3L1"],
+ mimic: ["3T"],
+ petaldance: ["3L44"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ bellossom: {
+ learnset: {
+ absorb: ["3L1"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ magicalleaf: ["3L1"],
+ mimic: ["3T"],
+ petaldance: ["3L44"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M", "3L55"],
+ stunspore: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L1"],
+ swordsdance: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ paras: {
+ learnset: {
+ aerialace: ["3M"],
+ aromatherapy: ["3L49"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ falseswipe: ["3E"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M", "3L43"],
+ growth: ["3L37"],
+ hiddenpower: ["3M"],
+ leechlife: ["3L19"],
+ lightscreen: ["3E"],
+ mimic: ["3T"],
+ poisonpowder: ["3L13"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ pursuit: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ slash: ["3L31"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ spore: ["3L25"],
+ stunspore: ["3L7"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3E"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ parasect: {
+ learnset: {
+ aerialace: ["3M"],
+ aromatherapy: ["3L59"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M", "3L51"],
+ growth: ["3L43"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechlife: ["3L19"],
+ mimic: ["3T"],
+ poisonpowder: ["3L1"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ slash: ["3L35"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ spore: ["3L27"],
+ stunspore: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ venonat: {
+ learnset: {
+ attract: ["3M"],
+ batonpass: ["3E"],
+ confusion: ["3L17"],
+ disable: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ foresight: ["3L1"],
+ frustration: ["3M"],
+ gigadrain: ["3M", "3E"],
+ hiddenpower: ["3M"],
+ leechlife: ["3L25"],
+ mimic: ["3T"],
+ poisonpowder: ["3L20"],
+ protect: ["3M"],
+ psybeam: ["3L33"],
+ psychic: ["3M", "3L41"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ skillswap: ["3M"],
+ sleeppowder: ["3L36"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L28"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L9"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ venomoth: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ confusion: ["3L17"],
+ disable: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ foresight: ["3L1"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ gust: ["3L31"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechlife: ["3L25"],
+ mimic: ["3T"],
+ poisonpowder: ["3L20"],
+ protect: ["3M"],
+ psybeam: ["3L36"],
+ psychic: ["3M", "3L52"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ silverwind: ["3L1"],
+ skillswap: ["3M"],
+ sleeppowder: ["3L42"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L28"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L1"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ diglett: {
+ learnset: {
+ aerialace: ["3M"],
+ ancientpower: ["3E"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ bodyslam: ["3T"],
+ cut: ["3M"],
+ dig: ["3M", "3L17"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L41"],
+ facade: ["3M"],
+ feintattack: ["3E"],
+ fissure: ["3L49"],
+ frustration: ["3M"],
+ furyswipes: ["3L21"],
+ growl: ["3L5"],
+ hiddenpower: ["3M"],
+ magnitude: ["3L9"],
+ mimic: ["3T"],
+ mudslap: ["3T", "3L25"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandattack: ["3L1"],
+ scratch: ["3L1"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ slash: ["3L33"],
+ sludgebomb: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ dugtrio: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ cut: ["3M"],
+ dig: ["3M", "3L17"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L51"],
+ facade: ["3M"],
+ fissure: ["3L64"],
+ frustration: ["3M"],
+ furyswipes: ["3L21"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ magnitude: ["3L9"],
+ mimic: ["3T"],
+ mudslap: ["3T", "3L25"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandattack: ["3L1"],
+ sandtomb: ["3L26"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ slash: ["3L38"],
+ sludgebomb: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ triattack: ["3L1"],
+ },
+ },
+ meowth: {
+ learnset: {
+ aerialace: ["3M"],
+ amnesia: ["3E"],
+ attract: ["3M"],
+ bite: ["3L10"],
+ bodyslam: ["3T"],
+ charm: ["3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fakeout: ["3L43"],
+ feintattack: ["3L25"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L36"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3E"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ payday: ["3L18"],
+ protect: ["3M"],
+ psychup: ["3T", "3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L31"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ slash: ["3L40"],
+ snatch: ["3M"],
+ spite: ["3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L45"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 3, gender: "M", nature: "Naive", ivs: {hp: 4, atk: 5, def: 4, spa: 5, spd: 4, spe: 4}, abilities: ["pickup"], pokeball: "pokeball"},
+ ],
+ },
+ persian: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fakeout: ["3L55"],
+ feintattack: ["3L25"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L42"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ payday: ["3L18"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L34"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ slash: ["3L49"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L61"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ psyduck: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L16"],
+ counter: ["3T"],
+ crosschop: ["3E"],
+ dig: ["3M"],
+ disable: ["3L10"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L40"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L50"],
+ hypnosis: ["3E"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ psychic: ["3E"],
+ psychup: ["3T", "3L31"],
+ raindance: ["3M"],
+ refresh: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L23"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tailwhip: ["3L5"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ watersport: ["3L1"],
+ },
+ },
+ golduck: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L16"],
+ counter: ["3T"],
+ dig: ["3M"],
+ disable: ["3L1"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L44"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L58"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychup: ["3T", "3L31"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L23"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ watersport: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 25, pokeball: "safariball"},
+ ],
+ },
+ mankey: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ beatup: ["3E"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T", "3E"],
+ crosschop: ["3L31"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focusenergy: ["3L21"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L16"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ karatechop: ["3L11"],
+ leer: ["3L1"],
+ lowkick: ["3L6"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L41"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L26"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L36"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thrash: ["3L46"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 2},
+ ],
+ },
+ primeape: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ crosschop: ["3L35"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focusenergy: ["3L21"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L16"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ karatechop: ["3L11"],
+ leer: ["3L1"],
+ lowkick: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rage: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L53"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L26"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L44"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thrash: ["3L62"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ growlithe: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L43"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T", "3E"],
+ crunch: ["3E"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L7"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3E"],
+ flamethrower: ["3M", "3L49"],
+ flamewheel: ["3L31"],
+ frustration: ["3M"],
+ helpinghand: ["3L37"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L13"],
+ mimic: ["3T"],
+ odorsleuth: ["3L19"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M", "3L1"],
+ rocksmash: ["3M"],
+ safeguard: ["3E"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ takedown: ["3L25"],
+ thief: ["3M"],
+ thrash: ["3E"],
+ toxic: ["3M"],
+ },
+ },
+ arcanine: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ extremespeed: ["3L49"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ odorsleuth: ["3L1"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M", "3L1"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ poliwag: {
+ learnset: {
+ attract: ["3M"],
+ bellydrum: ["3L37"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3L31"],
+ bubble: ["3L1"],
+ bubblebeam: ["3E"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L19"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L43"],
+ hypnosis: ["3L7"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ mindreader: ["3E"],
+ mist: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M", "3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ splash: ["3E"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ watersport: ["3E"],
+ },
+ },
+ poliwhirl: {
+ learnset: {
+ attract: ["3M"],
+ bellydrum: ["3L43"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3L35"],
+ brickbreak: ["3M"],
+ bubble: ["3L1"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L19"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L51"],
+ hypnosis: ["3L1"],
+ icebeam: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M", "3L27"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 20},
+ ],
+ },
+ poliwrath: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L1"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3L1"],
+ icebeam: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mindreader: ["3L51"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ submission: ["3L1"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ politoed: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L1"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3L1"],
+ icebeam: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swagger: ["3T", "3L51"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ abra: {
+ learnset: {
+ attract: ["3M"],
+ barrier: ["3E"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3E"],
+ facade: ["3M"],
+ firepunch: ["3T", "3E"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ icepunch: ["3T", "3E"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ teleport: ["3L1"],
+ thief: ["3M"],
+ thunderpunch: ["3T", "3E"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ kadabra: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ confusion: ["3L1"],
+ counter: ["3T"],
+ disable: ["3L18"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L30"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ kinesis: ["3L1"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3L21"],
+ psychic: ["3M", "3L36"],
+ raindance: ["3M"],
+ recover: ["3L25"],
+ reflect: ["3M", "3L23"],
+ rest: ["3M"],
+ return: ["3M"],
+ roleplay: ["3L33"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ teleport: ["3L1"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ trick: ["3L43"],
+ },
+ },
+ alakazam: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ calmmind: ["3M", "3L33"],
+ confusion: ["3L1"],
+ counter: ["3T"],
+ disable: ["3L18"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L30"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ kinesis: ["3L1"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3L21"],
+ psychic: ["3M", "3L36"],
+ raindance: ["3M"],
+ recover: ["3L25"],
+ reflect: ["3M", "3L23"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ teleport: ["3L1"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ trick: ["3L43"],
+ },
+ },
+ machop: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T", "3E"],
+ crosschop: ["3L40"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dynamicpunch: ["3T", "3L49"],
+ earthquake: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L7"],
+ focuspunch: ["3M"],
+ foresight: ["3L22"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ karatechop: ["3L13"],
+ leer: ["3L1"],
+ lightscreen: ["3E"],
+ lowkick: ["3L1"],
+ meditate: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L25"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ rollingkick: ["3E"],
+ scaryface: ["3L43"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L19"],
+ strength: ["3M"],
+ submission: ["3L37"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vitalthrow: ["3L31"],
+ },
+ },
+ machoke: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ crosschop: ["3L46"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dynamicpunch: ["3T", "3L59"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L1"],
+ focuspunch: ["3M"],
+ foresight: ["3L22"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ karatechop: ["3L13"],
+ leer: ["3L1"],
+ lowkick: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L25"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ scaryface: ["3L51"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L19"],
+ strength: ["3M"],
+ submission: ["3L41"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vitalthrow: ["3L33"],
+ },
+ },
+ machamp: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ crosschop: ["3L46"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dynamicpunch: ["3T", "3L59"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L1"],
+ focuspunch: ["3M"],
+ foresight: ["3L22"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ karatechop: ["3L13"],
+ leer: ["3L1"],
+ lowkick: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L25"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ scaryface: ["3L51"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L19"],
+ strength: ["3M"],
+ submission: ["3L41"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vitalthrow: ["3L33"],
+ },
+ },
+ bellsprout: {
+ learnset: {
+ acid: ["3L23"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growth: ["3L6"],
+ hiddenpower: ["3M"],
+ ingrain: ["3E"],
+ leechlife: ["3E"],
+ magicalleaf: ["3E"],
+ mimic: ["3T"],
+ poisonpowder: ["3L17"],
+ protect: ["3M"],
+ razorleaf: ["3L37"],
+ reflect: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3L45"],
+ sleeppowder: ["3L15"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L19"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L30"],
+ swordsdance: ["3T", "3E"],
+ synthesis: ["3E"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vinewhip: ["3L1"],
+ wrap: ["3L11"],
+ },
+ },
+ weepinbell: {
+ learnset: {
+ acid: ["3L24"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growth: ["3L1"],
+ hiddenpower: ["3M"],
+ mimic: ["3T"],
+ poisonpowder: ["3L17"],
+ protect: ["3M"],
+ razorleaf: ["3L42"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3L54"],
+ sleeppowder: ["3L15"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L19"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetscent: ["3L33"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vinewhip: ["3L1"],
+ wrap: ["3L1"],
+ },
+ },
+ victreebel: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ razorleaf: ["3L1"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L1"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ spitup: ["3L1"],
+ stockpile: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swallow: ["3L1"],
+ sweetscent: ["3L1"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ vinewhip: ["3L1"],
+ },
+ },
+ tentacool: {
+ learnset: {
+ acid: ["3L19"],
+ attract: ["3M"],
+ aurorabeam: ["3E"],
+ barrier: ["3L36"],
+ blizzard: ["3M"],
+ bubblebeam: ["3L25"],
+ confuseray: ["3E"],
+ constrict: ["3L12"],
+ cut: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L49"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L43"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ substitute: ["3T"],
+ supersonic: ["3L6"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L30"],
+ },
+ },
+ tentacruel: {
+ learnset: {
+ acid: ["3L19"],
+ attract: ["3M"],
+ barrier: ["3L38"],
+ blizzard: ["3M"],
+ bubblebeam: ["3L25"],
+ constrict: ["3L1"],
+ cut: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L55"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L47"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ substitute: ["3T"],
+ supersonic: ["3L1"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L30"],
+ },
+ encounters: [
+ {generation: 3, level: 20},
+ ],
+ },
+ geodude: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L46"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L36"],
+ explosion: ["3T", "3L41"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ magnitude: ["3L16"],
+ megapunch: ["3T", "3E"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mudsport: ["3L6"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockblast: ["3L31"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L11"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L26"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ selfdestruct: ["3T", "3L21"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ graveler: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L62"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L45"],
+ explosion: ["3T", "3L53"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ magnitude: ["3L16"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mudsport: ["3L1"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockblast: ["3L37"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L1"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L29"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ selfdestruct: ["3T", "3L21"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ golem: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L62"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L45"],
+ explosion: ["3T", "3L53"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ magnitude: ["3L16"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mudsport: ["3L1"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockblast: ["3L37"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L1"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L29"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ selfdestruct: ["3T", "3L21"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ ponyta: {
+ learnset: {
+ agility: ["3L38"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bounce: ["3L45"],
+ charm: ["3E"],
+ doubleedge: ["3T", "3E"],
+ doublekick: ["3E"],
+ doubleteam: ["3M"],
+ ember: ["3L14"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L53"],
+ firespin: ["3L25"],
+ flamethrower: ["3M"],
+ flamewheel: ["3E"],
+ frustration: ["3M"],
+ growl: ["3L5"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3E"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ solarbeam: ["3M"],
+ stomp: ["3L19"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L9"],
+ takedown: ["3L31"],
+ thrash: ["3E"],
+ toxic: ["3M"],
+ },
+ },
+ rapidash: {
+ learnset: {
+ agility: ["3L38"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ bounce: ["3L50"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L63"],
+ firespin: ["3L25"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L40"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ solarbeam: ["3M"],
+ stomp: ["3L19"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L1"],
+ takedown: ["3L31"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 37},
+ ],
+ },
+ slowpoke: {
+ learnset: {
+ amnesia: ["3L36"],
+ attract: ["3M"],
+ bellydrum: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ confusion: ["3L17"],
+ curse: ["3L1"],
+ dig: ["3M"],
+ disable: ["3L24"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L6"],
+ hail: ["3M"],
+ headbutt: ["3L29"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M", "3L40"],
+ psychup: ["3T", "3L47"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3E"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ sleeptalk: ["3T", "3E"],
+ snore: ["3T", "3E"],
+ stomp: ["3E"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ yawn: ["3L1"],
+ },
+ },
+ slowbro: {
+ learnset: {
+ amnesia: ["3L36"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L17"],
+ counter: ["3T"],
+ curse: ["3L1"],
+ dig: ["3M"],
+ disable: ["3L24"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hail: ["3M"],
+ headbutt: ["3L29"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M", "3L44"],
+ psychup: ["3T", "3L55"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ withdraw: ["3L37"],
+ yawn: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 32},
+ ],
+ },
+ slowking: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L17"],
+ counter: ["3T"],
+ curse: ["3L1"],
+ dig: ["3M"],
+ disable: ["3L24"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L6"],
+ hail: ["3M"],
+ headbutt: ["3L29"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M", "3L40"],
+ psychup: ["3T", "3L47"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ swagger: ["3T", "3L36"],
+ tackle: ["3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ yawn: ["3L1"],
+ },
+ },
+ magnemite: {
+ learnset: {
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ lockon: ["3L32"],
+ metalsound: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L44"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sonicboom: ["3L16"],
+ spark: ["3L26"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L11"],
+ swift: ["3T", "3L38"],
+ tackle: ["3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L6"],
+ thunderwave: ["3T", "3L21"],
+ toxic: ["3M"],
+ zapcannon: ["3L50"],
+ },
+ },
+ magneton: {
+ learnset: {
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lockon: ["3L35"],
+ metalsound: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3L53"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sonicboom: ["3L16"],
+ spark: ["3L26"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L1"],
+ tackle: ["3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L1"],
+ thunderwave: ["3T", "3L21"],
+ toxic: ["3M"],
+ triattack: ["3L44"],
+ zapcannon: ["3L62"],
+ },
+ encounters: [
+ {generation: 3, level: 26},
+ ],
+ },
+ farfetchd: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L36"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ curse: ["3E"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ falseswipe: ["3L46"],
+ featherdance: ["3E"],
+ flail: ["3E"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L16"],
+ furycutter: ["3L26"],
+ gust: ["3E"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ knockoff: ["3L21"],
+ leer: ["3L11"],
+ mimic: ["3T"],
+ mirrormove: ["3E"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ quickattack: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ sandattack: ["3L6"],
+ secretpower: ["3M"],
+ slash: ["3L41"],
+ steelwing: ["3M", "3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3L31"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 3, gender: "M", nature: "Adamant", ivs: {hp: 20, atk: 25, def: 21, spa: 24, spd: 15, spe: 20}, abilities: ["keeneye"], pokeball: "pokeball"},
+ ],
+ },
+ doduo: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L45"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3L37"],
+ facade: ["3M"],
+ feintattack: ["3E"],
+ flail: ["3E"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L13"],
+ growl: ["3L1"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3L9"],
+ quickattack: ["3E"],
+ rage: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3E"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ triattack: ["3L21"],
+ uproar: ["3L33"],
+ },
+ },
+ dodrio: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L60"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3L47"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L1"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3L1"],
+ rage: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ triattack: ["3L21"],
+ uproar: ["3L38"],
+ },
+ encounters: [
+ {generation: 3, level: 29, pokeball: "safariball"},
+ ],
+ },
+ seel: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L21"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ disable: ["3E"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ fakeout: ["3E"],
+ frustration: ["3M"],
+ growl: ["3L9"],
+ hail: ["3M"],
+ headbutt: ["3L1"],
+ hiddenpower: ["3M"],
+ horndrill: ["3E"],
+ icebeam: ["3M", "3L41"],
+ icywind: ["3T", "3L17"],
+ mimic: ["3T"],
+ perishsong: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M", "3L29"],
+ return: ["3M"],
+ safeguard: ["3M", "3L49"],
+ secretpower: ["3M"],
+ slam: ["3E"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ takedown: ["3L37"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ dewgong: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L1"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hail: ["3M"],
+ headbutt: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M", "3L51"],
+ icywind: ["3T", "3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M", "3L29"],
+ return: ["3M"],
+ safeguard: ["3M", "3L64"],
+ secretpower: ["3M"],
+ sheercold: ["3L34"],
+ signalbeam: ["3L1"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ takedown: ["3L42"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 32},
+ ],
+ },
+ grimer: {
+ learnset: {
+ acidarmor: ["3L34"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ curse: ["3E"],
+ dig: ["3M"],
+ disable: ["3L8"],
+ doubleteam: ["3M"],
+ explosion: ["3T", "3E"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ harden: ["3L4"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ lick: ["3E"],
+ meanlook: ["3E"],
+ memento: ["3L53"],
+ mimic: ["3T"],
+ minimize: ["3L19"],
+ poisongas: ["3L1"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocktomb: ["3M"],
+ screech: ["3L26"],
+ secretpower: ["3M"],
+ shadowpunch: ["3E"],
+ shockwave: ["3M"],
+ sludge: ["3L13"],
+ sludgebomb: ["3M", "3L43"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ muk: {
+ learnset: {
+ acidarmor: ["3L34"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ dig: ["3M"],
+ disable: ["3L8"],
+ doubleteam: ["3M"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ harden: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ memento: ["3L61"],
+ mimic: ["3T"],
+ minimize: ["3L19"],
+ poisongas: ["3L1"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ screech: ["3L26"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ sludge: ["3L13"],
+ sludgebomb: ["3M", "3L47"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 32},
+ ],
+ },
+ shellder: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L17"],
+ barrier: ["3E"],
+ blizzard: ["3M"],
+ bubblebeam: ["3E"],
+ clamp: ["3L41"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M", "3L49"],
+ iciclespear: ["3L8"],
+ leer: ["3L33"],
+ mimic: ["3T"],
+ protect: ["3M", "3L25"],
+ raindance: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ supersonic: ["3L9"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ withdraw: ["3L1"],
+ },
+ },
+ cloyster: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L1"],
+ blizzard: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M", "3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ spikecannon: ["3L41"],
+ spikes: ["3L33"],
+ substitute: ["3T"],
+ supersonic: ["3L1"],
+ surf: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ withdraw: ["3L1"],
+ },
+ },
+ gastly: {
+ learnset: {
+ astonish: ["3E"],
+ attract: ["3M"],
+ confuseray: ["3L21"],
+ curse: ["3L13"],
+ destinybond: ["3L33"],
+ doubleteam: ["3M"],
+ dreameater: ["3T", "3L28"],
+ explosion: ["3T", "3E"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ grudge: ["3E"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3L1"],
+ lick: ["3L1"],
+ meanlook: ["3L13"],
+ mimic: ["3T"],
+ nightmare: ["3T", "3L41"],
+ nightshade: ["3L16"],
+ perishsong: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ psywave: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M", "3L36"],
+ skillswap: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ spite: ["3L8"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ haunter: {
+ learnset: {
+ attract: ["3M"],
+ confuseray: ["3L21"],
+ curse: ["3L13"],
+ destinybond: ["3L39"],
+ doubleteam: ["3M"],
+ dreameater: ["3T", "3L31"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3L1"],
+ lick: ["3L1"],
+ meanlook: ["3L13"],
+ mimic: ["3T"],
+ nightmare: ["3T", "3L53"],
+ nightshade: ["3L16"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M", "3L45"],
+ shadowpunch: ["3L25"],
+ skillswap: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ spite: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 20},
+ ],
+ },
+ gengar: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ confuseray: ["3L21"],
+ counter: ["3T"],
+ curse: ["3L13"],
+ destinybond: ["3L39"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T", "3L31"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3L1"],
+ lick: ["3L1"],
+ meanlook: ["3L13"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ nightmare: ["3T", "3L53"],
+ nightshade: ["3L16"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M", "3L45"],
+ shadowpunch: ["3L25"],
+ skillswap: ["3M"],
+ sludgebomb: ["3M"],
+ snatch: ["3M"],
+ spite: ["3L1"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ onix: {
+ learnset: {
+ attract: ["3M"],
+ bind: ["3L8"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L56"],
+ doubleteam: ["3M"],
+ dragonbreath: ["3L30"],
+ earthquake: ["3M"],
+ explosion: ["3T", "3E"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ harden: ["3L19"],
+ hiddenpower: ["3M"],
+ irontail: ["3M", "3L45"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ rage: ["3L23"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L12"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M", "3L33"],
+ sandtomb: ["3L49"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ slam: ["3L37"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ steelix: {
+ learnset: {
+ attract: ["3M"],
+ bind: ["3L8"],
+ bodyslam: ["3T"],
+ crunch: ["3L49"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L56"],
+ doubleteam: ["3M"],
+ dragonbreath: ["3L30"],
+ earthquake: ["3M"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ harden: ["3L19"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M", "3L45"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ rage: ["3L23"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L12"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M", "3L33"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ slam: ["3L37"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ drowzee: {
+ learnset: {
+ attract: ["3M"],
+ barrier: ["3E"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L11"],
+ counter: ["3T"],
+ disable: ["3L7"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ firepunch: ["3T", "3E"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L45"],
+ headbutt: ["3L17"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3L1"],
+ icepunch: ["3T", "3E"],
+ lightscreen: ["3M"],
+ meditate: ["3L27"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ poisongas: ["3L21"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M", "3L31"],
+ psychup: ["3T", "3L37"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roleplay: ["3E"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L41"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunderpunch: ["3T", "3E"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ hypno: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L1"],
+ counter: ["3T"],
+ disable: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L57"],
+ headbutt: ["3L17"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3L1"],
+ lightscreen: ["3M"],
+ meditate: ["3L29"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ nightmare: ["3T", "3L1"],
+ poisongas: ["3L21"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M", "3L35"],
+ psychup: ["3T", "3L43"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L49"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ krabby: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubble: ["3L1"],
+ crabhammer: ["3L45"],
+ cut: ["3M"],
+ dig: ["3M", "3E"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3L49", "3E"],
+ frustration: ["3M"],
+ guillotine: ["3L34"],
+ hail: ["3M"],
+ harden: ["3L16"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ knockoff: ["3E"],
+ leer: ["3L5"],
+ mimic: ["3T"],
+ mudshot: ["3L23"],
+ protect: ["3M", "3L38"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3E"],
+ stomp: ["3L27"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swordsdance: ["3T", "3E"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ visegrip: ["3L12"],
+ waterpulse: ["3M"],
+ },
+ },
+ kingler: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubble: ["3L1"],
+ crabhammer: ["3L57"],
+ cut: ["3M"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3L65"],
+ frustration: ["3M"],
+ guillotine: ["3L38"],
+ hail: ["3M"],
+ harden: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ leer: ["3L1"],
+ metalclaw: ["3L1"],
+ mimic: ["3T"],
+ mudshot: ["3L23"],
+ protect: ["3M", "3L42"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ stomp: ["3L27"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ visegrip: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 25},
+ ],
+ },
+ voltorb: {
+ learnset: {
+ charge: ["3L1"],
+ doubleteam: ["3M"],
+ explosion: ["3T", "3L46"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ lightscreen: ["3M", "3L37"],
+ mimic: ["3T"],
+ mirrorcoat: ["3L49"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rollout: ["3T", "3L32"],
+ screech: ["3L8"],
+ secretpower: ["3M"],
+ selfdestruct: ["3T", "3L27"],
+ shockwave: ["3M"],
+ sonicboom: ["3L15"],
+ spark: ["3L21"],
+ substitute: ["3T"],
+ swift: ["3T", "3L42"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ electrode: {
+ learnset: {
+ charge: ["3L1"],
+ doubleteam: ["3M"],
+ explosion: ["3T", "3L54"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M", "3L41"],
+ mimic: ["3T"],
+ mirrorcoat: ["3L59"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rollout: ["3T", "3L34"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ selfdestruct: ["3T", "3L27"],
+ shockwave: ["3M"],
+ sonicboom: ["3L1"],
+ spark: ["3L21"],
+ substitute: ["3T"],
+ swift: ["3T", "3L48"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 3, nature: "Hasty", ivs: {hp: 19, atk: 16, def: 18, spa: 25, spd: 25, spe: 19}, abilities: ["static"], pokeball: "pokeball"},
+ ],
+ },
+ exeggcute: {
+ learnset: {
+ attract: ["3M"],
+ barrage: ["3L1"],
+ bulletseed: ["3M"],
+ confusion: ["3L19"],
+ curse: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3L1"],
+ ingrain: ["3E"],
+ leechseed: ["3L13"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ moonlight: ["3E"],
+ poisonpowder: ["3L31"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ reflect: ["3M", "3L7", "3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ skillswap: ["3M"],
+ sleeppowder: ["3L37"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M", "3L43"],
+ strength: ["3M"],
+ stunspore: ["3L25"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ synthesis: ["3E"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ uproar: ["3L1"],
+ },
+ },
+ exeggutor: {
+ learnset: {
+ attract: ["3M"],
+ barrage: ["3L1"],
+ bulletseed: ["3M"],
+ confusion: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ eggbomb: ["3L31"],
+ explosion: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3L1"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ skillswap: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stomp: ["3L19"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ cubone: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bellydrum: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ boneclub: ["3L9"],
+ bonemerang: ["3L25"],
+ bonerush: ["3L41"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L45"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ falseswipe: ["3L33"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L21"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ headbutt: ["3L13"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L17"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3E"],
+ protect: ["3M"],
+ rage: ["3L29"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ skullbash: ["3E"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3E"],
+ tailwhip: ["3L5"],
+ thief: ["3M"],
+ thrash: ["3L37"],
+ toxic: ["3M"],
+ },
+ },
+ marowak: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ boneclub: ["3L1"],
+ bonemerang: ["3L25"],
+ bonerush: ["3L53"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L61"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ falseswipe: ["3L39"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L21"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ headbutt: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L17"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ rage: ["3L32"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ tailwhip: ["3L1"],
+ thief: ["3M"],
+ thrash: ["3L46"],
+ toxic: ["3M"],
+ },
+ },
+ tyrogue: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ highjumpkick: ["3E"],
+ machpunch: ["3E"],
+ megakick: ["3T"],
+ mimic: ["3T"],
+ mindreader: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ hitmonlee: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M", "3L20"],
+ bulkup: ["3M"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doublekick: ["3L1"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L41"],
+ facade: ["3M"],
+ focusenergy: ["3L21"],
+ focuspunch: ["3M"],
+ foresight: ["3L36"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ highjumpkick: ["3L26"],
+ jumpkick: ["3L16"],
+ meditate: ["3L6"],
+ megakick: ["3T", "3L46"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mindreader: ["3L31"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L1"],
+ reversal: ["3L51"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ rollingkick: ["3L11"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ hitmonchan: {
+ learnset: {
+ agility: ["3L7"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ cometpunch: ["3L1"],
+ counter: ["3T", "3L50"],
+ detect: ["3L44"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ firepunch: ["3T", "3L26"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ icepunch: ["3T", "3L26"],
+ machpunch: ["3L20"],
+ megakick: ["3T"],
+ megapunch: ["3T", "3L38"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L13"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L1"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ skyuppercut: ["3L32"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ thunderpunch: ["3T", "3L26"],
+ toxic: ["3M"],
+ },
+ },
+ hitmontop: {
+ learnset: {
+ agility: ["3L37"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ counter: ["3T", "3L31"],
+ detect: ["3L43"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endeavor: ["3L49"],
+ facade: ["3M"],
+ focusenergy: ["3L7"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ megakick: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L13"],
+ quickattack: ["3L19"],
+ raindance: ["3M"],
+ rapidspin: ["3L25"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L1"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rollingkick: ["3L1"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ triplekick: ["3L20"],
+ },
+ },
+ lickitung: {
+ learnset: {
+ attract: ["3M"],
+ bellydrum: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3E"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ curse: ["3E"],
+ cut: ["3M"],
+ defensecurl: ["3T", "3L12"],
+ dig: ["3M"],
+ disable: ["3L34"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ knockoff: ["3L18"],
+ lick: ["3L1"],
+ magnitude: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ refresh: ["3L51"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ screech: ["3L45"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L40"],
+ sleeptalk: ["3E"],
+ snore: ["3T", "3E"],
+ solarbeam: ["3M"],
+ stomp: ["3L23"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ supersonic: ["3L7"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L29"],
+ },
+ },
+ koffing: {
+ learnset: {
+ attract: ["3M"],
+ destinybond: ["3L45", "3E"],
+ doubleteam: ["3M"],
+ explosion: ["3T", "3L41"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ haze: ["3L33"],
+ hiddenpower: ["3M"],
+ memento: ["3L49"],
+ mimic: ["3T"],
+ painsplit: ["3E"],
+ poisongas: ["3L1"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ psywave: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ selfdestruct: ["3T", "3L17"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sludge: ["3L21"],
+ sludgebomb: ["3M"],
+ smog: ["3L9"],
+ smokescreen: ["3L25"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ weezing: {
+ learnset: {
+ attract: ["3M"],
+ destinybond: ["3L51"],
+ doubleteam: ["3M"],
+ explosion: ["3T", "3L44"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ haze: ["3L33"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ memento: ["3L58"],
+ mimic: ["3T"],
+ poisongas: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ selfdestruct: ["3T", "3L1"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sludge: ["3L21"],
+ sludgebomb: ["3M"],
+ smog: ["3L1"],
+ smokescreen: ["3L25"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 32},
+ ],
+ },
+ rhyhorn: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T", "3E"],
+ crunch: ["3E"],
+ curse: ["3E"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L52"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L15"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L1"],
+ horndrill: ["3L38"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ magnitude: ["3E"],
+ megahorn: ["3L57"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockblast: ["3L29"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ scaryface: ["3L24"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ stomp: ["3L10"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3E"],
+ tailwhip: ["3L1"],
+ takedown: ["3L43"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ rhydon: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L58"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L1"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L1"],
+ horndrill: ["3L38"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megahorn: ["3L66"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockblast: ["3L29"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ scaryface: ["3L24"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ stomp: ["3L1"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ tailwhip: ["3L1"],
+ takedown: ["3L46"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ chansey: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L41"],
+ doubleedge: ["3T", "3L57"],
+ doubleslap: ["3L17"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ eggbomb: ["3L35"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M", "3L49"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T", "3E"],
+ mimic: ["3T"],
+ minimize: ["3L23"],
+ pound: ["3L1"],
+ present: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ refresh: ["3L9"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L29"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ softboiled: ["3T", "3L13"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L5"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ blissey: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L33"],
+ doubleedge: ["3T", "3L47"],
+ doubleslap: ["3L13"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ eggbomb: ["3L28"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M", "3L40"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ minimize: ["3L18"],
+ pound: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ refresh: ["3L7"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sing: ["3L23"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ softboiled: ["3T", "3L10"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tailwhip: ["3L4"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ tangela: {
+ learnset: {
+ absorb: ["3L10"],
+ amnesia: ["3E"],
+ attract: ["3M"],
+ bind: ["3L28"],
+ bodyslam: ["3T"],
+ bulletseed: ["3M"],
+ confusion: ["3E"],
+ constrict: ["3L1"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ growth: ["3L13"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ ingrain: ["3L1"],
+ leechseed: ["3E"],
+ megadrain: ["3L31", "3E"],
+ mimic: ["3T"],
+ poisonpowder: ["3L19"],
+ protect: ["3M"],
+ reflect: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3L40"],
+ sleeppowder: ["3L4"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ stunspore: ["3L37"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ tickle: ["3L46"],
+ toxic: ["3M"],
+ vinewhip: ["3L22"],
+ },
+ },
+ kangaskhan: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bite: ["3L7"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ cometpunch: ["3L1"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ disable: ["3E"],
+ dizzypunch: ["3L43"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L37"],
+ facade: ["3M"],
+ fakeout: ["3L19"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3E"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T", "3L25"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ rage: ["3L31"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ reversal: ["3L49"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3E"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ stomp: ["3E"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ tailwhip: ["3L13"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ horsea: {
+ learnset: {
+ agility: ["3L36"],
+ attract: ["3M"],
+ aurorabeam: ["3E"],
+ blizzard: ["3M"],
+ bubble: ["3L1"],
+ disable: ["3E"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3L50"],
+ dragonrage: ["3E"],
+ facade: ["3M"],
+ flail: ["3E"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L43"],
+ icebeam: ["3M"],
+ leer: ["3L15"],
+ mimic: ["3T"],
+ octazooka: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ smokescreen: ["3L8"],
+ splash: ["3E"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ toxic: ["3M"],
+ twister: ["3L29"],
+ waterfall: ["3M"],
+ watergun: ["3L22"],
+ waterpulse: ["3M"],
+ },
+ },
+ seadra: {
+ learnset: {
+ agility: ["3L40"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bubble: ["3L1"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3L62"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L51"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ smokescreen: ["3L1"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ toxic: ["3M"],
+ twister: ["3L29"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 25},
+ ],
+ },
+ kingdra: {
+ learnset: {
+ agility: ["3L40"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubble: ["3L1"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3L62"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L51"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ smokescreen: ["3L1"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ toxic: ["3M"],
+ twister: ["3L29"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ goldeen: {
+ learnset: {
+ agility: ["3L52"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3L24"],
+ frustration: ["3M"],
+ furyattack: ["3L29"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L15"],
+ horndrill: ["3L43"],
+ hydropump: ["3E"],
+ icebeam: ["3M"],
+ megahorn: ["3L57"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ supersonic: ["3L10"],
+ surf: ["3M"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M", "3L38"],
+ waterpulse: ["3M"],
+ watersport: ["3L1"],
+ },
+ },
+ seaking: {
+ learnset: {
+ agility: ["3L61"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3L24"],
+ frustration: ["3M"],
+ furyattack: ["3L29"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L15"],
+ horndrill: ["3L49"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ megahorn: ["3L69"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ supersonic: ["3L1"],
+ surf: ["3M"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M", "3L41"],
+ waterpulse: ["3M"],
+ watersport: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 20},
+ ],
+ },
+ staryu: {
+ learnset: {
+ blizzard: ["3M"],
+ bubblebeam: ["3L28"],
+ camouflage: ["3L19"],
+ cosmicpower: ["3L42"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ harden: ["3L1"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L46"],
+ icebeam: ["3M"],
+ lightscreen: ["3M", "3L37"],
+ mimic: ["3T"],
+ minimize: ["3L33"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rapidspin: ["3L10"],
+ recover: ["3L15"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swift: ["3T", "3L24"],
+ tackle: ["3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L6"],
+ waterpulse: ["3M"],
+ },
+ },
+ starmie: {
+ learnset: {
+ blizzard: ["3M"],
+ confuseray: ["3L33"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rapidspin: ["3L1"],
+ recover: ["3L1"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ skillswap: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swift: ["3T", "3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ mrmime: {
+ learnset: {
+ attract: ["3M"],
+ barrier: ["3L1"],
+ batonpass: ["3L47"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L5"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L15"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3L25"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3E"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ hypnosis: ["3E"],
+ lightscreen: ["3M", "3L19"],
+ magicalleaf: ["3L22"],
+ meditate: ["3L12"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T", "3E"],
+ protect: ["3M"],
+ psybeam: ["3L29"],
+ psychic: ["3M", "3L43"],
+ psychup: ["3T", "3E"],
+ raindance: ["3M"],
+ recycle: ["3L33"],
+ reflect: ["3M", "3L19"],
+ rest: ["3M"],
+ return: ["3M"],
+ roleplay: ["3L40"],
+ safeguard: ["3M", "3L50"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ solarbeam: ["3M"],
+ substitute: ["3T", "3L8"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ trick: ["3L36", "3E"],
+ },
+ },
+ scyther: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L21"],
+ attract: ["3M"],
+ batonpass: ["3E"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L41"],
+ endure: ["3T", "3E"],
+ facade: ["3M"],
+ falseswipe: ["3L16"],
+ focusenergy: ["3L6"],
+ frustration: ["3M"],
+ furycutter: ["3T", "3L46"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3E"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L11"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ reversal: ["3E"],
+ rocksmash: ["3M"],
+ safeguard: ["3E"],
+ secretpower: ["3M"],
+ silverwind: ["3E"],
+ slash: ["3L31"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3L36"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ wingattack: ["3L26"],
+ },
+ },
+ scizor: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L21"],
+ attract: ["3M"],
+ counter: ["3T"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L41"],
+ facade: ["3M"],
+ falseswipe: ["3L16"],
+ focusenergy: ["3L6"],
+ frustration: ["3M"],
+ furycutter: ["3T", "3L46"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irondefense: ["3L41"],
+ leer: ["3L1"],
+ metalclaw: ["3L26"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L11"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ slash: ["3L31"],
+ steelwing: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3L36"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ smoochum: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M", "3L57"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ confusion: ["3L21"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ faketears: ["3L37"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ icepunch: ["3T", "3E"],
+ lick: ["3L1"],
+ lightscreen: ["3M"],
+ meanlook: ["3L33"],
+ meditate: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3L49"],
+ pound: ["3L1"],
+ powdersnow: ["3L13"],
+ protect: ["3M"],
+ psychic: ["3M", "3L45"],
+ psychup: ["3T", "3E"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ sing: ["3L25"],
+ skillswap: ["3M"],
+ substitute: ["3T"],
+ sweetkiss: ["3L9"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ jynx: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M", "3L67"],
+ bodyslam: ["3T", "3L51"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleslap: ["3L21"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ faketears: ["3L41"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ icepunch: ["3T", "3L25"],
+ lick: ["3L1"],
+ lightscreen: ["3M"],
+ lovelykiss: ["3L1"],
+ meanlook: ["3L35"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3L57"],
+ pound: ["3L1"],
+ powdersnow: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ substitute: ["3T"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 20, nature: "Mild", ivs: {hp: 18, atk: 17, def: 18, spa: 22, spd: 25, spe: 21}, abilities: ["oblivious"], pokeball: "pokeball"},
+ ],
+ },
+ elekid: {
+ learnset: {
+ attract: ["3M"],
+ barrier: ["3E"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ crosschop: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ firepunch: ["3T", "3E"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ icepunch: ["3T", "3E"],
+ karatechop: ["3E"],
+ leer: ["3L1"],
+ lightscreen: ["3M", "3L17"],
+ meditate: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rollingkick: ["3E"],
+ screech: ["3L33"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ substitute: ["3T"],
+ swift: ["3T", "3L25"],
+ thief: ["3M"],
+ thunder: ["3M", "3L49"],
+ thunderbolt: ["3M", "3L41"],
+ thunderpunch: ["3T", "3L9"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ electabuzz: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3M", "3L17"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ screech: ["3L36"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ swift: ["3T", "3L25"],
+ thief: ["3M"],
+ thunder: ["3M", "3L58"],
+ thunderbolt: ["3M", "3L47"],
+ thunderpunch: ["3T", "3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ },
+ magby: {
+ learnset: {
+ attract: ["3M"],
+ barrier: ["3E"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ confuseray: ["3L43"],
+ counter: ["3T"],
+ crosschop: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L49"],
+ firepunch: ["3T", "3L19"],
+ flamethrower: ["3M", "3L37"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ karatechop: ["3E"],
+ leer: ["3L7"],
+ megakick: ["3T"],
+ megapunch: ["3T", "3E"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ smog: ["3L13"],
+ smokescreen: ["3L25"],
+ substitute: ["3T"],
+ sunnyday: ["3M", "3L31"],
+ thief: ["3M"],
+ thunderpunch: ["3T", "3E"],
+ toxic: ["3M"],
+ },
+ },
+ magmar: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ confuseray: ["3L49"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L57"],
+ firepunch: ["3T", "3L1"],
+ flamethrower: ["3M", "3L41"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ smog: ["3L1"],
+ smokescreen: ["3L25"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M", "3L33"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ pinsir: {
+ learnset: {
+ attract: ["3M"],
+ bind: ["3L7"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M", "3L31"],
+ bulkup: ["3M"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ falseswipe: ["3E"],
+ focusenergy: ["3L1"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3E"],
+ guillotine: ["3L37"],
+ harden: ["3L19"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L25"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T", "3L13"],
+ strength: ["3M"],
+ submission: ["3L43"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T", "3L49"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ visegrip: ["3L1"],
+ },
+ },
+ tauros: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L8"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L19"],
+ rage: ["3L4"],
+ raindance: ["3M"],
+ rest: ["3M", "3L34"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ scaryface: ["3L13"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ swagger: ["3T", "3L26"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ takedown: ["3L53"],
+ thrash: ["3L43"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ magikarp: {
+ learnset: {
+ flail: ["3L30"],
+ splash: ["3L1"],
+ tackle: ["3L15"],
+ },
+ },
+ gyarados: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L20"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3L50"],
+ dragonrage: ["3L25"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L40"],
+ hyperbeam: ["3M", "3L55"],
+ icebeam: ["3M"],
+ leer: ["3L30"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M", "3L45"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ taunt: ["3M"],
+ thrash: ["3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ twister: ["3L35"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 5},
+ ],
+ },
+ lapras: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3L13"],
+ confuseray: ["3L19"],
+ curse: ["3E"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3E"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ horndrill: ["3E"],
+ hydropump: ["3L49"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M", "3L31"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ mist: ["3L7"],
+ perishsong: ["3L25"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M", "3L37"],
+ refresh: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M", "3L43"],
+ secretpower: ["3M"],
+ sheercold: ["3L55"],
+ shockwave: ["3M"],
+ sing: ["3L1"],
+ sleeptalk: ["3T", "3E"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ surf: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ tickle: ["3E"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ ditto: {
+ learnset: {
+ transform: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 23},
+ ],
+ },
+ eevee: {
+ learnset: {
+ attract: ["3M"],
+ batonpass: ["3L36"],
+ bite: ["3L30"],
+ bodyslam: ["3T"],
+ charm: ["3E"],
+ curse: ["3E"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endure: ["3T", "3E"],
+ facade: ["3M"],
+ flail: ["3E"],
+ frustration: ["3M"],
+ growl: ["3L16"],
+ helpinghand: ["3L1"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L23"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ sandattack: ["3L8"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ takedown: ["3L42"],
+ toxic: ["3M"],
+ wish: ["3E"],
+ },
+ },
+ vaporeon: {
+ learnset: {
+ acidarmor: ["3L47"],
+ attract: ["3M"],
+ aurorabeam: ["3L36"],
+ bite: ["3L30"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3L42"],
+ helpinghand: ["3L1"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L52"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L23"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ sandattack: ["3L8"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L16"],
+ waterpulse: ["3M"],
+ },
+ },
+ jolteon: {
+ learnset: {
+ agility: ["3L47"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doublekick: ["3L30"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ helpinghand: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ pinmissile: ["3L36"],
+ protect: ["3M"],
+ quickattack: ["3L23"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ sandattack: ["3L8"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ thunder: ["3M", "3L52"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L16"],
+ thunderwave: ["3T", "3L42"],
+ toxic: ["3M"],
+ },
+ },
+ flareon: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L30"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L16"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L36"],
+ flamethrower: ["3M", "3L52"],
+ frustration: ["3M"],
+ helpinghand: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L47"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ quickattack: ["3L23"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ sandattack: ["3L8"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ smog: ["3L42"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ porygon: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L9"],
+ blizzard: ["3M"],
+ conversion: ["3L1"],
+ conversion2: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lockon: ["3L32"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3L12"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ recover: ["3L20"],
+ recycle: ["3L44"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ sharpen: ["3L24"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ triattack: ["3L36"],
+ zapcannon: ["3L48"],
+ },
+ },
+ porygon2: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L9"],
+ blizzard: ["3M"],
+ conversion: ["3L1"],
+ conversion2: ["3L1"],
+ defensecurl: ["3T", "3L24"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lockon: ["3L32"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3L12"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ recover: ["3L20"],
+ recycle: ["3L44"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ triattack: ["3L36"],
+ zapcannon: ["3L48"],
+ },
+ },
+ omanyte: {
+ learnset: {
+ ancientpower: ["3L49"],
+ attract: ["3M"],
+ aurorabeam: ["3E"],
+ bite: ["3L13"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubblebeam: ["3E"],
+ constrict: ["3L1"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L55"],
+ icebeam: ["3M"],
+ leer: ["3L31"],
+ mimic: ["3T"],
+ mudshot: ["3L25"],
+ protect: ["3M", "3L37"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3E"],
+ spikes: ["3E"],
+ substitute: ["3T"],
+ supersonic: ["3E"],
+ surf: ["3M"],
+ thief: ["3M"],
+ tickle: ["3L43"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L19"],
+ waterpulse: ["3M"],
+ withdraw: ["3L1"],
+ },
+ },
+ omastar: {
+ learnset: {
+ ancientpower: ["3L55"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ constrict: ["3L1"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L65"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ leer: ["3L31"],
+ mimic: ["3T"],
+ mudshot: ["3L25"],
+ protect: ["3M", "3L37"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ spikecannon: ["3L40"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ thief: ["3M"],
+ tickle: ["3L46"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ withdraw: ["3L1"],
+ },
+ },
+ kabuto: {
+ learnset: {
+ absorb: ["3L13"],
+ aerialace: ["3M"],
+ ancientpower: ["3L55"],
+ attract: ["3M"],
+ aurorabeam: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubblebeam: ["3E"],
+ confuseray: ["3E"],
+ dig: ["3M", "3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endure: ["3T", "3L37"],
+ facade: ["3M"],
+ flail: ["3E"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hail: ["3M"],
+ harden: ["3L1"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ knockoff: ["3E"],
+ leer: ["3L19"],
+ megadrain: ["3L49"],
+ metalsound: ["3L43"],
+ mimic: ["3T"],
+ mudshot: ["3L25"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandattack: ["3L31"],
+ sandstorm: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ kabutops: {
+ learnset: {
+ absorb: ["3L1"],
+ aerialace: ["3M"],
+ ancientpower: ["3L65"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ cut: ["3M"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ endure: ["3T", "3L37"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ furycutter: ["3T", "3L1"],
+ gigadrain: ["3M"],
+ hail: ["3M"],
+ harden: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ leer: ["3L1"],
+ megadrain: ["3L55"],
+ megakick: ["3T"],
+ metalsound: ["3L46"],
+ mimic: ["3T"],
+ mudshot: ["3L25"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandattack: ["3L31"],
+ sandstorm: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slash: ["3L40"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ aerodactyl: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L8"],
+ ancientpower: ["3L29"],
+ attract: ["3M"],
+ bite: ["3L15"],
+ curse: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L50"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ scaryface: ["3L36"],
+ secretpower: ["3M"],
+ steelwing: ["3M", "3E"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L22"],
+ takedown: ["3L43"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3E"],
+ wingattack: ["3L1"],
+ },
+ },
+ snorlax: {
+ learnset: {
+ amnesia: ["3L5"],
+ attract: ["3M"],
+ bellydrum: ["3L13"],
+ blizzard: ["3M"],
+ block: ["3L37"],
+ bodyslam: ["3T", "3L33"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ covet: ["3L42"],
+ curse: ["3E"],
+ defensecurl: ["3T", "3L9"],
+ doubleedge: ["3T", "3E"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ headbutt: ["3L17"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L51"],
+ icebeam: ["3M"],
+ lick: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M", "3L25"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L46"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sleeptalk: ["3T", "3L37"],
+ snore: ["3T", "3L28"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ yawn: ["3L21"],
+ },
+ },
+ articuno: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L25"],
+ blizzard: ["3M", "3L73"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ gust: ["3L1"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M", "3L49"],
+ mimic: ["3T"],
+ mindreader: ["3L37"],
+ mist: ["3L13"],
+ powdersnow: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M", "3L61"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ sheercold: ["3L85"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ zapdos: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L25"],
+ charge: ["3L61"],
+ detect: ["3L37"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3L49"],
+ facade: ["3M"],
+ flash: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M", "3L73"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M", "3L85"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L1"],
+ thunderwave: ["3T", "3L13"],
+ toxic: ["3M"],
+ },
+ },
+ moltres: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L25"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L1"],
+ endure: ["3T", "3L37"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ firespin: ["3L13"],
+ flamethrower: ["3M", "3L49"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ heatwave: ["3L73"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M", "3L61"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ skyattack: ["3T", "3L85"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ wingattack: ["3L1"],
+ },
+ },
+ dratini: {
+ learnset: {
+ agility: ["3L36"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3E"],
+ dragonrage: ["3L22"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L57"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3E"],
+ mimic: ["3T"],
+ mist: ["3E"],
+ outrage: ["3L50"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3L43"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L29"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3E"],
+ surf: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T", "3L8"],
+ toxic: ["3M"],
+ twister: ["3L15"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L1"],
+ },
+ },
+ dragonair: {
+ learnset: {
+ agility: ["3L38"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonrage: ["3L22"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L65"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ outrage: ["3L56"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3L47"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L29"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T", "3L1"],
+ toxic: ["3M"],
+ twister: ["3L1"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 25, pokeball: "safariball"},
+ ],
+ },
+ dragonite: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L38"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ cut: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ dragonrage: ["3L22"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ fly: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L75"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ outrage: ["3L61"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M", "3L47"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L29"],
+ steelwing: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T", "3L1"],
+ toxic: ["3M"],
+ twister: ["3L1"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ wingattack: ["3L55"],
+ wrap: ["3L1"],
+ },
+ },
+ mewtwo: {
+ learnset: {
+ aerialace: ["3M"],
+ amnesia: ["3L77"],
+ barrier: ["3L11"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bulkup: ["3M"],
+ calmmind: ["3M"],
+ confusion: ["3L1"],
+ counter: ["3T"],
+ disable: ["3L1"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L44"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T"],
+ mimic: ["3T"],
+ mist: ["3L22"],
+ protect: ["3M"],
+ psychic: ["3M", "3L66"],
+ psychup: ["3T", "3L33"],
+ raindance: ["3M"],
+ recover: ["3L44"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M", "3L55"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swift: ["3T", "3L22"],
+ taunt: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ sentret: {
+ learnset: {
+ amnesia: ["3L49"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ cut: ["3M"],
+ defensecurl: ["3T", "3L4"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3E"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3E"],
+ focuspunch: ["3M"],
+ followme: ["3L31"],
+ frustration: ["3M"],
+ furyswipes: ["3L12"],
+ helpinghand: ["3L17"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ quickattack: ["3L7"],
+ raindance: ["3M"],
+ rest: ["3M", "3L40"],
+ return: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L24"],
+ slash: ["3E"],
+ solarbeam: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ thief: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ furret: {
+ learnset: {
+ amnesia: ["3L59"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ cut: ["3M"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ followme: ["3L37"],
+ frustration: ["3M"],
+ furyswipes: ["3L12"],
+ helpinghand: ["3L19"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M", "3L48"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ slam: ["3L28"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ ledyba: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L43"],
+ attract: ["3M"],
+ batonpass: ["3L29"],
+ brickbreak: ["3M"],
+ cometpunch: ["3L15"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L50"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ lightscreen: ["3M", "3L22"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ reflect: ["3M", "3L22"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3L22"],
+ secretpower: ["3M"],
+ silverwind: ["3E"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L8"],
+ swift: ["3T", "3L36"],
+ swordsdance: ["3T"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ ledian: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L51"],
+ attract: ["3M"],
+ batonpass: ["3L33"],
+ brickbreak: ["3M"],
+ cometpunch: ["3L15"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3L60"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M", "3L24"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ reflect: ["3M", "3L24"],
+ rest: ["3M"],
+ return: ["3M"],
+ safeguard: ["3M", "3L24"],
+ secretpower: ["3M"],
+ solarbeam: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L1"],
+ swift: ["3T", "3L42"],
+ swordsdance: ["3T"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ spinarak: {
+ learnset: {
+ agility: ["3L45"],
+ attract: ["3M"],
+ batonpass: ["3E"],
+ bodyslam: ["3T"],
+ constrict: ["3L11"],
+ dig: ["3M"],
+ disable: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L30"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ leechlife: ["3L23"],
+ mimic: ["3T"],
+ nightshade: ["3L17"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ psybeam: ["3E"],
+ psychic: ["3M", "3L53"],
+ pursuit: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ scaryface: ["3L6"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ sonicboom: ["3E"],
+ spiderweb: ["3L37"],
+ stringshot: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ ariados: {
+ learnset: {
+ agility: ["3L53"],
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ constrict: ["3L1"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L34"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechlife: ["3L25"],
+ mimic: ["3T"],
+ nightshade: ["3L17"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M", "3L63"],
+ rest: ["3M"],
+ return: ["3M"],
+ scaryface: ["3L1"],
+ secretpower: ["3M"],
+ sludgebomb: ["3M"],
+ solarbeam: ["3M"],
+ spiderweb: ["3L43"],
+ stringshot: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ togepi: {
+ learnset: {
+ ancientpower: ["3L21"],
+ attract: ["3M"],
+ batonpass: ["3L41"],
+ bodyslam: ["3T"],
+ charm: ["3L1"],
+ counter: ["3T"],
+ doubleedge: ["3T", "3L37"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3L17"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ followme: ["3L25"],
+ frustration: ["3M"],
+ futuresight: ["3E"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T", "3L4"],
+ mimic: ["3T"],
+ mirrormove: ["3E"],
+ peck: ["3E"],
+ present: ["3E"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M", "3L33"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ softboiled: ["3T"],
+ solarbeam: ["3M"],
+ substitute: ["3T", "3E"],
+ sunnyday: ["3M"],
+ sweetkiss: ["3L9"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wish: ["3L29"],
+ yawn: ["3L13"],
+ },
+ },
+ togetic: {
+ learnset: {
+ aerialace: ["3M"],
+ ancientpower: ["3L21"],
+ attract: ["3M"],
+ batonpass: ["3L41"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ charm: ["3L1"],
+ counter: ["3T"],
+ doubleedge: ["3T", "3L37"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ encore: ["3L17"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ fly: ["3M"],
+ focuspunch: ["3M"],
+ followme: ["3L25"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M"],
+ magicalleaf: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ metronome: ["3T", "3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M", "3L33"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ softboiled: ["3T"],
+ solarbeam: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ sweetkiss: ["3L1"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wish: ["3L29"],
+ yawn: ["3L13"],
+ },
+ },
+ natu: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ calmmind: ["3M"],
+ confuseray: ["3L40"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ drillpeck: ["3E"],
+ facade: ["3M"],
+ featherdance: ["3E"],
+ feintattack: ["3E"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L30"],
+ gigadrain: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ nightshade: ["3L10"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M", "3L50"],
+ quickattack: ["3E"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ solarbeam: ["3M"],
+ steelwing: ["3M", "3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ teleport: ["3L20"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ wish: ["3L30"],
+ },
+ },
+ xatu: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ calmmind: ["3M"],
+ confuseray: ["3L50"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L35"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ nightshade: ["3L10"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ psychic: ["3M", "3L65"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ skillswap: ["3M"],
+ solarbeam: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ teleport: ["3L20"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ wish: ["3L35"],
+ },
+ },
+ azurill: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubble: ["3L10"],
+ charm: ["3L3"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ refresh: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sing: ["3E"],
+ slam: ["3L15", "3E"],
+ splash: ["3L1"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tailwhip: ["3L6"],
+ tickle: ["3E"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L21"],
+ waterpulse: ["3M"],
+ },
+ },
+ marill: {
+ learnset: {
+ amnesia: ["3E"],
+ attract: ["3M"],
+ bellydrum: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bubblebeam: ["3L21"],
+ defensecurl: ["3T", "3L3"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T", "3L28"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L45"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3E"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ perishsong: ["3E"],
+ present: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M", "3L36"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rollout: ["3T", "3L15"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T", "3E"],
+ supersonic: ["3E"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L6"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L10"],
+ waterpulse: ["3M"],
+ },
+ },
+ azumarill: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ bubblebeam: ["3L24"],
+ defensecurl: ["3T", "3L1"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T", "3L34"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L57"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M", "3L45"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rollout: ["3T", "3L15"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ hoppip: {
+ learnset: {
+ aerialace: ["3M"],
+ amnesia: ["3E"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ confusion: ["3E"],
+ cottonspore: ["3L25"],
+ doubleedge: ["3T", "3E"],
+ doubleteam: ["3M"],
+ encore: ["3E"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ leechseed: ["3L20"],
+ megadrain: ["3L30"],
+ mimic: ["3T"],
+ poisonpowder: ["3L13"],
+ protect: ["3M"],
+ reflect: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L17"],
+ solarbeam: ["3M"],
+ splash: ["3L1"],
+ stunspore: ["3L15"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ synthesis: ["3L5"],
+ tackle: ["3L10"],
+ tailwhip: ["3L5"],
+ toxic: ["3M"],
+ },
+ },
+ skiploom: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cottonspore: ["3L29"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ leechseed: ["3L22"],
+ megadrain: ["3L36"],
+ mimic: ["3T"],
+ poisonpowder: ["3L13"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L17"],
+ solarbeam: ["3M"],
+ splash: ["3L1"],
+ stunspore: ["3L15"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ synthesis: ["3L1"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ jumpluff: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bulletseed: ["3M"],
+ cottonspore: ["3L33"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ leechseed: ["3L22"],
+ megadrain: ["3L44"],
+ mimic: ["3T"],
+ poisonpowder: ["3L13"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ sleeppowder: ["3L17"],
+ solarbeam: ["3M"],
+ splash: ["3L1"],
+ stunspore: ["3L15"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ synthesis: ["3L1"],
+ tackle: ["3L1"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ },
+ },
+ yanma: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ detect: ["3L25"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L12"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ foresight: ["3L1"],
+ frustration: ["3M"],
+ gigadrain: ["3M"],
+ hiddenpower: ["3M"],
+ hypnosis: ["3L23"],
+ leechlife: ["3E"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ quickattack: ["3L6"],
+ rest: ["3M"],
+ return: ["3M"],
+ reversal: ["3E"],
+ screech: ["3L49"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ silverwind: ["3E"],
+ solarbeam: ["3M"],
+ sonicboom: ["3L17"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3L31"],
+ tackle: ["3L1"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ uproar: ["3L34"],
+ whirlwind: ["3E"],
+ wingattack: ["3L39"],
+ },
+ },
+ wooper: {
+ learnset: {
+ amnesia: ["3L21"],
+ ancientpower: ["3E"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T", "3E"],
+ curse: ["3E"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L36"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3L51"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ mist: ["3L51"],
+ mudshot: ["3L16"],
+ protect: ["3M"],
+ raindance: ["3M", "3L41"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3E"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ slam: ["3L11"],
+ sludgebomb: ["3M"],
+ spitup: ["3E"],
+ stockpile: ["3E"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ swallow: ["3E"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ yawn: ["3L31"],
+ },
+ },
+ quagsire: {
+ learnset: {
+ amnesia: ["3L23"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L42"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3L61"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ mist: ["3L61"],
+ mudshot: ["3L16"],
+ protect: ["3M"],
+ raindance: ["3M", "3L49"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ slam: ["3L11"],
+ sludgebomb: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ surf: ["3M"],
+ tailwhip: ["3L1"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ yawn: ["3L35"],
+ },
+ },
+ murkrow: {
+ learnset: {
+ aerialace: ["3M"],
+ astonish: ["3L9"],
+ attract: ["3M"],
+ calmmind: ["3M"],
+ confuseray: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ drillpeck: ["3E"],
+ facade: ["3M"],
+ featherdance: ["3E"],
+ feintattack: ["3L35"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ haze: ["3L22"],
+ hiddenpower: ["3M"],
+ meanlook: ["3L48"],
+ mimic: ["3T"],
+ mirrormove: ["3E"],
+ nightshade: ["3L27"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3L14"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ snatch: ["3M"],
+ steelwing: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M", "3L40"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3E"],
+ wingattack: ["3E"],
+ },
+ },
+ misdreavus: {
+ learnset: {
+ aerialace: ["3M"],
+ astonish: ["3L11"],
+ attract: ["3M"],
+ calmmind: ["3M"],
+ confuseray: ["3L17"],
+ destinybond: ["3E"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ grudge: ["3L53"],
+ hiddenpower: ["3M"],
+ meanlook: ["3L23"],
+ mimic: ["3T"],
+ painsplit: ["3L37"],
+ perishsong: ["3L45"],
+ protect: ["3M"],
+ psybeam: ["3L30"],
+ psychic: ["3M"],
+ psywave: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ spite: ["3L6"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ unown: {
+ learnset: {
+ hiddenpower: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 25},
+ ],
+ },
+ wynaut: {
+ learnset: {
+ charm: ["3L1"],
+ counter: ["3L15"],
+ destinybond: ["3L15"],
+ encore: ["3L1"],
+ mirrorcoat: ["3L15"],
+ safeguard: ["3L15"],
+ splash: ["3L1"],
+ },
+ },
+ wobbuffet: {
+ learnset: {
+ counter: ["3L1"],
+ destinybond: ["3L1"],
+ mirrorcoat: ["3L1"],
+ safeguard: ["3L1"],
+ },
+ },
+ dunsparce: {
+ learnset: {
+ ancientpower: ["3E"],
+ attract: ["3M"],
+ bite: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ counter: ["3T"],
+ curse: ["3E"],
+ defensecurl: ["3T", "3L4"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ endeavor: ["3L41"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flail: ["3L44"],
+ flamethrower: ["3M"],
+ frustration: ["3M"],
+ glare: ["3L14"],
+ headbutt: ["3E"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ pursuit: ["3L24"],
+ rage: ["3L1"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L21"],
+ screech: ["3L31"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ spite: ["3L21"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ takedown: ["3L34"],
+ thief: ["3M"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ yawn: ["3L11"],
+ },
+ },
+ qwilfish: {
+ learnset: {
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bubblebeam: ["3E"],
+ destinybond: ["3L45"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flail: ["3E"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ harden: ["3L9"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L37"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ minimize: ["3L9"],
+ pinmissile: ["3L21"],
+ poisonsting: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ revenge: ["3L25"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ sludgebomb: ["3M"],
+ spikes: ["3L1"],
+ substitute: ["3T"],
+ supersonic: ["3E"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ tackle: ["3L1"],
+ takedown: ["3L33"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L13"],
+ waterpulse: ["3M"],
+ },
+ },
+ heracross: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M", "3L23"],
+ bulkup: ["3M"],
+ counter: ["3T", "3L30"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L11"],
+ facade: ["3M"],
+ falseswipe: ["3E"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L17"],
+ harden: ["3E"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L6"],
+ hyperbeam: ["3M"],
+ leer: ["3L1"],
+ megahorn: ["3L53"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ reversal: ["3L45"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swordsdance: ["3T"],
+ tackle: ["3L1"],
+ takedown: ["3L37"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ sneasel: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L36"],
+ attract: ["3M"],
+ beatup: ["3L57"],
+ bite: ["3E"],
+ blizzard: ["3M"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T", "3E"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ fakeout: ["3E"],
+ feintattack: ["3L22"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ furyswipes: ["3L29"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ icywind: ["3T", "3L43"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ metalclaw: ["3L64"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L8"],
+ raindance: ["3M"],
+ reflect: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ rocksmash: ["3M"],
+ scratch: ["3L1"],
+ screech: ["3L15"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ slash: ["3L50"],
+ snatch: ["3M"],
+ spite: ["3E"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ swordsdance: ["3T"],
+ taunt: ["3M", "3L1"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ slugma: {
+ learnset: {
+ acidarmor: ["3E"],
+ amnesia: ["3L29"],
+ attract: ["3M"],
+ bodyslam: ["3T", "3L50"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L8"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M", "3L36"],
+ frustration: ["3M"],
+ harden: ["3L22"],
+ hiddenpower: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3L43"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L15"],
+ secretpower: ["3M"],
+ smog: ["3L1"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ yawn: ["3L1"],
+ },
+ },
+ magcargo: {
+ learnset: {
+ amnesia: ["3L29"],
+ attract: ["3M"],
+ bodyslam: ["3T", "3L60"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ ember: ["3L1"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M", "3L36"],
+ frustration: ["3M"],
+ harden: ["3L22"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3L48"],
+ rocksmash: ["3M"],
+ rockthrow: ["3L1"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ smog: ["3L1"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ yawn: ["3L1"],
+ },
+ encounters: [
+ {generation: 3, level: 25},
+ ],
+ },
+ swinub: {
+ learnset: {
+ amnesia: ["3L55"],
+ ancientpower: ["3E"],
+ attract: ["3M"],
+ bite: ["3E"],
+ blizzard: ["3M", "3L46"],
+ bodyslam: ["3T", "3E"],
+ dig: ["3M"],
+ doubleedge: ["3T", "3E"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L19"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ mist: ["3L37"],
+ mudshot: ["3E"],
+ odorsleuth: ["3L1"],
+ powdersnow: ["3L10"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T", "3E"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ tackle: ["3L1"],
+ takedown: ["3L28", "3E"],
+ toxic: ["3M"],
+ },
+ },
+ piloswine: {
+ learnset: {
+ amnesia: ["3L70"],
+ attract: ["3M"],
+ blizzard: ["3M", "3L56"],
+ bodyslam: ["3T"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L1"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L33"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L1"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ mist: ["3L42"],
+ odorsleuth: ["3L1"],
+ powdersnow: ["3L1"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ takedown: ["3L28"],
+ toxic: ["3M"],
+ },
+ },
+ remoraid: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L22", "3E"],
+ blizzard: ["3M"],
+ bubblebeam: ["3L22"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L33"],
+ frustration: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L55"],
+ icebeam: ["3M", "3L44"],
+ lockon: ["3L11"],
+ mimic: ["3T"],
+ octazooka: ["3E"],
+ protect: ["3M"],
+ psybeam: ["3L22"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ screech: ["3E"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ supersonic: ["3E"],
+ surf: ["3M"],
+ thief: ["3M"],
+ thunderwave: ["3T", "3E"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ octillery: {
+ learnset: {
+ attract: ["3M"],
+ aurorabeam: ["3L22"],
+ blizzard: ["3M"],
+ bubblebeam: ["3L22"],
+ bulletseed: ["3M"],
+ constrict: ["3L11"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focusenergy: ["3L38"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L70"],
+ icebeam: ["3M", "3L54"],
+ mimic: ["3T"],
+ octazooka: ["3L25"],
+ protect: ["3M"],
+ psybeam: ["3L22"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ sludgebomb: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ thief: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ watergun: ["3L1"],
+ waterpulse: ["3M"],
+ },
+ },
+ delibird: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ aurorabeam: ["3E"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ fly: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ icebeam: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ present: ["3L1"],
+ protect: ["3M"],
+ quickattack: ["3E"],
+ raindance: ["3M"],
+ rapidspin: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ splash: ["3E"],
+ substitute: ["3T"],
+ thief: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ mantine: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L29"],
+ attract: ["3M"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubble: ["3L1"],
+ bubblebeam: ["3L15"],
+ confuseray: ["3L50"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hail: ["3M"],
+ haze: ["3E"],
+ hiddenpower: ["3M"],
+ hydropump: ["3E"],
+ icebeam: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3E"],
+ secretpower: ["3M"],
+ slam: ["3E"],
+ substitute: ["3T"],
+ supersonic: ["3L8"],
+ surf: ["3M"],
+ tackle: ["3L1"],
+ takedown: ["3L22"],
+ toxic: ["3M"],
+ twister: ["3E"],
+ waterfall: ["3M"],
+ waterpulse: ["3M", "3L43"],
+ wingattack: ["3L36"],
+ },
+ },
+ skarmory: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L16"],
+ aircutter: ["3L29"],
+ attract: ["3M"],
+ counter: ["3T"],
+ curse: ["3E"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ drillpeck: ["3E"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ furyattack: ["3L26"],
+ hiddenpower: ["3M"],
+ leer: ["3L1"],
+ metalsound: ["3L45"],
+ mimic: ["3T"],
+ peck: ["3L1"],
+ protect: ["3M"],
+ pursuit: ["3E"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ sandattack: ["3L10"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ spikes: ["3L42"],
+ steelwing: ["3M", "3L32"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swift: ["3T", "3L13"],
+ taunt: ["3M"],
+ thief: ["3M"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ whirlwind: ["3E"],
+ },
+ },
+ phanpy: {
+ learnset: {
+ ancientpower: ["3E"],
+ attract: ["3M"],
+ bodyslam: ["3T", "3E"],
+ counter: ["3T", "3E"],
+ defensecurl: ["3T", "3L9"],
+ doubleedge: ["3T", "3L49"],
+ doubleteam: ["3M"],
+ earthquake: ["3M"],
+ endure: ["3T", "3L41"],
+ facade: ["3M"],
+ fissure: ["3E"],
+ flail: ["3L17"],
+ focusenergy: ["3E"],
+ frustration: ["3M"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ odorsleuth: ["3L1"],
+ protect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L33"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ tackle: ["3L1"],
+ takedown: ["3L25"],
+ toxic: ["3M"],
+ },
+ },
+ donphan: {
+ learnset: {
+ attract: ["3M"],
+ bodyslam: ["3T"],
+ counter: ["3T"],
+ defensecurl: ["3T", "3L9"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L49"],
+ facade: ["3M"],
+ flail: ["3L17"],
+ frustration: ["3M"],
+ furyattack: ["3L25"],
+ growl: ["3L1"],
+ hiddenpower: ["3M"],
+ hornattack: ["3L1"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ mimic: ["3T"],
+ odorsleuth: ["3L1"],
+ protect: ["3M"],
+ rapidspin: ["3L41"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ rollout: ["3T", "3L33"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ raikou: {
+ learnset: {
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ calmmind: ["3M", "3L81"],
+ crunch: ["3L61"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ quickattack: ["3L31"],
+ raindance: ["3M"],
+ reflect: ["3M", "3L51"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M", "3L21"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ shockwave: ["3M"],
+ spark: ["3L41"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ thunder: ["3M", "3L71"],
+ thunderbolt: ["3M"],
+ thundershock: ["3L11"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 40},
+ ],
+ },
+ entei: {
+ learnset: {
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ calmmind: ["3M", "3L81"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ ember: ["3L11"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L71"],
+ firespin: ["3L31"],
+ flamethrower: ["3M", "3L51"],
+ flash: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M", "3L21"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ solarbeam: ["3M"],
+ stomp: ["3L41"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ swagger: ["3T", "3L61"],
+ toxic: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 40},
+ ],
+ },
+ suicune: {
+ learnset: {
+ aurorabeam: ["3L41"],
+ bite: ["3L1"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ bubblebeam: ["3L11"],
+ calmmind: ["3M", "3L81"],
+ cut: ["3M"],
+ dig: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ gust: ["3L31"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L71"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ mirrorcoat: ["3L61"],
+ mist: ["3L51"],
+ protect: ["3M"],
+ raindance: ["3M", "3L21"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ },
+ encounters: [
+ {generation: 3, level: 40},
+ ],
+ },
+ larvitar: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ crunch: ["3L43"],
+ curse: ["3E"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragondance: ["3E"],
+ earthquake: ["3M", "3L50"],
+ facade: ["3M"],
+ focusenergy: ["3E"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L57"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ outrage: ["3E"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3L22"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M", "3L8"],
+ scaryface: ["3L36"],
+ screech: ["3L15"],
+ secretpower: ["3M"],
+ stomp: ["3E"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thrash: ["3L29"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ pupitar: {
+ learnset: {
+ attract: ["3M"],
+ bite: ["3L1"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ crunch: ["3L47"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ earthquake: ["3M", "3L56"],
+ facade: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L65"],
+ leer: ["3L1"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T", "3L22"],
+ rocksmash: ["3M"],
+ sandstorm: ["3M", "3L1"],
+ scaryface: ["3L38"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ thrash: ["3L29"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ },
+ },
+ tyranitar: {
+ learnset: {
+ aerialace: ["3M"],
+ attract: ["3M"],
+ bite: ["3L1"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ counter: ["3T"],
+ crunch: ["3L47"],
+ cut: ["3M"],
+ dig: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dragonclaw: ["3M"],
+ earthquake: ["3M", "3L61"],
+ facade: ["3M"],
+ fireblast: ["3M"],
+ flamethrower: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M", "3L75"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ leer: ["3L1"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ raindance: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rockslide: ["3T", "3L22"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ sandstorm: ["3M", "3L1"],
+ scaryface: ["3L38"],
+ screech: ["3L1"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shockwave: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ taunt: ["3M"],
+ thrash: ["3L29"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ },
+ },
+ lugia: {
+ learnset: {
+ aerialace: ["3M"],
+ aeroblast: ["3L77"],
+ ancientpower: ["3L88"],
+ blizzard: ["3M"],
+ bodyslam: ["3T"],
+ calmmind: ["3M"],
+ dive: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L99"],
+ gigadrain: ["3M"],
+ gust: ["3L22"],
+ hail: ["3M"],
+ hiddenpower: ["3M"],
+ hydropump: ["3L44"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irontail: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M", "3L55"],
+ recover: ["3L33"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ safeguard: ["3M", "3L11"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ steelwing: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ surf: ["3M"],
+ swift: ["3T", "3L66"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ waterfall: ["3M"],
+ waterpulse: ["3M"],
+ whirlwind: ["3L1"],
+ },
+ },
+ hooh: {
+ learnset: {
+ aerialace: ["3M"],
+ ancientpower: ["3L88"],
+ calmmind: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M"],
+ dreameater: ["3T"],
+ earthquake: ["3M"],
+ facade: ["3M"],
+ fireblast: ["3M", "3L44"],
+ flamethrower: ["3M"],
+ flash: ["3M"],
+ fly: ["3M"],
+ frustration: ["3M"],
+ futuresight: ["3L99"],
+ gigadrain: ["3M"],
+ gust: ["3L22"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ lightscreen: ["3M"],
+ mimic: ["3T"],
+ overheat: ["3M"],
+ protect: ["3M"],
+ psychic: ["3M"],
+ raindance: ["3M"],
+ recover: ["3L33"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ roar: ["3M"],
+ rocksmash: ["3M"],
+ sacredfire: ["3L77"],
+ safeguard: ["3M", "3L11"],
+ sandstorm: ["3M"],
+ secretpower: ["3M"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ solarbeam: ["3M"],
+ steelwing: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M", "3L55"],
+ swift: ["3T", "3L66"],
+ thunder: ["3M"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ toxic: ["3M"],
+ whirlwind: ["3L1"],
+ },
+ },
+ deoxysattack: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L35"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ cosmicpower: ["3L35"],
+ counter: ["3T"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L10"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3L50", "3M"],
+ icebeam: ["3M"],
+ leer: ["3L1"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ nightshade: ["3L5"],
+ protect: ["3M"],
+ psychic: ["3M", "3L25"],
+ psychoboost: ["3L45"],
+ pursuit: ["3L20"],
+ raindance: ["3M"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3M"],
+ solarbeam: ["3M"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ superpower: ["3L30"],
+ taunt: ["3L15", "3M"],
+ teleport: ["3L10"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L1"],
+ zapcannon: ["3L40"],
+ },
+ },
+ deoxysdefense: {
+ learnset: {
+ aerialace: ["3M"],
+ agility: ["3L35"],
+ amnesia: ["3L35"],
+ bodyslam: ["3T"],
+ brickbreak: ["3M"],
+ calmmind: ["3M"],
+ counter: ["3T", "3L50"],
+ cut: ["3M"],
+ doubleedge: ["3T"],
+ doubleteam: ["3M", "3L10"],
+ dreameater: ["3T"],
+ facade: ["3M"],
+ flash: ["3M"],
+ focuspunch: ["3M"],
+ frustration: ["3M"],
+ hiddenpower: ["3M"],
+ hyperbeam: ["3M"],
+ icebeam: ["3M"],
+ irondefense: ["3L35"],
+ knockoff: ["3L15"],
+ leer: ["3L1"],
+ lightscreen: ["3M"],
+ megakick: ["3T"],
+ megapunch: ["3T"],
+ mimic: ["3T"],
+ mirrorcoat: ["3L50"],
+ nightshade: ["3L5"],
+ protect: ["3M"],
+ psychic: ["3M", "3L25"],
+ psychoboost: ["3L45"],
+ raindance: ["3M"],
+ recover: ["3L40"],
+ reflect: ["3M"],
+ rest: ["3M"],
+ return: ["3M"],
+ rockslide: ["3T"],
+ rocksmash: ["3M"],
+ rocktomb: ["3M"],
+ safeguard: ["3M"],
+ secretpower: ["3M"],
+ seismictoss: ["3T"],
+ shadowball: ["3M"],
+ shockwave: ["3M"],
+ skillswap: ["3M"],
+ snatch: ["3L30", "3M"],
+ solarbeam: ["3M"],
+ spikes: ["3L20"],
+ strength: ["3M"],
+ substitute: ["3T"],
+ sunnyday: ["3M"],
+ taunt: ["3M"],
+ teleport: ["3L10"],
+ thunderbolt: ["3M"],
+ thunderwave: ["3T"],
+ torment: ["3M"],
+ toxic: ["3M"],
+ waterpulse: ["3M"],
+ wrap: ["3L1"],
+ },
+ },
+};
\ No newline at end of file
diff --git a/data/mods/gen3frlg/rulesets.ts b/data/mods/gen3frlg/rulesets.ts
new file mode 100644
index 0000000000..0dec9020f9
--- /dev/null
+++ b/data/mods/gen3frlg/rulesets.ts
@@ -0,0 +1,40 @@
+export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standard: {
+ effectType: 'ValidatorRule',
+ name: 'Standard',
+ desc: "The standard ruleset for all official Smogon singles tiers (Ubers, OU, etc.)",
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Clause Mod', 'Switch Priority Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Items Clause', 'Evasion Moves Clause',
+ ],
+ },
+ standarddraft: {
+ effectType: 'ValidatorRule',
+ name: 'Standard Draft',
+ desc: "The custom Draft League ruleset",
+ ruleset: [
+ 'Obtainable', 'Nickname Clause', 'Beat Up Nicknames Mod', '+Unreleased', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod',
+ 'One Boost Passer Clause', 'Freeze Clause Mod', 'Accuracy Moves Clause', 'Baton Pass Trap Clause',
+ ],
+ banlist: [
+ 'Uber', 'Smeargle + Ingrain', 'Swagger', 'Focus Band', 'King\'s Rock', 'Quick Claw', 'Baton Pass + Ancient Power', 'Baton Pass + Silver Wind',
+ ],
+ // timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true},
+ },
+ obtainable: {
+ inherit: true,
+ onValidateSet(set) {
+ const species = this.dex.species.get(set.species);
+ if (['entei', 'raikou', 'suicune'].includes(species.id)) {
+ if (!set.ivs) set.ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };
+ for (const stat in set.ivs) {
+ if ((stat === 'atk' && set.ivs[stat] > 7) || (stat !== 'hp' && set.ivs[stat as 'def'] > 0)) {
+ return [
+ `${set.name} must have 7 or fewer Attack IVs and 0 IVs in all other stats except HP, due to the Roaming IVs glitch.`,
+ ];
+ }
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/gen3frlg/scripts.ts b/data/mods/gen3frlg/scripts.ts
new file mode 100644
index 0000000000..bc67cbbb16
--- /dev/null
+++ b/data/mods/gen3frlg/scripts.ts
@@ -0,0 +1,3 @@
+export const Scripts: ModdedBattleScriptsData = {
+ inherit: 'gen3',
+};
From da0643cd4616ae01d3c924e6d27c58acc0695c88 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:32:19 -0600
Subject: [PATCH 170/233] Add AFD 2026 formats (#11876)
* Start AFD
* Create sets.json
this has been rather draining for me so far
i'll fix and finish it in time
* Update sets.json
* More stuff
* ewps
* Update sets.json
* Update sets.json
* Update sets.json
* Add some basic team gen logic
* Fix crashes
* Remove unncessary assertion
* OOPS!
* qwe
---------
Co-authored-by: ACakeWearingAHat <45981036+ACakeWearingAHat@users.noreply.github.com>
---
config/formats.ts | 24 +
data/mods/afd/abilities.ts | 231 ++++++++
data/mods/afd/conditions.ts | 22 +
data/mods/afd/items.ts | 93 +++
data/mods/afd/moves.ts | 626 ++++++++++++++++++++
data/mods/afd/pokedex.ts | 329 +++++++++++
data/mods/afd/random-teams.ts | 787 ++++++++++++++++++++++++
data/mods/afd/scripts.ts | 637 ++++++++++++++++++++
data/mods/afd/sets.json | 1052 +++++++++++++++++++++++++++++++++
data/mods/afd/typechart.ts | 49 ++
sim/battle.ts | 5 +-
sim/teams.ts | 2 +
12 files changed, 3855 insertions(+), 2 deletions(-)
create mode 100644 data/mods/afd/abilities.ts
create mode 100644 data/mods/afd/conditions.ts
create mode 100644 data/mods/afd/items.ts
create mode 100644 data/mods/afd/moves.ts
create mode 100644 data/mods/afd/pokedex.ts
create mode 100644 data/mods/afd/random-teams.ts
create mode 100644 data/mods/afd/scripts.ts
create mode 100644 data/mods/afd/sets.json
create mode 100644 data/mods/afd/typechart.ts
diff --git a/config/formats.ts b/config/formats.ts
index 66674f605e..d1f6606b2d 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -25,6 +25,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
section: "S/V Singles",
},
+ {
+ name: "[Gen 9] Live Patch Battles Ver 1.0.0",
+ threads: [`• https://twitter.com/pokemonpatches`],
+ mod: 'afd',
+ team: 'random',
+ ruleset: ['[Gen 9] Random Battle'],
+ },
{
name: "[Gen 9] Random Battle",
desc: `Randomized teams of Pokémon with sets that are generated to be competitively viable.`,
@@ -76,6 +83,23 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'],
},
+ {
+ name: "[Gen 9] Champoins OU",
+ mod: 'gen9',
+ ruleset: ['[Gen 9] OU',
+ '+Abomasite', '+Altarianite', '+Ampharosite', '+Banettite', '+Blastoisinite', '+Blazikenite', '+Cameruptite', '+Charizardite X', '+Charizardite Y',
+ '+Diancite', '+Galladite', '+Garchompite', '+Gardevoirite', '+Gengarite', '+Glalitite', '+Gyaradosite', '+Heracronite', '+Houndoominite', '+Latiasite',
+ '+Latiosite', '+Lucarionite', '+Medichamite', '+Metagrossite', '+Mewtwonite X', '+Mewtwonite Y', '+Sablenite', '+Salamencite', '+Sceptilite', '+Scizorite',
+ '+Slowbronite', '+Swampertite', '+Tyranitarite', '+Venusaurite',
+ // New Megas
+ '+Emboarite', '+Meganiumite', '+Greninjite', '+Delphoxite', '+Chesnaughtite', '+Dragoninite', '+Feraligite', '+Froslassite',
+ '+Abomasnow-Mega', '+Altaria-Mega', '+Ampharos-Mega', '+Banette-Mega', '+Blastoise-Mega', '+Blaziken-Mega', '+Camerupt-Mega', '+Charizard-Mega-X', '+Charizard-Mega-Y',
+ '+Diancie-Mega', '+Gallade-Mega', '+Garchomp-Mega', '+Gardevoir-Mega', '+Gengar-Mega', '+Glalie-Mega', '+Gyarados-Mega', '+Heracross-Mega', '+Houndoom-Mega', '+Latias-Mega',
+ '+Latios-Mega', '+Lucario-Mega', '+Medicham-Mega', '+Metagross-Mega', '+Mewtwo-Mega-X', '+Mewtwo-Mega-Y', '+Sableye-Mega', '+Salamence-Mega', '+Sceptile-Mega', '+Scizor-Mega',
+ '+Slowbro-Mega', '+Swampert-Mega', '+Tyranitar-Mega', '+Venusaur-Mega', '+Emboar-Mega', '+Meganium-Mega', '+Greninja-Mega', '+Delphox-Mega', '+Chesnaught-Mega', '+Dragonite-Mega',
+ '+Feraligatr-Mega', '+Froslass-Mega',
+ ],
+ },
{
name: "[Gen 9] Ubers",
mod: 'gen9',
diff --git a/data/mods/afd/abilities.ts b/data/mods/afd/abilities.ts
new file mode 100644
index 0000000000..f86b718bd7
--- /dev/null
+++ b/data/mods/afd/abilities.ts
@@ -0,0 +1,231 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ chaossaliva: {
+ onSourceDamagingHit(damage, target, source, move) {
+ // Despite not being a secondary, Shield Dust / Covert Cloak block Poison Touch's effect
+ if (target.hasAbility('shielddust') || target.hasItem('covertcloak')) return;
+ if (this.checkMoveMakesContact(move, target, source)) {
+ if (this.randomChance(2, 10)) {
+ target.trySetStatus('par', source);
+ }
+ if (this.randomChance(2, 10)) {
+ target.addVolatile('confusion', source);
+ }
+ }
+ },
+ flags: {},
+ name: "Chaos Saliva",
+ gen: 9,
+ shortDesc: "Contact moves have a 20% chance to paralyze and a 20% chance to confuse.",
+ },
+ faststart: {
+ onStart(pokemon) {
+ this.add('-start', pokemon, 'ability: Fast Start');
+ this.effectState.counter = 5;
+ },
+ onResidualOrder: 28,
+ onResidualSubOrder: 2,
+ onResidual(pokemon) {
+ if (pokemon.activeTurns && this.effectState.counter) {
+ this.effectState.counter--;
+ if (!this.effectState.counter) {
+ this.add('-end', pokemon, 'Fast Start');
+ delete this.effectState.counter;
+ }
+ }
+ },
+ onModifyAtkPriority: 5,
+ onModifyAtk(atk, pokemon) {
+ if (this.effectState.counter) {
+ return this.chainModify(2);
+ }
+ },
+ onModifySpe(spe, pokemon) {
+ if (this.effectState.counter) {
+ return this.chainModify(2);
+ }
+ },
+ onEnd(pokemon) {
+ if (pokemon.beingCalledBack) return;
+ this.add('-end', pokemon, 'Fast Start', '[silent]');
+ },
+ flags: {},
+ name: "Fast Start",
+ rating: -1,
+ gen: 9,
+ },
+ ironfist: {
+ inherit: true,
+ onBasePower(basePower, attacker, defender, move) {
+ if (move.flags['punch']) {
+ this.debug('Iron Fist boost');
+ return this.chainModify([8192, 4096]);
+ }
+ },
+ },
+ supermegalauncher: {
+ onBasePowerPriority: 19,
+ onBasePower(basePower, attacker, defender, move) {
+ if (move.flags['pulse']) {
+ return this.chainModify(4);
+ }
+ },
+ flags: {},
+ name: "Mega Launcher",
+ desc: "This Pokemon's pulse moves have their power multiplied by 4. Heal Pulse restores 8/4 of a target's maximum HP, rounded half down.",
+ shortDesc: "This Pokemon's pulse moves have 4x power. Heal Pulse heals 8/4 target's max HP.",
+ rating: 3,
+ gen: 9,
+ },
+ discourage: {
+ onStart(pokemon) {
+ let activated = false;
+ for (const target of pokemon.adjacentFoes()) {
+ if (!activated) {
+ this.add('-ability', pokemon, 'Discourage', 'boost');
+ activated = true;
+ }
+ if (target.volatiles['substitute']) {
+ this.add('-immune', target);
+ } else {
+ this.boost({ spa: -1 }, target, pokemon, null, true);
+ }
+ }
+ },
+ flags: {},
+ name: "Discourage",
+ rating: 3.5,
+ num: 999,
+ gen: 9,
+ },
+ adaptability: {
+ inherit: true,
+ onModifySTAB(stab, source, target, move) {
+ if (move.forceSTAB || source.hasType(move.type)) {
+ const types = source.getTypes();
+ if (types[0] === move.type) return 2.3;
+ if (types[1] && types[1] === move.type) return 1.6;
+ if (stab === 2.3) {
+ return 2.55;
+ }
+ return 2.7;
+ }
+ },
+ },
+ icebody: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (this.checkMoveMakesContact(move, source, target)) {
+ if (this.randomChance(1, 10)) {
+ source.trySetStatus('frz', target);
+ }
+ }
+ },
+ },
+ noretreat: {
+ onStart(target) {
+ this.add('-start', target, 'move: No Retreat');
+ },
+ onFoeBeforeSwitchOut(pokemon) {
+ if (!pokemon || pokemon.fainted || pokemon.hp <= 0 || pokemon.hasAbility('noretreat')) return;
+ const success = !!this.damage(pokemon.maxhp / 4, pokemon, this.effectState.target);
+ if (success) {
+ pokemon.tryTrap();
+ }
+ },
+ name: "No Retreat",
+ flags: { breakable: 1 },
+ },
+ itsexcadrillintime: {
+ onModifySpe(spe, pokemon) {
+ if (this.field.isWeather('sandstorm')) {
+ return this.chainModify(2);
+ }
+ },
+ onImmunity(type, pokemon) {
+ if (type === 'sandstorm') return false;
+ },
+ onBasePowerPriority: 21,
+ onBasePower(basePower, attacker, defender, move) {
+ if (this.field.isWeather('sandstorm')) {
+ if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') {
+ this.debug('Sand Force boost');
+ return this.chainModify([5325, 4096]);
+ }
+ }
+ },
+ name: "It's Excadrillin' Time!",
+ flags: {},
+ },
+ goodasgold: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (move.category !== 'Special' && target !== source) {
+ this.add('-immune', target, '[from] ability: Good as Gold');
+ return null;
+ }
+ },
+ },
+ intimidate2: {
+ onStart(pokemon) {
+ let activated = false;
+ let timesActivated = 0;
+ for (const target of pokemon.adjacentFoes()) {
+ if (!activated) {
+ this.add('-ability', pokemon, 'Intimidate 2', 'boost');
+ activated = true;
+ }
+ if (target.volatiles['substitute']) {
+ this.add('-immune', target);
+ } else {
+ this.boost({ atk: -1 }, target, pokemon, null, true);
+ timesActivated++;
+ }
+ }
+ if (timesActivated > 0) {
+ for (let i = 0; i < timesActivated; i++) {
+ this.boost({ atk: 1 }, pokemon, pokemon, null, true);
+ }
+ }
+ },
+ flags: {},
+ name: "Intimidate 2",
+ rating: 3.5,
+ num: 22,
+ },
+ asonemonarch: {
+ onSwitchInPriority: 1,
+ onStart(pokemon) {
+ if (this.effectState.unnerved) return;
+ this.add('-ability', pokemon, 'As One');
+ this.add('-ability', pokemon, 'Unnerve');
+ this.effectState.unnerved = true;
+ },
+ onEnd() {
+ this.effectState.unnerved = false;
+ },
+ onFoeTryEatItem() {
+ return !this.effectState.unnerved;
+ },
+ flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
+ name: "As One (Monarch)",
+ rating: 3.5,
+ num: 266,
+ },
+ intimidate: {
+ inherit: true,
+ onStart(pokemon) {
+ let activated = false;
+ for (const target of pokemon.adjacentFoes()) {
+ if (!activated) {
+ this.add('-ability', pokemon, 'Intimidate', 'boost');
+ activated = true;
+ }
+ if (target.volatiles['substitute']) {
+ this.add('-immune', target);
+ } else {
+ this.boost({ atk: -2 }, target, pokemon, null, true);
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/afd/conditions.ts b/data/mods/afd/conditions.ts
new file mode 100644
index 0000000000..12ee4b62c9
--- /dev/null
+++ b/data/mods/afd/conditions.ts
@@ -0,0 +1,22 @@
+export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
+ sandstorm: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (defender.hasItem('utilityumbrella')) return;
+ if (move.type === 'Rock') {
+ this.debug('Sandstorm rock boost');
+ return this.chainModify(1.5);
+ }
+ },
+ },
+ snowscape: {
+ inherit: true,
+ onModifySpePriority: 10,
+ onModifySpe(spe, pokemon) {
+ if (!pokemon.getTypes(false, true).includes('Ice') && !pokemon.getTypes(false, true).includes('Steel') &&
+ !pokemon.hasAbility(['slushrush', 'snowcloak', 'iceface', 'icebody']) && pokemon.effectiveWeather() === 'snowscape') {
+ return this.modify(spe, 0.5);
+ }
+ },
+ },
+};
diff --git a/data/mods/afd/items.ts b/data/mods/afd/items.ts
new file mode 100644
index 0000000000..1828254175
--- /dev/null
+++ b/data/mods/afd/items.ts
@@ -0,0 +1,93 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ hoots: {
+ name: "Hoots",
+ spritenum: 715,
+ fling: {
+ basePower: 80,
+ },
+ num: 1120,
+ gen: 8,
+ // Hazard Immunity implemented in moves.ts
+ },
+ luckycharm: {
+ name: "Lucky Charm",
+ onModifyMovePriority: -2,
+ onModifyMove(move, pokemon, target) {
+ let trigger = false;
+ if (move.secondaries) {
+ this.debug('doubling secondary chance');
+ for (const secondary of move.secondaries) {
+ if (secondary.chance && secondary.chance < 100) {
+ secondary.chance = 100;
+ if (!trigger) trigger = true;
+ }
+ }
+ }
+ if (move.self?.chance) {
+ move.self.chance = 100;
+ trigger = true;
+ }
+ if (trigger) {
+ pokemon.useItem();
+ }
+ },
+ spritenum: 707,
+ fling: {
+ basePower: 120,
+ },
+ num: 9999,
+ gen: 9,
+ },
+ onikaburger: {
+ name: "Onika Burger",
+ desc: "PP and damage of every move is halved. Gain 25% max HP at the end of each turn.",
+ shortDesc: "PP and damage of every move is halved. Gain 25% max HP at the end of each turn.",
+ onStart(target) {
+ if (target.m.onikaBurger) return;
+ target.m.onikaBurger = true;
+ for (const moveSlot of target.moveSlots) {
+ const deductPP = target.deductPP(moveSlot.id, moveSlot.maxpp / 2, target);
+ if (!deductPP) continue;
+ this.add('-activate', target, 'item: Onika Burger', moveSlot.move, deductPP);
+ }
+ },
+ onModifyDamage() {
+ return this.chainModify(0.5);
+ },
+ onResidualOrder: 5,
+ onResidualSubOrder: 4,
+ onResidual(pokemon) {
+ this.heal(pokemon.baseMaxhp / 4);
+ },
+ },
+ wardtag: {
+ name: "Ward Tag",
+ desc: "Reflects back 125% of the damage that would've been dealt. One-time use.",
+ shortDesc: "Reflects back 125% of the damage that would've been dealt. One-time use.",
+ onDamage(damage, target, source, effect) {
+ if (source && target !== source && effect?.effectType === 'Move' && target.useItem()) {
+ this.add('-activate', target, 'item: Ward Tag');
+ this.damage(damage * 5 / 4, source, target);
+ return 0;
+ }
+ },
+ },
+ strengthpolicy: {
+ name: "Strength Policy",
+ spritenum: 609,
+ fling: {
+ basePower: 80,
+ },
+ onDamagingHit(damage, target, source, move) {
+ if (!move.damage && !move.damageCallback && target.getMoveHitData(move).typeMod < 0) {
+ target.useItem();
+ }
+ },
+ boosts: {
+ def: 2,
+ spd: 2,
+ },
+ num: 639,
+ gen: 6,
+ },
+};
diff --git a/data/mods/afd/moves.ts b/data/mods/afd/moves.ts
new file mode 100644
index 0000000000..1bb56dbf5e
--- /dev/null
+++ b/data/mods/afd/moves.ts
@@ -0,0 +1,626 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ banefulbunker: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ 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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ source.trySetStatus('psn', target);
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ burningbulwark: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ source.trySetStatus('brn', target);
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ kingsshield: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ this.boost({ atk: -1 }, source, target, this.dex.getActiveMove("King's Shield"));
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ maxguard: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ const bypassesMaxGuard = [
+ 'acupressure', 'afteryou', 'allyswitch', 'aromatherapy', 'aromaticmist', 'coaching', 'confide', 'copycat', 'curse', 'decorate', 'doomdesire', 'feint', 'futuresight', 'gmaxoneblow', 'gmaxrapidflow', 'healbell', 'holdhands', 'howl', 'junglehealing', 'lifedew', 'meanlook', 'perishsong', 'playnice', 'powertrick', 'roar', 'roleplay', 'tearfullook',
+ ];
+ if (bypassesMaxGuard.includes(move.id)) return;
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ meteorbeam: {
+ inherit: true,
+ onTryMove(attacker, defender, move) {
+ if (attacker.removeVolatile(move.id)) {
+ return;
+ }
+ this.add('-prepare', attacker, move.name);
+ this.boost({ spa: 1 }, attacker, attacker, move);
+ if (['sandstorm'].includes(attacker.effectiveWeather())) {
+ this.attrLastMove('[still]');
+ this.addMove('-anim', attacker, move.name, defender);
+ return;
+ }
+ if (!this.runEvent('ChargeMove', attacker, defender, move)) {
+ return;
+ }
+ attacker.addVolatile('twoturnmove', defender);
+ return null;
+ },
+ },
+ obstruct: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ this.boost({ def: -2 }, source, target, this.dex.getActiveMove("Obstruct"));
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ protect: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ silktrap: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!move.flags['protect'] || move.category === 'Status') {
+ if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
+ return;
+ }
+ if (move.smartTarget) {
+ move.smartTarget = false;
+ } else {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ this.boost({ spe: -1 }, source, target, this.dex.getActiveMove("Silk Trap"));
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ spikyshield: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onTryHit(target, source, move) {
+ if (!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 {
+ if (!this.randomChance(2, 10)) {
+ this.add('-activate', target, 'move: Protect');
+ if (move.basePower >= 100) {
+ this.add('message', '**BWUAHAAUAAAANGGGGGG**');
+ }
+ } else {
+ return;
+ }
+ }
+ const lockedmove = source.getVolatile('lockedmove');
+ if (lockedmove) {
+ // Outrage counter is reset
+ if (source.volatiles['lockedmove'].duration === 2) {
+ delete source.volatiles['lockedmove'];
+ }
+ }
+ if (this.checkMoveMakesContact(move, source, target)) {
+ this.damage(source.baseMaxhp / 8, source, target);
+ }
+ return this.NOT_FAIL;
+ },
+ },
+ },
+ stealthrock: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'Stealth Rock');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 5) return false;
+ this.add('-sidestart', side, 'Stealth Rock');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (pokemon.hasItem(['heavydutyboots', 'hoots'])) return;
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
+ const damageAmounts = [0, 1, 2, 3, 4, 5]; // 2 ** typeMod / 8
+ this.damage((damageAmounts[this.effectState.layers] / 5) * pokemon.maxhp * ((2 ** typeMod) / 8));
+ },
+ },
+ },
+ gmaxsteelsurge: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'G-Max Steelsurge');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 5) return false;
+ this.add('-sidestart', side, 'G-Max Steelsurge');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (pokemon.hasItem(['heavydutyboots', 'hoots'])) return;
+ const steelHazard = this.dex.getActiveMove('Stealth Rock');
+ steelHazard.type = 'Steel';
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(steelHazard), -6, 6);
+ const damageAmounts = [0, 1, 2, 3, 4, 5]; // 2 ** typeMod / 8
+ this.damage((damageAmounts[this.effectState.layers] / 5) * pokemon.maxhp * ((2 ** typeMod) / 8));
+ },
+ },
+ },
+ spikes: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem(['heavydutyboots', 'hoots'])) return;
+ const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
+ this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
+ },
+ },
+ },
+ stickyweb: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem(['heavydutyboots', 'hoots'])) return;
+ this.add('-activate', pokemon, 'move: Sticky Web');
+ this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
+ },
+ },
+ },
+ toxicspikes: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded()) return;
+ if (pokemon.hasType('Poison')) {
+ this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`);
+ pokemon.side.removeSideCondition('toxicspikes');
+ } else if (pokemon.hasType('Steel') || pokemon.hasItem(['heavydutyboots', 'hoots'])) {
+ // do nothing
+ } else if (this.effectState.layers >= 2) {
+ pokemon.trySetStatus('tox', pokemon.side.foe.active[0]);
+ } else {
+ pokemon.trySetStatus('psn', pokemon.side.foe.active[0]);
+ }
+ },
+ },
+ },
+ suckerpunch: {
+ inherit: true,
+ onTry() { },
+ onModifyPriority(priority, source, target, move) {
+ if (!target) return priority - 1;
+ const action = this.queue.willMove(target);
+ const aMove = action?.choice === 'move' ? action.move : null;
+ if (!aMove || (aMove.category === 'Status' && aMove.id !== 'mefirst') || target.volatiles['mustrecharge']) {
+ return priority - 1;
+ }
+ return priority;
+ },
+ },
+ thousandarrows: {
+ inherit: true,
+ basePower: 120,
+ },
+ healpulse: {
+ inherit: true,
+ onHit(target, source) {
+ let success = false;
+ if (source.hasAbility('supermegalauncher')) {
+ success = !!this.heal(this.modify(target.baseMaxhp, 2));
+ } else if (source.hasAbility('megalauncher')) {
+ success = !!this.heal(this.modify(target.baseMaxhp, 0.75));
+ } else {
+ success = !!this.heal(Math.ceil(target.baseMaxhp * 0.5));
+ }
+ if (success && !target.isAlly(source)) {
+ target.staleness = 'external';
+ }
+ if (!success) {
+ this.add('-fail', target, 'heal');
+ return this.NOT_FAIL;
+ }
+ return success;
+ },
+ },
+ headsmash: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, heal: 1 },
+ secondary: {
+ chance: 100,
+ onHit(target, source, move) {
+ if (!this.heal(this.modify(target.baseMaxhp, 0.25))) {
+ return this.NOT_FAIL;
+ }
+ },
+ },
+ },
+ knockoff: {
+ inherit: true,
+ accuracy: 90,
+ },
+ shitpulse: {
+ num: -400,
+ gen: 9,
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ name: "Shit Pulse",
+ pp: 15,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, distance: 1, metronome: 1, pulse: 1 },
+ secondary: {
+ chance: 30,
+ boosts: {
+ accuracy: -2,
+ },
+ },
+ target: "any",
+ type: "Poison",
+ shortDesc: "30% chance to lower foe's accuracy by 2.",
+ },
+ solarflare: {
+ num: -4324534,
+ gen: 9,
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ name: "Solar Flare",
+ pp: 15,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ secondary: {
+ chance: 50,
+ onHit(target, source, move) {
+ if (!['sunnyday', 'desolateland'].includes(target.effectiveWeather())) return;
+ target.trySetStatus('brn', source, move);
+ },
+ },
+ target: "normal",
+ type: "Fire",
+ shortDesc: "Sun active: 50% chance to burn.",
+ },
+ onslaught: {
+ num: -3023,
+ gen: 9,
+ accuracy: 100,
+ basePower: 100,
+ category: "Physical",
+ name: "Onslaught",
+ pp: 5,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ self: {
+ boosts: {
+ atk: -1,
+ def: -1,
+ },
+ },
+ target: "normal",
+ type: "Dark",
+ },
+ scald: {
+ inherit: true,
+ onEffectiveness(typeMod, target, type) {
+ if (type === 'Steel') return 1;
+ },
+ secondary: undefined,
+ secondaries: [{
+ chance: 30,
+ status: 'brn',
+ }, {
+ chance: 100,
+ onHit(target, source, move) {
+ if (target.hasType(['Normal', 'Fairy'])) {
+ target.trySetStatus('brn', source, move);
+ }
+ },
+ }],
+ },
+ explosion: {
+ inherit: true,
+ onAfterMove(pokemon, target, move) {
+ if (target && target.hp <= 0) {
+ delete move.selfdestruct;
+ return;
+ }
+ },
+ },
+ selfdestruct: {
+ inherit: true,
+ onAfterMove(pokemon, target, move) {
+ if (target && target.hp <= 0) {
+ delete move.selfdestruct;
+ return;
+ }
+ },
+ },
+ mistyexplosion: {
+ inherit: true,
+ onAfterMove(pokemon, target, move) {
+ if (target && target.hp <= 0) {
+ delete move.selfdestruct;
+ return;
+ }
+ },
+ },
+ moonblast: {
+ inherit: true,
+ basePower: 90,
+ accuracy: 90,
+ secondary: {
+ chance: 10,
+ boosts: {
+ atk: -1,
+ },
+ },
+ category: "Physical",
+ },
+ noretreat: {
+ name: "No Retreat",
+ // @ts-expect-error
+ exists: false,
+ },
+ blastiodon: {
+ num: -306345534534523,
+ gen: 9,
+ accuracy: 100,
+ basePower: 0,
+ basePowerCallback(pokemon, target) {
+ const targetDef = target.getStat('def', false, true);
+ const pokemonDef = pokemon.getStat('def', false, true);
+ let bp;
+ if (pokemonDef >= targetDef * 5) {
+ bp = 150;
+ } else if (pokemonDef >= targetDef * 4) {
+ bp = 125;
+ } else if (pokemonDef >= targetDef * 3) {
+ bp = 100;
+ } else if (pokemonDef >= targetDef * 2) {
+ bp = 75;
+ } else {
+ bp = 50;
+ }
+ this.debug(`BP: ${bp}`);
+ return bp;
+ },
+ category: "Physical",
+ name: "Blastiodon",
+ pp: 15,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ overrideOffensiveStat: 'def',
+ secondary: {
+ chance: 50,
+ boosts: {
+ def: -1,
+ },
+ },
+ target: "normal",
+ type: "Rock",
+ shortDesc: "Higher user Def than target Def = higher BP.",
+ },
+ focusblast: {
+ inherit: true,
+ accuracy: 100,
+ recoil: [1, 4],
+ category: "Physical",
+ },
+ darkvoid: {
+ inherit: true,
+ onModifyMove(move, pokemon, target) {
+ if (pokemon.species.baseSpecies === 'Calyrex') {
+ move.accuracy = 80;
+ }
+ },
+ onTry(source, target, move) {
+ if (source.species.baseSpecies === 'Darkrai' || source.species.baseSpecies === 'Calyrex' || move.hasBounced) {
+ return;
+ }
+ this.add('-fail', source, 'move: Dark Void');
+ this.hint("Only a Pokemon whose form is Darkrai can use this move.");
+ return null;
+ },
+ },
+ rapidspin: {
+ inherit: true,
+ type: "Dark",
+ },
+};
diff --git a/data/mods/afd/pokedex.ts b/data/mods/afd/pokedex.ts
new file mode 100644
index 0000000000..69e614f9c6
--- /dev/null
+++ b/data/mods/afd/pokedex.ts
@@ -0,0 +1,329 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ seaking: {
+ inherit: true,
+ baseStats: { hp: 80, atk: 92, def: 65, spa: 65, spd: 80, spe: 98 },
+ },
+ clefablemega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ victreebelmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ starmiemega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ skarmorymega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ scolipedemega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ scraftymega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ emboarmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ eelektrossmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ chesnaughtmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ delphoxmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ greninjamega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ pyroarmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ barbaraclemega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ hawluchamega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ raichumegax: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ chimechomega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ baxcaliburmega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ zeraoramega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ absolmegaz: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ staraptormega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ golisopodmega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ meowsticfmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ crabominablemega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ golurkmega: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ garchompmegaz: {
+ inherit: true,
+ abilities: { 0: "Huge Power" },
+ },
+ lucariomegaz: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ raichumegay: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ falinksmega: {
+ inherit: true,
+ abilities: { 0: "No Retreat" },
+ },
+ drampamega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ zygardemega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ dragalgemega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ darkraimega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ heatranmega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ floettemega: {
+ inherit: true,
+ abilities: { 0: "Regenerator" },
+ },
+ chandeluremega: {
+ inherit: true,
+ abilities: { 0: "Shadow Tag" },
+ },
+ lickitung: {
+ inherit: true,
+ abilities: { 0: "Own Tempo", 1: "Oblivious", H: "Chaos Saliva" },
+ },
+ mewtwo: {
+ inherit: true,
+ abilities: { 0: "Pressure", 1: "Neuroforce", H: "Unnerve" },
+ },
+ scovillainmega: {
+ inherit: true,
+ abilities: { 0: "Contrary" },
+ },
+ mew: {
+ inherit: true,
+ abilities: { 0: "Synchronize", 1: "Neuroforce" },
+ },
+ smeargle: {
+ inherit: true,
+ abilities: { 0: "Own Tempo", 1: "Prankster", H: "Moody" },
+ },
+ swampert: {
+ inherit: true,
+ abilities: { 0: "Torrent", 1: "Sap Sipper", H: "Damp" },
+ },
+ bibarel: {
+ inherit: true,
+ baseStats: { hp: 159, atk: 85, def: 60, spa: 55, spd: 60, spe: 151 },
+ },
+ skuntank: {
+ inherit: true,
+ baseStats: { hp: 103, atk: 93, def: 67, spa: 106, spd: 61, spe: 84 },
+ abilities: { 0: "Stench", 1: "Aftermath", H: "Mega Launcher" },
+ },
+ rampardos: {
+ inherit: true,
+ baseStats: { hp: 97, atk: 225, def: 30, spa: 65, spd: 30, spe: 58 },
+ abilities: { 0: "Rocky Payload", H: "Sheer Force" },
+ },
+ gallademega: {
+ inherit: true,
+ abilities: { 0: "Sharpness" },
+ },
+ garchompmega: {
+ inherit: true,
+ abilities: { 0: "Sand Rush" },
+ },
+ dusknoir: {
+ inherit: true,
+ abilities: { 0: "Damp" },
+ },
+ lickilicky: {
+ inherit: true,
+ abilities: { 0: "Own Tempo", 1: "Oblivious", H: "Chaos Saliva" },
+ },
+ regigigas: {
+ inherit: true,
+ abilities: { 0: "Slow Start", H: "Fast Start" },
+ },
+ serperior: {
+ inherit: true,
+ types: ['Grass', 'Dragon'],
+ baseStats: { hp: 75, atk: 75, def: 95, spa: 105, spd: 95, spe: 113 },
+ },
+ simisage: {
+ inherit: true,
+ baseStats: { hp: 120, atk: 120, def: 120, spa: 120, spd: 120, spe: 120 },
+ },
+ excadrillmega: {
+ inherit: true,
+ abilities: { 0: "It's Excadrillin' Time!" },
+ },
+ chandelure: {
+ inherit: true,
+ abilities: { 0: "Flash Fire", 1: "Flame Body", H: "Shadow Tag" },
+ },
+ delphox: {
+ inherit: true,
+ abilities: { 0: "Blaze", H: "Discourage" },
+ },
+ clawitzer: {
+ inherit: true,
+ abilities: { 0: "Super Mega Launcher" },
+ },
+ malamar: {
+ inherit: true,
+ baseStats: { hp: 101, atk: 112, def: 88, spa: 68, spd: 75, spe: 73 },
+ },
+ malamarmega: {
+ inherit: true,
+ baseStats: { hp: 101, atk: 122, def: 88, spa: 98, spd: 120, spe: 88 },
+ abilities: { 0: "Contrary" },
+ },
+ incineroar: {
+ inherit: true,
+ types: ['Fire', 'Fighting'],
+ },
+ incineroar2: {
+ num: 2000,
+ name: "Incineroar 2",
+ types: ["Ghost", "Steel"],
+ genderRatio: { M: 0.875, F: 0.125 },
+ baseStats: { hp: 95, atk: 115, def: 90, spa: 80, spd: 90, spe: 60 },
+ abilities: { 0: "Intimidate 2" },
+ heightm: 1.8,
+ weightkg: 83,
+ color: "Red",
+ eggGroups: ["Field"],
+ },
+ celesteela: {
+ inherit: true,
+ baseStats: { hp: 5, atk: 5, def: 5, spa: 5, spd: 5, spe: 5 },
+ },
+ hatterene: {
+ inherit: true,
+ types: ['Psychic', 'Dark'],
+ },
+ glimmora: {
+ inherit: true,
+ baseStats: { hp: 106, atk: 150, def: 70, spa: 194, spd: 120, spe: 140 },
+ },
+ glimmoramega: {
+ inherit: true,
+ baseStats: { hp: 106, atk: 185, def: 85, spa: 214, spd: 145, spe: 155 },
+ abilities: { 0: "Regenerator" },
+ },
+ tatsugiri: {
+ inherit: true,
+ abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" },
+ },
+ tatsugiridroopy: {
+ inherit: true,
+ abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" },
+ },
+ tatsugiristretchy: {
+ inherit: true,
+ abilities: { 0: "Commander", 1: "Parental Bond", H: "Storm Drain" },
+ },
+ tatsugiricurlymega: {
+ inherit: true,
+ abilities: { 0: "Parental Bond" },
+ },
+ tatsugiridroopymega: {
+ inherit: true,
+ abilities: { 0: "Parental Bond" },
+ },
+ tatsugiristretchymega: {
+ inherit: true,
+ abilities: { 0: "Parental Bond" },
+ },
+ calyrex: {
+ num: 898,
+ name: "Calyrex",
+ types: ["Psychic", "Grass"],
+ gender: "N",
+ baseStats: { hp: 100, atk: 80, def: 80, spa: 80, spd: 80, spe: 80 },
+ abilities: { 0: "Unnerve" },
+ heightm: 1.1,
+ weightkg: 7.7,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ tags: ["Restricted Legendary"],
+ otherFormes: ["Calyrex-Ice", "Calyrex-Shadow", "Calyrex-Monarch"],
+ formeOrder: ["Calyrex", "Calyrex-Ice", "Calyrex-Shadow", "Calyrex-Monarch"],
+ },
+ calyrexmonarch: {
+ num: 898,
+ name: "Calyrex-Monarch",
+ baseSpecies: "Calyrex",
+ forme: "Monarch",
+ types: ["Psychic", "Grass"],
+ gender: "N",
+ baseStats: { hp: 200, atk: 160, def: 160, spa: 160, spd: 160, spe: 160 },
+ abilities: { 0: "As One (Calyrex)" },
+ heightm: 2.2,
+ weightkg: 15.4,
+ color: "Green",
+ eggGroups: ["Undiscovered"],
+ changesFrom: "Calyrex",
+ },
+ spidops: {
+ inherit: true,
+ baseStats: { hp: 100, atk: 100, def: 100, spa: 100, spd: 100, spe: 0 },
+ },
+};
diff --git a/data/mods/afd/random-teams.ts b/data/mods/afd/random-teams.ts
new file mode 100644
index 0000000000..e27058b0e2
--- /dev/null
+++ b/data/mods/afd/random-teams.ts
@@ -0,0 +1,787 @@
+import { Utils } from '../../../lib';
+import RandomTeams from '../../random-battles/gen9/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;
+ level?: number;
+}
+export class MoveCounter extends Utils.Multiset {
+ damagingMoves: Set;
+ basePowerMoves: Set;
+
+ constructor() {
+ super();
+ this.damagingMoves = new Set();
+ this.basePowerMoves = new Set();
+ }
+}
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch',
+];
+
+/** Pokemon who should never be in the lead slot */
+const NO_LEAD_POKEMON = [
+ 'Zacian', 'Zamazenta',
+];
+
+const DEFENSIVE_TERA_BLAST_USERS = [
+ 'alcremie', 'bellossom', 'comfey', 'fezandipiti', 'florges',
+];
+
+export class RandomAFDTeams extends RandomTeams {
+ override shouldCullAbility(
+ ability: string,
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): boolean {
+ switch (ability) {
+ // Abilities which are primarily useful for certain moves or with team support
+ case 'Chlorophyll': case 'Solar Power':
+ return !teamDetails.sun;
+ case 'Defiant':
+ return (species.id === 'thundurus' && !!counter.get('Status'));
+ case 'Hydration': case 'Swift Swim':
+ return !teamDetails.rain;
+ case 'Iron Fist': case 'Skill Link':
+ return !counter.get(toID(ability));
+ case 'Overgrow':
+ return !counter.get('Grass');
+ case 'Prankster':
+ return !counter.get('Status');
+ case 'Sand Force': case 'Sand Rush': case 'It\'s Excadrillin\' Time!':
+ return !teamDetails.sand;
+ case 'Slush Rush':
+ return !teamDetails.snow;
+ case 'Swarm':
+ return !counter.get('Bug');
+ case 'Torrent':
+ return (!counter.get('Water') && !moves.has('flipturn'));
+ }
+
+ return false;
+ }
+
+ override getAbility(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden';
+ if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire';
+ if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster';
+ if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link';
+ if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ override getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
+ return 'Booster Energy';
+ }
+ if (species.id === 'lokix') {
+ return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
+ }
+ if (species.requiredItems && species.baseSpecies !== 'Magearna') {
+ // Z-Crystals aren't available in Gen 9, so require Plates
+ if (species.baseSpecies === 'Arceus') {
+ return species.requiredItems[0];
+ }
+ return this.sample(species.requiredItems);
+ }
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (role === 'AV Pivot') return 'Assault Vest';
+ if (species.id === 'regieleki') return 'Magnet';
+ if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf';
+ if (
+ species.id === 'froslass' || moves.has('populationbomb') ||
+ (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2))
+ ) return 'Wide Lens';
+ if (species.id === 'smeargle') return 'Focus Sash';
+ if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray';
+ if (
+ (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') ||
+ ((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles)
+ ) return 'Weakness Policy';
+ if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf';
+ if (
+ !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker'))
+ ) return 'Choice Scarf';
+ if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf';
+ if (species.id === 'palkia' && counter.get('Status')) return 'Lustrous Orb';
+ if (
+ moves.has('courtchange') ||
+ !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest')))
+ ) return 'Hoots';
+ if (['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m)) {
+ return 'Sitrus Berry';
+ }
+ if (moves.has('bellydrum') || moves.has('filletaway')) return 'Ward Tag';
+ if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority')
+ ) {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew';
+ if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Hoots';
+ if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
+ if (species.nfe) return 'Eviolite';
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
+ return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
+ }
+ if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
+ if (ability === 'Anger Shell') return this.sample(['Expert Belt', 'Lum Berry', 'Scope Lens', 'Sitrus Berry']);
+ if (moves.has('dragondance') && isDoubles) return 'Clear Amulet';
+ if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
+ if (ability === 'Unburden') {
+ return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry';
+ }
+ if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
+ if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb';
+ if (moves.has('acrobatics') && ability !== 'Protosynthesis') return '';
+ if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;
+ if (species.id === 'giratina' && !isDoubles && moves.has('rest') && !moves.has('sleeptalk')) return 'Leftovers';
+ if (
+ moves.has('rest') && !moves.has('sleeptalk') &&
+ ability !== 'Natural Cure' && ability !== 'Shed Skin'
+ ) {
+ return 'Chesto Berry';
+ }
+ if (
+ species.id !== 'yanmega' &&
+ this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles)
+ ) return 'Hoots';
+ }
+
+ override getItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ const lifeOrbReqs = ['flamecharge', 'nuzzle', 'rapidspin'].every(m => !moves.has(m));
+
+ if (
+ species.id !== 'jirachi' && (counter.get('Physical') >= moves.size) &&
+ ['dragontail', 'fakeout', 'firstimpression', 'flamecharge', 'rapidspin', 'trailblaze'].every(m => !moves.has(m))
+ ) {
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ (species.baseStats.atk >= 100 || ability === 'Huge Power' || ability === 'Pure Power') &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ ability !== 'Speed Boost' && !counter.get('priority')
+ );
+ return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Band';
+ }
+ if (
+ (counter.get('Special') >= moves.size) ||
+ (counter.get('Special') >= moves.size - 1 && ['flipturn', 'uturn'].some(m => moves.has(m)))
+ ) {
+ const scarfReqs = (
+ role !== 'Wallbreaker' &&
+ species.baseStats.spa >= 100 &&
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ ability !== 'Speed Boost' && ability !== 'Tinted Lens' && !moves.has('uturn') && !counter.get('priority')
+ );
+ return (scarfReqs && this.randomChance(1, 2)) ? 'Choice Scarf' : 'Choice Specs';
+ }
+ if (counter.get('speedsetup') && !counter.get('physicalsetup') && role === 'Bulky Setup') return 'Weakness Policy';
+ if (
+ !counter.get('Status') &&
+ !['Fast Attacker', 'Wallbreaker', 'Tera Blast user'].includes(role)
+ ) {
+ return 'Assault Vest';
+ }
+ if (species.id === 'golem') return (counter.get('speedsetup')) ? 'Weakness Policy' : 'Custap Berry';
+ if (moves.has('substitute')) return 'Leftovers';
+ if (
+ moves.has('stickyweb') && isLead &&
+ (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) <= 235
+ ) return 'Focus Sash';
+ if (this.dex.getEffectiveness('Rock', species) >= 1) return 'Hoots';
+ if (
+ (moves.has('chillyreception') || (
+ role === 'Fast Support' &&
+ [...PIVOT_MOVES, 'defog', 'mortalspin', 'rapidspin'].some(m => moves.has(m)) &&
+ !types.includes('Flying') && ability !== 'Levitate'
+ ))
+ ) return 'Hoots';
+
+ // Low Priority
+ if (moves.has('dragondance') && role === 'Bulky Setup') return 'Weakness Policy';
+ if (
+ ability === 'Rough Skin' || (
+ ability === 'Regenerator' && (role === 'Bulky Support' || role === 'Bulky Attacker') &&
+ (species.baseStats.hp + species.baseStats.def) >= 180 && this.randomChance(1, 2)
+ ) || (
+ ability !== 'Regenerator' && !counter.get('setup') && counter.get('recovery') &&
+ this.dex.getEffectiveness('Fighting', species) < 1 &&
+ (species.baseStats.hp + species.baseStats.def) > 200 && this.randomChance(1, 2)
+ )
+ ) return 'Rocky Helmet';
+ if (role === 'Bulky Support') return 'Onika Burger';
+ if (moves.has('outrage') && counter.get('setup')) return 'Lum Berry';
+ if (moves.has('protect') && ability !== 'Speed Boost') return 'Leftovers';
+ if (
+ role === 'Fast Support' && isLead && !counter.get('recovery') && !counter.get('recoil') &&
+ (counter.get('hazards') || counter.get('setup')) &&
+ (species.baseStats.hp + species.baseStats.def + species.baseStats.spd) < 258
+ ) return 'Focus Sash';
+ if (
+ !counter.get('setup') && ability !== 'Levitate' && this.dex.getEffectiveness('Ground', species) >= 2
+ ) return 'Air Balloon';
+ if (['Bulky Attacker', 'Bulky Setup'].some(m => role === (m))) return 'Leftovers';
+ if (species.id === 'pawmot' && moves.has('nuzzle')) return 'Leppa Berry';
+ if (role === 'Fast Support' || role === 'Fast Bulky Setup') {
+ return (
+ counter.get('Physical') + counter.get('Special') > counter.get('Status') && lifeOrbReqs
+ ) ? 'Life Orb' : 'Leftovers';
+ }
+ if (role === 'Tera Blast user' && DEFENSIVE_TERA_BLAST_USERS.includes(species.id)) return 'Leftovers';
+ if (
+ lifeOrbReqs && ['Fast Attacker', 'Setup Sweeper', 'Tera Blast user', 'Wallbreaker'].some(m => role === (m))
+ ) return 'Life Orb';
+ return 'Leftovers';
+ }
+
+ override getLevel(species: Species): number {
+ if (this.adjustLevel) return this.adjustLevel;
+ const file = this.randomAFDSets[species.id] || this.randomSets[species.id];
+ if (file["level"]) return file["level"];
+ // Default to tier-based levelling
+ const tier = species.tier;
+ const tierScale: Partial> = {
+ Uber: 76,
+ OU: 80,
+ UUBL: 81,
+ UU: 82,
+ RUBL: 83,
+ RU: 84,
+ NUBL: 85,
+ NU: 86,
+ PUBL: 87,
+ PU: 88, "(PU)": 88, NFE: 88,
+ };
+ return tierScale[tier] || 80;
+ }
+
+ override getForme(species: Species): string {
+ if (typeof species.battleOnly === 'string') {
+ // Only change the forme. The species has custom moves, and may have different typing and requirements.
+ return species.battleOnly;
+ }
+ if (species.cosmeticFormes) return this.sample([species.name].concat(species.cosmeticFormes));
+
+ // Consolidate mostly-cosmetic formes, at least for the purposes of Random Battles
+ if (['Dudunsparce', 'Maushold', 'Polteageist', 'Sinistcha', 'Zarude'].includes(species.baseSpecies)) {
+ return this.sample([species.name].concat(species.otherFormes!));
+ }
+ if (species.baseSpecies === 'Basculin') return 'Basculin' + this.sample(['', '-Blue-Striped']);
+ if (species.baseSpecies === 'Magearna') return 'Magearna' + this.sample(['', '-Original']);
+ if (species.baseSpecies === 'Pikachu') {
+ return 'Pikachu' + this.sample(
+ ['', '-Original', '-Hoenn', '-Sinnoh', '-Unova', '-Kalos', '-Alola', '-Partner', '-World']
+ );
+ }
+ return species.name;
+ }
+
+ randomAFDSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ const forme = this.getForme(species);
+ if (!this.randomAFDSets[species.id]) return this.randomSet(species, teamDetails, isLead, isDoubles);
+ const sets = this.randomAFDSets[species.id]["sets"];
+ const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
+
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
+ const abilities = set.abilities!;
+ if (
+ isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
+ set.role === 'Fast Bulky Setup'
+ ) continue;
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
+ continue;
+ }
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = [];
+ for (const movename of set.movepool) {
+ movePool.push(this.dex.moves.get(movename).id);
+ }
+ const teraTypes = set.teraTypes!;
+ let teraType = this.sampleIfArray(teraTypes);
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 };
+ const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
+ const counter = this.queryMoves(moves, species, teraType, abilities);
+
+ // Get ability
+ ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+ if (item === undefined) {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ }
+
+ // Get level
+ const level = this.getLevel(species);
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots' || item === 'Hoots';
+ let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ // Crash damage move users want an odd HP to survive two misses
+ if (['axekick', 'highjumpkick', 'jumpkick', 'supercellslam'].some(m => moves.has(m))) srWeakness = 2;
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if ((moves.has('substitute') && ['Sitrus Berry'].includes(item)) || species.id === 'minior') {
+ // Two Substitutes should activate Sitrus Berry. Two switch-ins to Stealth Rock should activate Shields Down on Minior.
+ if (hp % 4 === 0) break;
+ } else if (
+ (moves.has('bellydrum') || moves.has('filletaway') || moves.has('shedtail')) &&
+ (item === 'Sitrus Berry' || ability === 'Gluttony')
+ ) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (moves.has('substitute') && moves.has('endeavor')) {
+ // Luvdisc should be able to Substitute down to very low HP
+ if (hp % 4 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins in singles
+ if (isDoubles) break;
+ if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ // Physical Tera Blast
+ if (
+ move.id === 'terablast' && (species.id === 'porygon2' || ['Contrary', 'Defiant'].includes(ability) ||
+ moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+ if (
+ noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
+ !ruleTable.has('forceofthefallenmod')
+ ) {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (moves.has('gyroball') || moves.has('trickroom')) {
+ evs.spe = 0;
+ ivs.spe = 0;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ let name = species.baseSpecies;
+ if (name === "Bruxish") name = "Brux";
+ return {
+ name,
+ species: forme,
+ speciesId: species.id,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ /**
+ * Checks if the new species is compatible with the other mons currently on the team.
+ */
+ override getPokemonCompatibility(
+ species: Species,
+ pokemon: RandomTeamsTypes.RandomSet[]
+ ): boolean {
+ const webSetters = [
+ 'ariados', 'smeargle', 'masquerain', 'kricketune', 'leavanny', 'galvantula', 'vikavolt', 'ribombee', 'araquanid', 'spidops',
+ ];
+ const screenSetters = ['meowstic', 'grimmsnarl', 'ninetalesalola', 'abomasnow'];
+
+ const sunSetters = ['ninetales', 'torkoal', 'groudon', 'koraidon'];
+
+ const incompatiblePokemon = [
+ // These Pokemon with support roles are considered too similar to each other.
+ ['blissey', 'chansey'],
+ ['illumise', 'volbeat'],
+
+ // These combinations are prevented to avoid double webs or screens.
+ [webSetters, webSetters],
+ [screenSetters, screenSetters],
+
+ // These Pokemon are incompatible because the presence of one actively harms the other.
+ // Prevent Dry Skin + sun setting ability
+ ['toxicroak', sunSetters],
+ ];
+
+ const incompatibilityList = incompatiblePokemon;
+ for (const pair of incompatibilityList) {
+ const monsArrayA = (Array.isArray(pair[0])) ? pair[0] : [pair[0]];
+ const monsArrayB = (Array.isArray(pair[1])) ? pair[1] : [pair[1]];
+ if (monsArrayB.includes(species.id)) {
+ if (pokemon.some(m => monsArrayA.includes(m.speciesId!))) return false;
+ }
+ if (monsArrayA.includes(species.id)) {
+ if (pokemon.some(m => monsArrayB.includes(m.speciesId!))) return false;
+ }
+ }
+
+ return true;
+ }
+
+ randomAFDSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json');
+
+ override randomTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.getSeed();
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // PotD stuff
+ const usePotD = global.Config && Config.potd && ruleTable.has('potd');
+ const potd = usePotD ? this.dex.species.get(Config.potd) : null;
+
+ const baseFormes: { [k: string]: number } = {};
+
+ const typeCount: { [k: string]: number } = {};
+ const typeComboCount: { [k: string]: number } = {};
+ const typeWeaknesses: { [k: string]: number } = {};
+ const typeDoubleWeaknesses: { [k: string]: number } = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const afdList = Object.keys(this.randomAFDSets);
+ const zaMegaList = Object.keys(this.randomAFDSets).filter(x => (
+ this.dex.species.get(x).isMega && this.dex.species.get(x).gen === 9
+ ));
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool('', pokemon, false, pokemonList);
+ const [afdPool, baseAfdPool] = this.getPokemonPool('', pokemon, false, afdList);
+ const [zaMegaPool, zaBaseMegaPool] = this.getPokemonPool('', pokemon, false, zaMegaList);
+
+ let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ let baseSpecies, species;
+ if (pokemon.length === 0) {
+ baseSpecies = this.sampleNoReplace(zaBaseMegaPool);
+ species = this.dex.species.get(this.sample(zaMegaPool[baseSpecies]));
+ } else if (this.randomChance(1, 5)) {
+ baseSpecies = this.sampleNoReplace(baseAfdPool);
+ species = this.dex.species.get(this.sample(afdPool[baseSpecies]));
+ } else {
+ baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+ }
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already
+ if (['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id) && teamDetails.teraBlast) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ const weakToScald = (
+ this.dex.getEffectiveness('Water', species) > 0 ||
+ (this.dex.getEffectiveness('Water', species) > -2 && types.includes('Steel'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ let skip = false;
+
+ // Limit two of any type
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 * limitFactor) continue;
+ }
+ if (weakToScald) {
+ if (!typeWeaknesses['Scald']) typeWeaknesses['Scald'] = 0;
+ if (typeWeaknesses['Scald'] >= 4 * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+
+ // Check compatibility with team
+ if (!this.getPokemonCompatibility(species, pokemon)) continue;
+
+ // The Pokemon of the Day
+ if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
+
+ let set: RandomTeamsTypes.RandomSet;
+
+ if (leadsRemaining) {
+ if (NO_LEAD_POKEMON.includes(species.baseSpecies)) {
+ if (pokemon.length + leadsRemaining === this.maxTeamSize) continue;
+ set = this.randomAFDSet(species, teamDetails, false);
+ pokemon.push(set);
+ } else {
+ set = this.randomAFDSet(species, teamDetails, true);
+ pokemon.unshift(set);
+ leadsRemaining--;
+ }
+ } else {
+ set = this.randomAFDSet(species, teamDetails, false);
+ pokemon.push(set);
+ }
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+ if (typeCombo in typeComboCount) {
+ typeComboCount[typeCombo]++;
+ } else {
+ typeComboCount[typeCombo] = 1;
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+ if (weakToScald) typeWeaknesses['Scald']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Track what the team has
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) {
+ teamDetails.sun = 1;
+ }
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
+ teamDetails.snow = 1;
+ }
+ if (set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) {
+ teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ }
+ if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ if (set.role === 'Tera Blast user' || ['ogerpon', 'ogerponhearthflame', 'terapagos'].includes(species.id)) {
+ teamDetails.teraBlast = 1;
+ }
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomAFDTeams;
diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts
new file mode 100644
index 0000000000..1ead17e5ce
--- /dev/null
+++ b/data/mods/afd/scripts.ts
@@ -0,0 +1,637 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ init() {
+ for (const id in this.data.Pokedex) {
+ const species = this.data.Pokedex[id];
+ if (species.isCosmeticForme) continue;
+ if (species.types.includes('Ground')) {
+ if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.thousandarrows = ['9L1'];
+ }
+ if (species.types.includes('Grass') && !species.types.includes('Fire')) {
+ if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.solarflare = ['9L1'];
+ }
+ if (species.baseStats['atk'] >= 130) {
+ let hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
+ Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
+ if (!this.modData('Pokedex', id).abilities['1'] && !hasHP) {
+ this.modData('Pokedex', id).abilities['1'] = 'Huge Power';
+ }
+ hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
+ Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
+ if (!this.modData('Pokedex', id).abilities['H'] && !hasHP) {
+ this.modData('Pokedex', id).abilities['H'] = 'Huge Power';
+ }
+ hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
+ Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
+ if (!this.modData('Pokedex', id).abilities['S'] && !hasHP) {
+ this.modData('Pokedex', id).abilities['S'] = 'Huge Power';
+ }
+ }
+ let hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
+ if (!this.modData('Pokedex', id).abilities['1'] && !hasRegen) {
+ this.modData('Pokedex', id).abilities['1'] = 'Regenerator';
+ }
+ hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
+ if (!this.modData('Pokedex', id).abilities['H'] && !hasRegen) {
+ this.modData('Pokedex', id).abilities['H'] = 'Regenerator';
+ }
+ hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
+ if (!this.modData('Pokedex', id).abilities['S'] && !hasRegen) {
+ this.modData('Pokedex', id).abilities['S'] = 'Regenerator';
+ }
+ }
+ this.modData('Learnsets', 'tyranitar').learnset.shoreup = ['9L1'];
+ this.modData('Learnsets', 'bastiodon').learnset.blastiodon = ['9L1'];
+ this.modData('Learnsets', 'seaking').learnset.boltbeak = ['9L1'];
+ this.modData('Learnsets', 'seaking').learnset.fishiousrend = ['9L1'];
+ this.modData('Learnsets', 'ampharos').learnset.tailglow = ['9L1'];
+ this.modData('Learnsets', 'ampharos').learnset.dracometeor = ['9L1'];
+ this.modData('Learnsets', 'serperior').learnset.dracometeor = ['9L1'];
+ this.modData('Learnsets', 'serperior').learnset.overheat = ['9L1'];
+ this.modData('Learnsets', 'serperior').learnset.makeitrain = ['9L1'];
+ this.modData('Learnsets', 'rampardos').learnset.accelerock = ['9L1'];
+ this.modData('Learnsets', 'bibarel').learnset.bellydrum = ['9L1'];
+ this.modData('Learnsets', 'bibarel').learnset.storedpower = ['9L1'];
+ this.modData('Learnsets', 'bibarel').learnset.powertrip = ['9L1'];
+ this.modData('Learnsets', 'golisopod').learnset.bellydrum = ['9L1'];
+ this.modData('Learnsets', 'skuntank').learnset.shitpulse = ['9L1'];
+ this.modData('Learnsets', 'dusknoir').learnset = { explosion: ['9L1'] };
+ for (const move of this.moves.all()) {
+ if (move.flags['bite']) {
+ this.modData('Learnsets', 'bruxish').learnset[move.id] = ['9L1'];
+ }
+ }
+ for (const moveid in this.data.Learnsets['incineroar'].learnset) {
+ if (this.moves.get(moveid).type === 'Dark') {
+ delete this.modData('Learnsets', 'incineroar').learnset[moveid];
+ }
+ }
+ },
+ actions: {
+ runMegaEvo(pokemon: Pokemon) {
+ const speciesid = pokemon.canMegaEvo || pokemon.canUltraBurst;
+ if (!speciesid) return false;
+
+ pokemon.formeChange(speciesid, pokemon.getItem(), true);
+
+ // Limit one mega evolution
+ pokemon.canMegaEvo = null;
+
+ this.battle.runEvent('AfterMega', pokemon);
+ return true;
+ },
+ switchIn(pokemon, pos, sourceEffect = null, isDrag) {
+ if (!pokemon || pokemon.isActive) {
+ this.battle.hint("A switch failed because the Pokémon trying to switch in is already in.");
+ return false;
+ }
+
+ const side = pokemon.side;
+ if (pos >= side.active.length) {
+ throw new Error(`Invalid switch position ${pos} / ${side.active.length}`);
+ }
+ const oldActive = side.active[pos];
+ const unfaintedActive = oldActive?.hp ? oldActive : null;
+ if (unfaintedActive) {
+ oldActive.beingCalledBack = true;
+ let switchCopyFlag: 'copyvolatile' | 'shedtail' | boolean = false;
+ if (sourceEffect && typeof (sourceEffect as Move).selfSwitch === 'string') {
+ switchCopyFlag = (sourceEffect as Move).selfSwitch!;
+ }
+ if (!oldActive.skipBeforeSwitchOutEventFlag && !isDrag) {
+ this.battle.runEvent('BeforeSwitchOut', oldActive);
+ if (this.battle.gen >= 5) {
+ this.battle.eachEvent('Update');
+ }
+ }
+ oldActive.skipBeforeSwitchOutEventFlag = false;
+ if (!this.battle.runEvent('SwitchOut', oldActive)) {
+ // Warning: DO NOT interrupt a switch-out if you just want to trap a pokemon.
+ // To trap a pokemon and prevent it from switching out, (e.g. Mean Look, Magnet Pull)
+ // use the 'trapped' flag instead.
+
+ // Note: Nothing in the real games can interrupt a switch-out (except Pursuit KOing,
+ // which is handled elsewhere); this is just for custom formats.
+ return false;
+ }
+ if (!oldActive.hp) {
+ // a pokemon fainted from Pursuit before it could switch
+ return 'pursuitfaint';
+ }
+
+ // will definitely switch out at this point
+
+ this.battle.singleEvent('End', oldActive.getAbility(), oldActive.abilityState, oldActive);
+ this.battle.singleEvent('End', oldActive.getItem(), oldActive.itemState, oldActive);
+
+ // if a pokemon is forced out by Whirlwind/etc or Eject Button/Pack, it can't use its chosen move
+ this.battle.queue.cancelAction(oldActive);
+
+ let newMove = null;
+ if (this.battle.gen === 4 && sourceEffect) {
+ newMove = oldActive.lastMove;
+ }
+ if (switchCopyFlag) {
+ pokemon.copyVolatileFrom(oldActive, switchCopyFlag);
+ }
+ if (newMove) pokemon.lastMove = newMove;
+ oldActive.clearVolatile();
+ }
+ if (oldActive) {
+ oldActive.isActive = false;
+ oldActive.isStarted = false;
+ oldActive.usedItemThisTurn = false;
+ oldActive.statsRaisedThisTurn = false;
+ oldActive.statsLoweredThisTurn = false;
+ oldActive.position = pokemon.position;
+ if (oldActive.fainted) oldActive.status = '';
+ if (this.battle.gen <= 4) {
+ pokemon.lastItem = oldActive.lastItem;
+ oldActive.lastItem = '';
+ }
+ pokemon.position = pos;
+ side.pokemon[pokemon.position] = pokemon;
+ side.pokemon[oldActive.position] = oldActive;
+ }
+ pokemon.isActive = true;
+ side.active[pos] = pokemon;
+ pokemon.activeTurns = 0;
+ pokemon.activeMoveActions = 0;
+ for (const moveSlot of pokemon.moveSlots) {
+ moveSlot.used = false;
+ }
+ pokemon.abilityState = this.battle.initEffectState({ id: pokemon.ability, target: pokemon });
+ pokemon.itemState = this.battle.initEffectState({ id: pokemon.item, target: pokemon });
+ this.battle.runEvent('BeforeSwitchIn', pokemon);
+ if (sourceEffect) {
+ this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getFullDetails, `[from] ${sourceEffect}`);
+ } else {
+ this.battle.add(isDrag ? 'drag' : 'switch', pokemon, pokemon.getFullDetails);
+ }
+ if (isDrag && this.battle.gen === 2) pokemon.draggedIn = this.battle.turn;
+ pokemon.previouslySwitchedIn++;
+
+ if (isDrag && this.battle.gen >= 5) {
+ // runSwitch happens immediately so that Mold Breaker can make hazards bypass Clear Body and Levitate
+ this.runSwitch(pokemon);
+ } else {
+ this.battle.queue.insertChoice({ choice: 'runSwitch', pokemon });
+ }
+
+ if (pokemon.hasType('Flying')) {
+ this.battle.field.addPseudoWeather('Tailwind', pokemon);
+ }
+
+ return true;
+ },
+ useMoveInner(moveOrMoveName, pokemon, options) {
+ let target = options?.target;
+ let sourceEffect = options?.sourceEffect;
+ const zMove = options?.zMove;
+ const maxMove = options?.maxMove;
+ if (!sourceEffect && this.battle.effect.id) sourceEffect = this.battle.effect;
+ if (sourceEffect && ['instruct', 'custapberry'].includes(sourceEffect.id)) sourceEffect = null;
+
+ let move = this.dex.getActiveMove(moveOrMoveName);
+ pokemon.lastMoveUsed = move;
+ if (move.id === 'weatherball' && zMove) {
+ // Z-Weather Ball only changes types if it's used directly,
+ // not if it's called by Z-Sleep Talk or something.
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ if (move.type !== 'Normal') sourceEffect = move;
+ }
+ if (zMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isZ)) {
+ move = this.getActiveZMove(move, pokemon);
+ }
+ if (maxMove && move.category !== 'Status') {
+ // Max move outcome is dependent on the move type after type modifications from ability and the move itself
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ this.battle.runEvent('ModifyType', pokemon, target, move, move);
+ }
+ if (maxMove || (move.category !== 'Status' && sourceEffect && (sourceEffect as ActiveMove).isMax)) {
+ move = this.getActiveMaxMove(move, pokemon);
+ }
+
+ if (this.battle.activeMove) {
+ move.priority = this.battle.activeMove.priority;
+ if (!move.hasBounced) move.pranksterBoosted = this.battle.activeMove.pranksterBoosted;
+ }
+ const baseTarget = move.target;
+ let targetRelayVar = { target };
+ targetRelayVar = this.battle.runEvent('ModifyTarget', pokemon, target, move, targetRelayVar, true);
+ if (targetRelayVar.target !== undefined) target = targetRelayVar.target;
+ if (target === undefined) target = this.battle.getRandomTarget(pokemon, move);
+ if (move.target === 'self' || move.target === 'allies') {
+ target = pokemon;
+ }
+ if (sourceEffect) {
+ move.sourceEffect = sourceEffect.id;
+ move.ignoreAbility = (sourceEffect as ActiveMove).ignoreAbility;
+ }
+ let moveResult = false;
+
+ this.battle.setActiveMove(move, pokemon, target);
+
+ this.battle.singleEvent('ModifyType', move, null, pokemon, target, move, move);
+ this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move);
+ if (baseTarget !== move.target) {
+ // Target changed in ModifyMove, so we must adjust it here
+ // Adjust before the next event so the correct target is passed to the
+ // event
+ target = this.battle.getRandomTarget(pokemon, move);
+ }
+ move = this.battle.runEvent('ModifyType', pokemon, target, move, move);
+ move = this.battle.runEvent('ModifyMove', pokemon, target, move, move);
+ if (baseTarget !== move.target) {
+ // Adjust again
+ target = this.battle.getRandomTarget(pokemon, move);
+ }
+ if (!move || pokemon.fainted) {
+ return false;
+ }
+
+ let attrs = '';
+
+ let movename = move.name;
+ if (move.id === 'hiddenpower') movename = 'Hidden Power';
+ if (sourceEffect) attrs += `|[from] ${sourceEffect.fullname}`;
+ if (zMove && move.isZ === true) {
+ attrs = `|[anim]${movename}${attrs}`;
+ movename = `Z-${movename}`;
+ }
+ this.battle.addMove('move', pokemon, movename, `${target}${attrs}`);
+
+ if (zMove) this.runZPower(move, pokemon);
+
+ if (!target) {
+ this.battle.attrLastMove('[notarget]');
+ this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
+ return false;
+ }
+
+ const { targets, pressureTargets } = pokemon.getMoveTargets(move, target);
+ if (targets.length) {
+ target = targets[targets.length - 1]; // in case of redirection
+ }
+
+ const callerMoveForPressure = sourceEffect && (sourceEffect as ActiveMove).pp ? sourceEffect as ActiveMove : null;
+ if (!sourceEffect || callerMoveForPressure || sourceEffect.id === 'pursuit') {
+ let extraPP = 0;
+ for (const source of pressureTargets) {
+ const ppDrop = this.battle.runEvent('DeductPP', source, pokemon, move);
+ if (ppDrop !== true) {
+ extraPP += ppDrop || 0;
+ }
+ }
+ if (extraPP > 0) {
+ pokemon.deductPP(callerMoveForPressure || moveOrMoveName, extraPP);
+ }
+ }
+
+ let tryMoveResult = this.battle.singleEvent('TryMove', move, null, pokemon, target, move);
+ if (tryMoveResult) {
+ tryMoveResult = this.battle.runEvent('TryMove', pokemon, target, move);
+ }
+ if (!tryMoveResult) {
+ move.mindBlownRecoil = false;
+ return tryMoveResult;
+ }
+
+ this.battle.singleEvent('UseMoveMessage', move, null, pokemon, target, move);
+
+ if (move.ignoreImmunity === undefined) {
+ move.ignoreImmunity = (move.category === 'Status');
+ }
+
+ if (this.battle.gen !== 4 && move.selfdestruct === 'always') {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+
+ let damage: number | false | undefined | '' = false;
+ if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') {
+ damage = this.tryMoveHit(targets, pokemon, move);
+ if (damage === this.battle.NOT_FAIL) pokemon.moveThisTurnResult = null;
+ if (damage || damage === 0 || damage === undefined) moveResult = true;
+ } else {
+ if (!targets.length) {
+ this.battle.attrLastMove('[notarget]');
+ this.battle.add(this.battle.gen >= 5 ? '-fail' : '-notarget', pokemon);
+ return false;
+ }
+ if (this.battle.gen === 4 && move.selfdestruct === 'always') {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+ moveResult = this.trySpreadMoveHit(targets, pokemon, move);
+ }
+ if (move.selfBoost && moveResult) this.moveHit(pokemon, pokemon, move, move.selfBoost, false, true);
+ if (!pokemon.hp) {
+ this.battle.faint(pokemon, pokemon, move);
+ }
+
+ if (!moveResult) {
+ this.battle.singleEvent('MoveFail', move, null, target, pokemon, move);
+ return false;
+ }
+
+ if (!(move.hasSheerForce && pokemon.hasAbility('sheerforce')) && !move.flags['futuremove']) {
+ const originalHp = pokemon.hp;
+ this.battle.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move);
+ this.battle.runEvent('AfterMoveSecondarySelf', pokemon, target, move);
+ if (pokemon && pokemon !== target && move.category !== 'Status') {
+ if (pokemon.hp <= pokemon.maxhp / 2 && originalHp > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon, pokemon);
+ }
+ }
+ }
+
+ return true;
+ },
+ canTerastallize(pokemon: Pokemon) {
+ if (this.dex.gen !== 9) {
+ return null;
+ }
+ return pokemon.teraType;
+ },
+ canMegaEvo(pokemon) {
+ const species = pokemon.baseSpecies;
+ const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]);
+ const item = pokemon.getItem();
+ // Mega Rayquaza
+ if ((this.battle.gen <= 7 || this.battle.ruleTable.has('+pokemontag:past') ||
+ this.battle.ruleTable.has('+pokemontag:future')) &&
+ altForme?.isMega && altForme?.requiredMove &&
+ pokemon.baseMoves.includes(this.battle.toID(altForme.requiredMove)) && !item.zMove) {
+ return altForme.name;
+ }
+ if (species.baseSpecies === 'Magearna' && !species.isMega) {
+ return species.name.includes('Original') ? 'Magearna-Original-Mega' : 'Magearna-Mega';
+ }
+ if (!item.megaStone) return null;
+ return item.megaStone[species.name];
+ },
+ modifyDamage(baseDamage, pokemon, target, move, suppressMessages = false) {
+ const tr = this.battle.trunc;
+ if (!move.type) move.type = '???';
+ const type = move.type;
+
+ baseDamage += 2;
+
+ if (move.spreadHit) {
+ // multi-target modifier (doubles only)
+ const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
+ this.battle.debug(`Spread modifier: ${spreadModifier}`);
+ baseDamage = this.battle.modify(baseDamage, spreadModifier);
+ } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
+ // Parental Bond modifier
+ const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5;
+ this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
+ baseDamage = this.battle.modify(baseDamage, bondModifier);
+ }
+
+ // weather modifier
+ baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
+
+ // crit - not a modifier
+ const isCrit = target.getMoveHitData(move).crit;
+ if (isCrit) {
+ baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
+ }
+
+ // random factor - also not a modifier
+ baseDamage = this.battle.randomizer(baseDamage);
+
+ // STAB
+ // The "???" type never gets STAB
+ // Not even if you Roost in Gen 4 and somehow manage to use
+ // Struggle in the same turn.
+ // (On second thought, it might be easier to get a MissingNo.)
+ if (type !== '???') {
+ let stab: number | [number, number] = 1;
+
+ const pokeTypes = pokemon.getTypes(false, true);
+ const isPrimarySTAB = move.forceSTAB || (pokemon.hasType(type) && pokeTypes[0] === type);
+ const isSecondarySTAB = move.forceSTAB || (pokemon.hasType(type) && pokeTypes.length > 1 && pokeTypes[1] === type);
+ const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
+ if (isPrimarySTAB) {
+ stab = 1.7;
+ }
+ if (isSecondarySTAB) {
+ stab = 1.2;
+ }
+
+ // The Stellar tera type makes this incredibly confusing
+ // If the move's type does not match one of the user's base types,
+ // the Stellar tera type applies a one-time 1.2x damage boost for that type.
+ //
+ // If the move's type does match one of the user's base types,
+ // then the Stellar tera type applies a one-time 2x STAB boost for that type,
+ // and then goes back to using the regular 1.5x STAB boost for those types.
+ if (pokemon.terastallized === 'Stellar') {
+ if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
+ stab = isSTAB ? 2.3 : [4915, 4096];
+ move.stellarBoosted = true;
+ if (pokemon.species.name !== 'Terapagos-Stellar') {
+ pokemon.stellarBoostedTypes.push(type);
+ }
+ }
+ } else {
+ if (pokemon.terastallized === type && pokeTypes.includes(type)) {
+ stab = 2.3;
+ }
+ stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
+ }
+
+ baseDamage = this.battle.modify(baseDamage, stab);
+ }
+
+ // types
+ let typeMod = target.runEffectiveness(move);
+ typeMod = this.battle.clampIntRange(typeMod, -6, 6);
+ target.getMoveHitData(move).typeMod = typeMod;
+ if (typeMod > 0) {
+ if (!suppressMessages) this.battle.add('-supereffective', target);
+
+ for (let i = 0; i < typeMod; i++) {
+ baseDamage *= 2;
+ }
+ }
+ if (typeMod < 0) {
+ if (!suppressMessages) this.battle.add('-resisted', target);
+
+ for (let i = 0; i > typeMod; i--) {
+ baseDamage = tr(baseDamage / 2);
+ }
+ }
+
+ if (isCrit && !suppressMessages) this.battle.add('-crit', target);
+
+ if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+
+ if (pokemon.status === 'psn' && move.category === 'Special') {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+
+ // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
+ if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
+
+ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
+ baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
+
+ 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);
+ },
+ getDamage(source, target, move, suppressMessages = false) {
+ if (typeof move === 'string') move = this.dex.getActiveMove(move);
+
+ if (typeof move === 'number') {
+ const basePower = move;
+ move = new Dex.Move({
+ basePower,
+ type: '???',
+ category: 'Physical',
+ willCrit: false,
+ }) as ActiveMove;
+ move.hit = 0;
+ }
+
+ if (!target.runImmunity(move, !suppressMessages)) {
+ return false;
+ }
+
+ if (move.ohko) return this.battle.gen === 3 ? target.hp : target.maxhp;
+ if (move.damageCallback) return move.damageCallback.call(this.battle, source, target);
+ if (move.damage === 'level') {
+ return source.level;
+ } else if (move.damage) {
+ return move.damage;
+ }
+
+ let category = this.battle.getCategory(move);
+
+ let basePower: number | false | null = move.basePower;
+ if (move.basePowerCallback) {
+ basePower = move.basePowerCallback.call(this.battle, source, target, move);
+ }
+ if (!basePower) return basePower === 0 ? undefined : basePower;
+ basePower = this.battle.clampIntRange(basePower, 1);
+ if (move.type === 'Electric' && move.category === 'Physical') {
+ basePower += 15;
+ category = 'Special';
+ }
+
+ let critMult;
+ let critRatio = this.battle.runEvent('ModifyCritRatio', source, target, move, move.critRatio || 0);
+ if (this.battle.gen <= 5) {
+ critRatio = this.battle.clampIntRange(critRatio, 0, 5);
+ critMult = [0, 16, 8, 4, 3, 2];
+ } else {
+ critRatio = this.battle.clampIntRange(critRatio, 0, 4);
+ if (this.battle.gen === 6) {
+ critMult = [0, 16, 8, 2, 1];
+ } else {
+ critMult = [0, 24, 8, 2, 1];
+ }
+ }
+
+ const moveHit = target.getMoveHitData(move);
+ moveHit.crit = move.willCrit || false;
+ if (move.willCrit === undefined) {
+ if (critRatio) {
+ moveHit.crit = this.battle.randomChance(1, critMult[critRatio]);
+ }
+ }
+
+ if (moveHit.crit) {
+ moveHit.crit = this.battle.runEvent('CriticalHit', target, null, move);
+ }
+
+ // happens after crit calculation
+ basePower = this.battle.runEvent('BasePower', source, target, move, basePower, true);
+
+ if (!basePower) return 0;
+ basePower = this.battle.clampIntRange(basePower, 1);
+ // Hacked Max Moves have 0 base power, even if you Dynamax
+ if ((!source.volatiles['dynamax'] && move.isMax) || (move.isMax && this.dex.moves.get(move.baseMove).isMax)) {
+ basePower = 0;
+ }
+
+ const dexMove = this.dex.moves.get(move.id);
+ if (source.terastallized && (source.terastallized === 'Stellar' ?
+ !source.stellarBoostedTypes.includes(move.type) : source.hasType(move.type)) &&
+ basePower < 60 && dexMove.priority <= 0 && !dexMove.multihit &&
+ // Hard move.basePower check for moves like Dragon Energy that have variable BP
+ !((move.basePower === 0 || move.basePower === 150) && move.basePowerCallback)
+ ) {
+ basePower = 60;
+ }
+
+ const level = source.level;
+
+ const attacker = move.overrideOffensivePokemon === 'target' ? target : source;
+ const defender = move.overrideDefensivePokemon === 'source' ? source : target;
+
+ const isPhysical = move.category === 'Physical';
+ let attackStat: StatIDExceptHP = move.overrideOffensiveStat || (isPhysical ? 'atk' : 'spa');
+ const defenseStat: StatIDExceptHP = move.overrideDefensiveStat || (isPhysical ? 'def' : 'spd');
+
+ const statTable = { atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe' };
+
+ let atkBoosts = attacker.boosts[attackStat];
+ let defBoosts = defender.boosts[defenseStat];
+
+ let ignoreNegativeOffensive = !!move.ignoreNegativeOffensive;
+ let ignorePositiveDefensive = !!move.ignorePositiveDefensive;
+
+ if (moveHit.crit) {
+ ignoreNegativeOffensive = true;
+ ignorePositiveDefensive = true;
+ }
+ const ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0));
+ const ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0));
+
+ if (ignoreOffensive) {
+ this.battle.debug('Negating (sp)atk boost/penalty.');
+ atkBoosts = 0;
+ }
+ if (ignoreDefensive) {
+ this.battle.debug('Negating (sp)def boost/penalty.');
+ defBoosts = 0;
+ }
+
+ let attack = attacker.calculateStat(attackStat, atkBoosts, 1, source);
+ let defense = defender.calculateStat(defenseStat, defBoosts, 1, target);
+
+ attackStat = (category === 'Physical' ? 'atk' : 'spa');
+
+ // Apply Stat Modifiers
+ attack = this.battle.runEvent('Modify' + statTable[attackStat], source, target, move, attack);
+ defense = this.battle.runEvent('Modify' + statTable[defenseStat], target, source, move, defense);
+
+ if (this.battle.gen <= 4 && ['explosion', 'selfdestruct'].includes(move.id) && defenseStat === 'def') {
+ defense = this.battle.clampIntRange(Math.floor(defense / 2), 1);
+ }
+
+ const tr = this.battle.trunc;
+
+ // int(int(int(2 * L / 5 + 2) * A * P / D) / 50);
+ const baseDamage = tr(tr(tr(tr(2 * level / 5 + 2) * basePower * attack) / defense) / 50);
+
+ // Calculate damage modifiers separately (order differs between generations)
+ return this.modifyDamage(baseDamage, source, target, move, suppressMessages);
+ },
+ },
+};
diff --git a/data/mods/afd/sets.json b/data/mods/afd/sets.json
new file mode 100644
index 0000000000..8e440de574
--- /dev/null
+++ b/data/mods/afd/sets.json
@@ -0,0 +1,1052 @@
+{
+ "clefablemega": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Dazzling Gleam", "Flamethrower", "Moonlight", "Stealth Rock", "Thunder Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "victreebelmega": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Knock Off", "Power Whip", "Sludge Bomb", "Strength Sap"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "starmiemega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aqua Jet", "Bulk Up", "Triple Axel", "Waterfall", "Zen Headbutt"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Flip Turn", "Rapid Spin", "Recover", "Zen Headbutt"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "dragonitemega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Air Slash", "Draco Meteor", "Fire Blast", "Hurricane", "Iron Head", "Roost"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "meganiummega": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Solar Beam", "Synthesis", "Weather Ball"],
+ "abilities": ["Mega Sol"],
+ "teraTypes": ["Fire", "Ghost"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Encore", "Solar Beam", "Synthesis", "Solar Flare"],
+ "abilities": ["Mega Sol"],
+ "teraTypes": ["Fire", "Ghost"]
+ }
+ ]
+ },
+ "feraligatrmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Body Slam", "Double-Edge", "Dragon Dance", "Earthquake", "Liquidation"],
+ "abilities": ["Dragonize"],
+ "teraTypes": ["Dragon", "Ghost"]
+ }
+ ]
+ },
+ "emboarmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bulk Up", "Drain Punch", "Flare Blitz", "Trailblaze"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "skarmorymega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brave Bird", "Drill Run", "Roost", "Swords Dance"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "froslassmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aurora Veil", "Blizzard", "Nasty Plot", "Shadow Ball"],
+ "abilities": ["Snow Warning"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "excadrillmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Iron Head", "Rock Slide", "Sandstorm", "Thousand Arrows"],
+ "abilities": ["It's Excadrillin' Time!"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "scolipedemega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Megahorn", "Poison Jab", "Protect", "Swords Dance"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "scraftymega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Drain Punch", "Knock Off", "Poison Jab"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "eelektrossmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Flamethrower", "Giga Drain", "Volt Switch", "Wild Charge"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "chandeluremega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Fire Blast", "Flame Charge", "Shadow Ball"],
+ "abilities": ["Shadow Tag"],
+ "teraTypes": ["Fairy", "Ghost", "Grass"]
+ }
+ ]
+ },
+ "chesnaughtmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Synthesis", "Wood Hammer"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "delphoxmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Fire Blast", "Grass Knot", "Nasty Plot", "Psyshock"],
+ "abilities": ["Discourage"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "greninjamega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Gunk Shot", "Hydro Pump", "Ice Beam"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "pyroarmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Dark Pulse", "Fire Blast", "Hyper Voice", "Will-O-Wisp"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "floettemega": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dazzling Gleam", "Protect", "Wish"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "malamarmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Knock Off", "Rest", "Sleep Talk", "Superpower"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "barbaraclemega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Cross Chop", "Earthquake", "Liquidation", "Shell Smash", "Stone Edge"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "dragalgemega": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Draco Meteor", "Flip Turn", "Sludge Wave", "Toxic", "Toxic Spikes"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hawluchamega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Brave Bird", "Drain Punch", "Swords Dance", "Throat Chop"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "zygardemega": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Core Enforcer", "Earth Power", "Glare", "Sludge Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "drampamega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Defog", "Draco Meteor", "Fire Blast", "Glare", "Hyper Voice", "Roost"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "falinksmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Body Slam", "Close Combat", "Knock Off", "Swords Dance"],
+ "abilities": ["No Retreat"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "raichumegax": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Body Slam", "Encore", "Knock Off", "Nuzzle", "Play Rough", "Volt Switch", "Volt Tackle"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Dark", "Fairy", "Normal"]
+ }
+ ]
+ },
+ "raichumegay": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Encore", "Grass Knot", "Nuzzle", "Surf", "Volt Switch", "Volt Tackle"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Grass", "Water"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Encore", "Grass Knot", "Nasty Plot", "Surf", "Volt Tackle"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Grass", "Water"]
+ }
+ ]
+ },
+ "chimechomega": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Cosmic Power", "Dazzling Gleam", "Recover", "Stored Power"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "baxcaliburmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dragon Dance", "Earthquake", "Glaive Rush", "Icicle Crash"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "zeraoramega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Plasma Fists"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "absolmegaz": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "Play Rough", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "lucariomegaz": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Flash Cannon", "Nasty Plot"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "garchompmegaz": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Double-Edge", "Outrage", "Swords Dance", "Thousand Arrows"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Fire Blast", "Stealth Rock", "Thousand Arrows"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "golurkmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Ice Punch", "Poltergeist", "Stealth Rock", "Thousand Arrows"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Steel"]
+ }
+ ]
+ },
+ "crabominablemega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Earthquake", "Ice Hammer"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "meowsticfmega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Alluring Voice", "Nasty Plot", "Psychic", "Psyshock", "Shadow Ball"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "golisopodmega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "First Impression", "Iron Head", "Pain Split", "Spikes"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Close Combat", "Iron Head", "Leech Life"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "staraptormega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Brave Bird", "Close Combat", "Thief", "U-turn"],
+ "abilities": ["Huge Power"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "tatsugiricurlymega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Pulse", "Hydro Pump", "Nasty Plot", "Rapid Spin"],
+ "abilities": ["Parental Bond"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "glimmoramega": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Earth Power", "Meteor Beam", "Sandstorm", "Sludge Wave"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "magearnamega": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Aura Sphere", "Flash Cannon", "Fleur Cannon", "Agility"],
+ "abilities": ["Soul-Heart"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "heatranmega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Earth Power", "Heavy Slam", "Lava Plume", "Magma Storm", "Stealth Rock"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "darkraimega": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dark Pulse", "Sludge Bomb", "Will-O-Wisp"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "scovillainmega": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Giga Drain", "Leaf Storm", "Leech Seed", "Overheat"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "noivern": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Boomburst", "Draco Meteor", "Flamethrower", "Hurricane", "U-turn"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["Defog", "Draco Meteor", "Boomburst", "Roost"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "kingambit": {
+ "level": 74,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Iron Head", "Low Kick", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Supreme Overlord"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "tatsugiri": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Dragon Pulse", "Hydro Pump", "Nasty Plot", "Rapid Spin"],
+ "abilities": ["Parental Bond"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "lickilicky": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Slam", "Knock Off", "Protect", "Wish"],
+ "abilities": ["Chaos Saliva"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Body Slam", "Dragon Tail", "Earthquake", "Explosion", "Knock Off", "Power Whip"],
+ "abilities": ["Chaos Saliva"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Slam", "Earthquake", "Explosion", "Knock Off", "Power Whip", "Swords Dance"],
+ "abilities": ["Chaos Saliva"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "skuntank": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dark Pulse", "Fire Blast", "Nasty Plot", "Shit Pulse"],
+ "abilities": ["Mega Launcher"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hatterene": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Dark Pulse", "Draining Kiss", "Psyshock"],
+ "abilities": ["Magic Bounce"],
+ "teraTypes": ["Fairy"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Nuzzle", "Dark Pulse", "Draining Kiss", "Psyshock"],
+ "abilities": ["Magic Bounce", "Regenerator"],
+ "teraTypes": ["Fairy"]
+ }
+ ]
+ },
+ "clawitzer": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Dragon Pulse", "Water Pulse"],
+ "abilities": ["Super Mega Launcher"],
+ "teraTypes": ["Dragon"]
+ }
+ ]
+ },
+ "conkeldurr": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Mach Punch"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Drain Punch", "Ice Punch", "Mach Punch", "Mega Punch"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Ghost", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Ice Punch", "Mach Punch", "Swords Dance"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "smeargle": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Spore", "Sticky Web", "Stealth Rock", "Topsy-Turvy"],
+ "abilities": ["Prankster"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "hippowdon": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Roar", "Slack Off", "Stealth Rock", "Thousand Arrows"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "tinglu": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["Spikes", "Stealth Rock", "Thousand Arrows", "Whirlwind"],
+ "abilities": ["Vessel of Ruin"],
+ "teraTypes": ["Ghost", "Steel"]
+ }
+ ]
+ },
+ "spidops": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Circle Throw", "First Impression", "Sucker Punch", "U-turn"],
+ "abilities": ["Regenerator", "Stakeout"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Circle Throw", "First Impression", "Sticky Web", "Sucker Punch", "U-turn"],
+ "abilities": ["Regenerator", "Stakeout"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "regidrago": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Dragon Dance", "Earthquake", "Explosion", "Outrage"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Normal"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Dragon Energy", "Earthquake", "Explosion"],
+ "abilities": ["Dragon's Maw"],
+ "teraTypes": ["Dragon", "Normal"]
+ }
+ ]
+ },
+ "minior": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Acrobatics", "Earthquake", "Explosion", "Shell Smash"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Normal"]
+ }
+ ]
+ },
+ "calyrexmonarch": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Dark Void", "Leaf Storm", "Photon Geyser"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "celesteela": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Explosion", "Leech Seed", "Metal Sound", "Stealth Rock"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "dusknoir": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Explosion"],
+ "abilities": ["Damp"],
+ "teraTypes": ["Dark"]
+ }
+ ]
+ },
+ "regigigas": {
+ "level": 65,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Body Slam", "Crush Grip", "Drain Punch", "Knock Off"],
+ "abilities": ["Fast Start"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "incineroar2": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Gigaton Hammer", "Poltergeist", "Shadow Sneak", "U-turn"],
+ "abilities": ["Intimidate 2"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Close Combat", "Gigaton Hammer", "King's Shield", "Poltergeist"],
+ "abilities": ["Intimidate 2"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Gigaton Hammer", "King's Shield", "Poltergeist", "Shadow Sneak"],
+ "abilities": ["Intimidate 2"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "incineroar": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "AV Pivot",
+ "movepool": ["Close Combat", "Fake Out", "Flare Blitz", "U-turn"],
+ "abilities": ["Intimidate"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "bibarel": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Body Slam", "Power Trip", "Stored Power", "Work Up"],
+ "abilities": ["Simple"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Body Slam", "Power Trip", "Waterfall"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Dark", "Ghost"]
+ }
+ ]
+ },
+ "tapufini": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dazzling Gleam", "Misty Explosion", "Surf"],
+ "abilities": ["Misty Surge"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Belly Drum", "Body Slam", "Power Trip", "Waterfall"],
+ "abilities": ["Unaware"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "swampert": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Ice Punch", "Liquidation", "Thousand Arrows"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Flip Turn", "Knock Off", "Stealth Rock", "Thousand Arrows"],
+ "abilities": ["Sap Sipper"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "serperior": {
+ "level": 77,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Draco Meteor", "Leaf Storm", "Overheat", "Synthesis"],
+ "abilities": ["Contrary"],
+ "teraTypes": ["Dragon", "Fire", "Ghost"]
+ }
+ ]
+ },
+ "rampardos": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Accelerock", "Earthquake", "Head Smash", "Stone Edge"],
+ "abilities": ["Rocky Payload"],
+ "teraTypes": ["Rock"]
+ }
+ ]
+ },
+ "simisage": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Gunk Shot", "Leaf Storm", "Superpower", "Synthesis"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost", "Poison"]
+ }
+ ]
+ },
+ "bruxish": {
+ "level": 75,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Crunch", "Fishious Rend", "Flip Turn", "Psychic Fangs"],
+ "abilities": ["Strong Jaw"],
+ "teraTypes": ["Water"]
+ }
+ ]
+ },
+ "mewtwo": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Aura Sphere", "Dark Pulse", "Fire Blast", "Nasty Plot", "Psystrike", "Recover"],
+ "abilities": ["Neuroforce"],
+ "teraTypes": ["Dark", "Fighting", "Fire", "Psychic"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Dark", "Fairy", "Steel"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"],
+ "abilities": ["Neuroforce"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"],
+ "abilities": ["Neuroforce"],
+ "teraTypes": ["Dark", "Fighting", "Fire", "Ground", "Psychic", "Water"]
+ }
+ ]
+ },
+ "honchkrow": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Brave Bird", "Heat Wave", "Sucker Punch", "U-turn"],
+ "abilities": ["Moxie", "Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "cacturne": {
+ "level": 92,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Knock Off", "Leaf Storm", "Spikes", "Sucker Punch", "Toxic Spikes"],
+ "abilities": ["Regenerator", "Water Absorb"],
+ "teraTypes": ["Ghost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Seed Bomb", "Sucker Punch", "Swords Dance"],
+ "abilities": ["Water Absorb"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "brutebonnet": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Close Combat", "Seed Bomb", "Spore", "Sucker Punch"],
+ "abilities": ["Protosynthesis"],
+ "teraTypes": ["Fighting", "Ghost"]
+ }
+ ]
+ },
+ "ampharosmega": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Dragon Pulse", "Tail Glow", "Thunderbolt", "Trailblaze"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Electric", "Ghost"]
+ }
+ ]
+ },
+ "gallademega": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Night Slash", "Psycho Cut", "Sacred Sword", "Swords Dance"],
+ "abilities": ["Sharpness"],
+ "teraTypes": ["Dark", "Fighting", "Ghost"]
+ }
+ ]
+ },
+ "infernape": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Fire Punch", "Mach Punch", "Swords Dance"],
+ "abilities": ["Iron Fist"],
+ "teraTypes": ["Ghost", "Fighting"]
+ }
+ ]
+ },
+ "tyranitar": {
+ "level": 78,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Dark Pulse", "Fire Blast", "Hydro Pump", "Ice Beam", "Meteor Beam", "Shore Up", "Thunder Wave"],
+ "abilities": ["Sand Stream"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "bastiodon": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Blastiodon", "Body Press", "Foul Play", "Iron Defense"],
+ "abilities": ["Regenerator"],
+ "teraTypes": ["Ghost"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Bolt Beak", "Fishious Rend", "Flip Turn", "Megahorn"],
+ "abilities": ["Lightning Rod", "Regenerator"],
+ "teraTypes": ["Electric"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Agility", "Bolt Beak", "Fishious Rend", "Megahorn"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Electric"]
+ }
+ ]
+ }
+}
diff --git a/data/mods/afd/typechart.ts b/data/mods/afd/typechart.ts
new file mode 100644
index 0000000000..2e2a8dd73a
--- /dev/null
+++ b/data/mods/afd/typechart.ts
@@ -0,0 +1,49 @@
+export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
+ fairy: {
+ damageTaken: {
+ Bug: 2,
+ Dark: 2,
+ Dragon: 3,
+ Electric: 0,
+ Fairy: 0,
+ Fighting: 2,
+ Fire: 0,
+ Flying: 0,
+ Ghost: 0,
+ Grass: 0,
+ Ground: 0,
+ Ice: 0,
+ Normal: 1,
+ Poison: 1,
+ Psychic: 0,
+ Rock: 0,
+ Steel: 1,
+ Stellar: 0,
+ Water: 0,
+ },
+ },
+ ghost: {
+ inherit: true,
+ damageTaken: {
+ Bug: 3,
+ Dark: 2,
+ Dragon: 2,
+ Electric: 2,
+ Fairy: 3,
+ Fighting: 3,
+ Fire: 2,
+ Flying: 3,
+ Ghost: 3,
+ Grass: 2,
+ Ground: 3,
+ Ice: 2,
+ Normal: 3,
+ Poison: 3,
+ Psychic: 2,
+ Rock: 3,
+ Steel: 3,
+ Stellar: 0,
+ Water: 2,
+ },
+ },
+};
diff --git a/sim/battle.ts b/sim/battle.ts
index a2b5909d36..a333409db3 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -2644,8 +2644,9 @@ export class Battle {
// (instead of compounding every time `getActionSpeed` is called)
let priority = this.dex.moves.get(move.id).priority;
// Grassy Glide priority
- priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, null, null, priority);
- priority = this.runEvent('ModifyPriority', action.pokemon, null, move, priority);
+ const target = this.getTarget(action.pokemon, action.move, action.targetLoc);
+ priority = this.singleEvent('ModifyPriority', move, null, action.pokemon, target, null, priority);
+ priority = this.runEvent('ModifyPriority', action.pokemon, target, move, priority);
action.priority = priority + action.fractionalPriority;
// In Gen 6, Quick Guard blocks moves with artificially enhanced priority.
if (this.gen > 5) action.move.priority = priority;
diff --git a/sim/teams.ts b/sim/teams.ts
index 39a419ed32..ac0f03d9c2 100644
--- a/sim/teams.ts
+++ b/sim/teams.ts
@@ -632,6 +632,8 @@ export const Teams = new class Teams {
const formatID = toID(format);
if (mod === 'gen9ssb') {
TeamGenerator = require(`../data/mods/gen9ssb/random-teams`).default;
+ } else if (mod === 'afd') {
+ TeamGenerator = require(`../data/mods/afd/random-teams`).default;
} else if (formatID.includes('gen9babyrandombattle')) {
TeamGenerator = require(`../data/random-battles/gen9baby/teams`).default;
} else if (formatID.includes('gen9randombattle') && format.ruleTable?.has('+pokemontag:cap')) {
From ca6228da030922d88f14dfc78beaaebabd41d359 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:34:35 -0600
Subject: [PATCH 171/233] Add URL for Champoins OU
---
config/formats.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/config/formats.ts b/config/formats.ts
index d1f6606b2d..f5c3a890c5 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -85,6 +85,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
{
name: "[Gen 9] Champoins OU",
+ thread: [`Champoins OU Discussion`],
mod: 'gen9',
ruleset: ['[Gen 9] OU',
'+Abomasite', '+Altarianite', '+Ampharosite', '+Banettite', '+Blastoisinite', '+Blazikenite', '+Cameruptite', '+Charizardite X', '+Charizardite Y',
From 03fcdad5c0cbf38732a4511876ef736a2bd0c591 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:34:48 -0600
Subject: [PATCH 172/233] Fix typo
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index f5c3a890c5..bcd1f48558 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -85,7 +85,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
{
name: "[Gen 9] Champoins OU",
- thread: [`Champoins OU Discussion`],
+ threads: [`Champoins OU Discussion`],
mod: 'gen9',
ruleset: ['[Gen 9] OU',
'+Abomasite', '+Altarianite', '+Ampharosite', '+Banettite', '+Blastoisinite', '+Blazikenite', '+Cameruptite', '+Charizardite X', '+Charizardite Y',
From 60f74aa00c9b8c37aaac8141d0b28e65bbff3ed5 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:38:45 -0600
Subject: [PATCH 173/233] Fix another typo
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index bcd1f48558..cc972d0333 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -695,7 +695,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "STAAABmons",
+ name: "[Gen 9] STAAABmons",
desc: `Pokémon have access to almost any ability and can use any move of their typing, in addition to the moves they can normally learn.`,
mod: 'gen9',
ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'],
From 7b841a13f8a1de4f8cc00beca7ce2429b24fed7b Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 03:46:23 -0600
Subject: [PATCH 174/233] Remove crashy code
---
data/mods/afd/scripts.ts | 29 -----------------------------
1 file changed, 29 deletions(-)
diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts
index 1ead17e5ce..5bfeb363b9 100644
--- a/data/mods/afd/scripts.ts
+++ b/data/mods/afd/scripts.ts
@@ -10,35 +10,6 @@ export const Scripts: ModdedBattleScriptsData = {
if (species.types.includes('Grass') && !species.types.includes('Fire')) {
if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.solarflare = ['9L1'];
}
- if (species.baseStats['atk'] >= 130) {
- let hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
- Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
- if (!this.modData('Pokedex', id).abilities['1'] && !hasHP) {
- this.modData('Pokedex', id).abilities['1'] = 'Huge Power';
- }
- hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
- Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
- if (!this.modData('Pokedex', id).abilities['H'] && !hasHP) {
- this.modData('Pokedex', id).abilities['H'] = 'Huge Power';
- }
- hasHP = Object.values(this.modData('Pokedex', id).abilities).includes('Huge Power') ||
- Object.values(this.modData('Pokedex', id).abilities).includes('Pure Power');
- if (!this.modData('Pokedex', id).abilities['S'] && !hasHP) {
- this.modData('Pokedex', id).abilities['S'] = 'Huge Power';
- }
- }
- let hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
- if (!this.modData('Pokedex', id).abilities['1'] && !hasRegen) {
- this.modData('Pokedex', id).abilities['1'] = 'Regenerator';
- }
- hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
- if (!this.modData('Pokedex', id).abilities['H'] && !hasRegen) {
- this.modData('Pokedex', id).abilities['H'] = 'Regenerator';
- }
- hasRegen = Object.values(this.modData('Pokedex', id).abilities).includes('Regenerator');
- if (!this.modData('Pokedex', id).abilities['S'] && !hasRegen) {
- this.modData('Pokedex', id).abilities['S'] = 'Regenerator';
- }
}
this.modData('Learnsets', 'tyranitar').learnset.shoreup = ['9L1'];
this.modData('Learnsets', 'bastiodon').learnset.blastiodon = ['9L1'];
From d1b3406335e0a9cbc10ccdaa781a13ced75a7ba3 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Wed, 1 Apr 2026 04:05:42 -0600
Subject: [PATCH 175/233] Fix Ghost-types
---
data/mods/afd/typechart.ts | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/data/mods/afd/typechart.ts b/data/mods/afd/typechart.ts
index 2e2a8dd73a..8b505aad04 100644
--- a/data/mods/afd/typechart.ts
+++ b/data/mods/afd/typechart.ts
@@ -26,24 +26,24 @@ export const TypeChart: import('../../../sim/dex-data').ModdedTypeDataTable = {
inherit: true,
damageTaken: {
Bug: 3,
- Dark: 2,
- Dragon: 2,
- Electric: 2,
+ Dark: 1,
+ Dragon: 1,
+ Electric: 1,
Fairy: 3,
Fighting: 3,
- Fire: 2,
+ Fire: 1,
Flying: 3,
Ghost: 3,
- Grass: 2,
+ Grass: 1,
Ground: 3,
- Ice: 2,
+ Ice: 1,
Normal: 3,
Poison: 3,
- Psychic: 2,
+ Psychic: 1,
Rock: 3,
Steel: 3,
Stellar: 0,
- Water: 2,
+ Water: 1,
},
},
};
From d9f5e2a560003bf55b92ef9614f7e8203a3435cd Mon Sep 17 00:00:00 2001
From: Guangcong Luo
Date: Wed, 1 Apr 2026 05:18:41 -0700
Subject: [PATCH 176/233] Fix AFD ability modding
Fixes #11877
---
data/mods/afd/scripts.ts | 14 ++++++++++++++
sim/dex.ts | 8 ++++++--
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts
index 5bfeb363b9..97682cf621 100644
--- a/data/mods/afd/scripts.ts
+++ b/data/mods/afd/scripts.ts
@@ -10,6 +10,20 @@ export const Scripts: ModdedBattleScriptsData = {
if (species.types.includes('Grass') && !species.types.includes('Fire')) {
if (this.data.Learnsets[id]?.learnset) this.modData('Learnsets', id).learnset.solarflare = ['9L1'];
}
+ const abilities = this.modData('Pokedex', id, true).abilities;
+ if (species.baseStats['atk'] >= 130) {
+ const hasHP = Object.values(abilities).includes('Huge Power') ||
+ Object.values(abilities).includes('Pure Power');
+ if (!hasHP) {
+ const slot = !abilities['1'] ? '1' : !abilities['H'] ? 'H' : 'S';
+ abilities[slot] ||= 'Huge Power';
+ }
+ }
+ const hasRegen = Object.values(abilities).includes('Regenerator');
+ if (!hasRegen) {
+ const slot = !abilities['1'] ? '1' : !abilities['H'] ? 'H' : 'S';
+ abilities[slot] ||= 'Regenerator';
+ }
}
this.modData('Learnsets', 'tyranitar').learnset.shoreup = ['9L1'];
this.modData('Learnsets', 'bastiodon').learnset.blastiodon = ['9L1'];
diff --git a/sim/dex.ts b/sim/dex.ts
index 1ca6287696..edaf6e6917 100644
--- a/sim/dex.ts
+++ b/sim/dex.ts
@@ -179,9 +179,13 @@ export class ModdedDex {
return dexes[mod || BASE_MOD].includeData();
}
- modData(dataType: DataType, id: string) {
+ /** `force` is needed to mod data defined by the mod itself (for instance,
+ * if you want to use modData and pokedex.ts on the same pokemon. */
+ modData(dataType: DataType, id: string, force?: boolean) {
if (this.isBase) return this.data[dataType][id];
- if (this.data[dataType][id] !== dexes[this.parentMod].data[dataType][id]) return this.data[dataType][id];
+ if (!force && this.data[dataType][id] !== dexes[this.parentMod].data[dataType][id]) {
+ return this.data[dataType][id];
+ }
return (this.data[dataType][id] = Utils.deepClone(this.data[dataType][id]));
}
From f1294f27735c50864aa9fd58e42fa981a9f994df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 1 Apr 2026 15:39:55 +0100
Subject: [PATCH 177/233] Fix AFD crash (#11878)
---
data/mods/afd/random-teams.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/mods/afd/random-teams.ts b/data/mods/afd/random-teams.ts
index e27058b0e2..d1639d9334 100644
--- a/data/mods/afd/random-teams.ts
+++ b/data/mods/afd/random-teams.ts
@@ -1,5 +1,6 @@
import { Utils } from '../../../lib';
import RandomTeams from '../../random-battles/gen9/teams';
+import { toID } from '../../../sim/dex';
export interface TeamData {
typeCount: { [k: string]: number };
From d8f06fe26ca53cfe21e44a745bdd8719f49362e7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 1 Apr 2026 16:34:29 +0100
Subject: [PATCH 178/233] Fix Metronome/Mirror Move PP in Gen 1 (#11871)
---
data/mods/gen1/scripts.ts | 28 ++++++++++++++++++++++------
sim/pokemon.ts | 9 +--------
test/sim/moves/transform.js | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 59 insertions(+), 14 deletions(-)
diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts
index a8d63f7282..941e2f2e1b 100644
--- a/data/mods/gen1/scripts.ts
+++ b/data/mods/gen1/scripts.ts
@@ -33,6 +33,17 @@ export const Scripts: ModdedBattleScriptsData = {
if (!amount) amount = 1;
ppData.pp -= amount;
+
+ if (ppData.pp < 0) {
+ this.battle.hint("In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP.");
+ }
+ ppData.pp = ((ppData.pp % 64) + 64) % 64;
+
+ if (ppData.virtual && !this.transformed) {
+ // sync PP from Mimic's slot, or Metronome/Mirror Move that called Mimic
+ this.baseMoveSlots[this.side.lastSelectedMoveSlot].pp = ppData.pp;
+ }
+
return amount;
},
getStat(statName, unmodified) {
@@ -177,10 +188,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Two-turn moves like Sky Attack deduct PP on their second turn.
if ((!lockedMove && !TWO_TURN_MOVES.includes(move.id)) || pokemon.volatiles['twoturnmove']) {
const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot);
- if (moveSlot && pokemon.deductPP(moveSlot.id, null, target) && moveSlot.pp < 0) {
- moveSlot.pp += 64;
- this.battle.hint("In Gen 1, if a Pokémon is forced to use a move with 0 PP, the move will underflow to have 63 PP.");
- }
+ if (moveSlot) pokemon.deductPP(moveSlot.id, null, target);
}
if (move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) {
@@ -211,8 +219,16 @@ export const Scripts: ModdedBattleScriptsData = {
if (sourceEffect) move.sourceEffect = sourceEffect.id;
if (sourceEffect?.id === 'metronome' || sourceEffect?.id === 'mirrormove') {
- const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot);
- if (moveSlot) pokemon.deductPP(moveSlot.id, -1, target);
+ if (TWO_TURN_MOVES.includes(move.id)) {
+ const moveSlot = pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot);
+ if (moveSlot) pokemon.deductPP(moveSlot.id, -1, target);
+ }
+ // FIXME: this should happen even if the slot was empty before Transform
+ // https://bulbapedia.bulbagarden.net/wiki/List_of_Transform_glitches#Transform_.2B_Mirror_Move.2FMetronome_PP_error
+ if (pokemon.transformed && pokemon.side.lastSelectedMoveSlot < pokemon.baseMoveSlots.length) {
+ pokemon.baseMoveSlots[pokemon.side.lastSelectedMoveSlot].pp += 1;
+ pokemon.baseMoveSlots[pokemon.side.lastSelectedMoveSlot].pp %= 64;
+ }
}
this.battle.singleEvent('ModifyMove', move, null, pokemon, target, move, move);
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 66aaa63477..41ab145863 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -1496,14 +1496,7 @@ export class Pokemon {
evasion: 0,
};
- if (this.battle.gen === 1 && this.baseMoves.includes('mimic' as ID) && !this.transformed) {
- const moveslot = this.baseMoves.indexOf('mimic' as ID);
- const mimicPP = this.moveSlots[moveslot] ? this.moveSlots[moveslot].pp : 16;
- this.moveSlots = this.baseMoveSlots.slice();
- this.moveSlots[moveslot].pp = mimicPP;
- } else {
- this.moveSlots = this.baseMoveSlots.slice();
- }
+ this.moveSlots = this.baseMoveSlots.slice();
this.transformed = false;
this.ability = this.baseAbility;
diff --git a/test/sim/moves/transform.js b/test/sim/moves/transform.js
index 6dae58ba91..9975bfbe74 100644
--- a/test/sim/moves/transform.js
+++ b/test/sim/moves/transform.js
@@ -376,4 +376,40 @@ describe('Transform [Gen 1]', () => {
assert.equal(p1poke.storedStats['spe'], p2poke.storedStats['spe']);
assert.equal(p1poke.modifiedStats['spe'], p2poke.modifiedStats['spe']);
});
+
+ it(`calls Metronome or Mirror Move, PP from the original base move slot is incremented`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: 'Blastoise', moves: ['transform', 'splash'] },
+ ], [
+ { species: 'Golem', moves: ['tackle', 'mirrormove'] },
+ ]]);
+ const blastoise = battle.p1.active[0];
+ battle.makeChoices();
+ battle.makeChoices('move mirrormove', 'move tackle');
+ assert.equal(blastoise.moveSlots[0].pp, 5);
+ assert.equal(blastoise.moveSlots[1].pp, 4);
+ assert.equal(blastoise.baseMoveSlots[0].pp, blastoise.baseMoveSlots[0].maxpp - 1);
+ assert.equal(blastoise.baseMoveSlots[1].pp, blastoise.baseMoveSlots[1].maxpp + 1);
+ });
+
+ it(`calls Metronome or Mirror Move, PP from the original base move slot is incremented (same with two-turn moves)`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: 'Mewtwo', moves: ['transform', 'splash'] },
+ ], [
+ { species: 'Charizard', moves: ['solarbeam', 'mirrormove', 'splash'] },
+ ]]);
+ const charizard = battle.p1.active[0];
+ battle.makeChoices();
+ battle.makeChoices('move splash', 'move solarbeam');
+ battle.makeChoices('move mirrormove', 'move splash');
+ assert.equal(charizard.moveSlots[0].pp, 5);
+ assert.equal(charizard.moveSlots[1].pp, 5);
+ assert.equal(charizard.baseMoveSlots[0].pp, charizard.baseMoveSlots[0].maxpp - 1);
+ assert.equal(charizard.baseMoveSlots[1].pp, charizard.baseMoveSlots[1].maxpp + 1);
+ battle.makeChoices('move solarbeam', 'move splash');
+ assert.equal(charizard.moveSlots[0].pp, 5);
+ assert.equal(charizard.moveSlots[1].pp, 4);
+ assert.equal(charizard.baseMoveSlots[0].pp, charizard.baseMoveSlots[0].maxpp - 1);
+ assert.equal(charizard.baseMoveSlots[1].pp, charizard.baseMoveSlots[1].maxpp + 1);
+ });
});
From 32a2a397411f163147a7877b957f65b2b5ea2689 Mon Sep 17 00:00:00 2001
From: Marty-D
Date: Wed, 1 Apr 2026 21:48:44 -0400
Subject: [PATCH 179/233] Avatars: Update artist credit
---
server/chat-commands/avatars.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/chat-commands/avatars.tsx b/server/chat-commands/avatars.tsx
index abc604f42a..83ac22c41f 100644
--- a/server/chat-commands/avatars.tsx
+++ b/server/chat-commands/avatars.tsx
@@ -740,7 +740,7 @@ export const commands: Chat.ChatCommands = {
this.sendReply(`|raw|(${this.tr`Artist: `}Grapo)`);
}
if (OFFICIAL_AVATARS_FIFTY.has(avatar)) {
- this.sendReply(`|raw|(${this.tr`Artist: `}Fifty Shades of Rez)`);
+ this.sendReply(`|raw|(${this.tr`Artist: `}Fifty Shades of Rez)`);
}
if (OFFICIAL_AVATARS_HORO.has(avatar)) {
this.sendReply(`|raw|(${this.tr`Artist: `}Horo)`);
From bfc061eb44701eb8dfac0ad35587ca854a3cd300 Mon Sep 17 00:00:00 2001
From: Leonard Craft III
Date: Wed, 1 Apr 2026 21:18:38 -0500
Subject: [PATCH 180/233] VGC: Remove Regulation F ladders
---
config/formats.ts | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index cc972d0333..b6b9a4ad60 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -263,16 +263,10 @@ export const Formats: import('../sim/dex-formats').FormatList = [
mod: 'gen9',
gameType: 'doubles',
+ searchShow: false,
bestOfDefault: true,
ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Open Team Sheets'],
},
- {
- name: "[Gen 9] VGC 2026 Reg F (Bo3)",
-
- mod: 'gen9',
- gameType: 'doubles',
- ruleset: ['Flat Rules', '!! Adjust Level = 50', 'Min Source Gen = 9', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'],
- },
{
name: "[Gen 9] VGC 2026 Reg I", // Change back to 2025 after removing the ladder
mod: 'gen9',
From f94a826fea0bc4926fba31febb7dd0b56e5fddbc Mon Sep 17 00:00:00 2001
From: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Date: Wed, 1 Apr 2026 23:43:20 -0700
Subject: [PATCH 181/233] April 2026 Tier Shifts (#11879)
---
config/formats.ts | 4 +-
data/formats-data.ts | 92 ++++++++++++++++++++++----------------------
2 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index b6b9a4ad60..bbf09d059f 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -381,8 +381,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: ['[Gen 9] LC'],
banlist: [
- 'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray',
- 'Pawniard', 'Sandshrew-Alola', 'Shellos', 'Snover', 'Stunky', 'Timburr', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
+ 'Chinchou', 'Diglett-Alola', 'Drifloon', 'Elekid', 'Foongus', 'Glimmet', 'Gothita', 'Grookey', 'Growlithe-Hisui', 'Impidimp', 'Koffing', 'Mareanie', 'Mienfoo', 'Mudbray', 'Larvesta',
+ 'Pawniard', 'Sandshrew-Alola', 'Shellos', 'Stunky', 'Tentacool', 'Tinkatink', 'Toedscool', 'Trapinch', 'Vullaby', 'Wingull', 'Zorua-Hisui',
// LC UUBL
'Deerling', 'Minccino', 'Light Clay',
],
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 499e991f05..82fcabba3f 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -101,7 +101,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
beedrillmega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "UU",
+ natDexTier: "RU",
},
pidgey: {
isNonstandard: "Past",
@@ -381,7 +381,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
vileplume: {
- tier: "NU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -475,7 +475,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
arcanine: {
- tier: "PU",
+ tier: "NU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -613,7 +613,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
slowbro: {
tier: "RU",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "OU",
},
slowbromega: {
isNonstandard: "Past",
@@ -621,7 +621,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RUBL",
},
slowbrogalar: {
- tier: "NU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -1116,7 +1116,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
porygon2: {
- tier: "ZUBL",
+ tier: "PU",
doublesTier: "DUU",
natDexTier: "NFE",
},
@@ -1159,7 +1159,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
snorlax: {
- tier: "ZU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -1194,7 +1194,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
},
moltresgalar: {
tier: "UUBL",
- doublesTier: "DUU",
+ doublesTier: "DOU",
natDexTier: "RUBL",
},
dratini: {
@@ -1228,7 +1228,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "Uber",
},
mew: {
- tier: "RU",
+ tier: "UU",
doublesTier: "DUU",
natDexTier: "UU",
},
@@ -1316,7 +1316,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
lanturn: {
- tier: "ZU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -1528,7 +1528,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
heracrossmega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "UU",
+ natDexTier: "RUBL",
},
sneasel: {
tier: "NFE",
@@ -1557,7 +1557,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
ursaluna: {
tier: "UUBL",
doublesTier: "DOU",
- natDexTier: "UU",
+ natDexTier: "RU",
},
ursalunabloodmoon: {
tier: "Uber",
@@ -1579,7 +1579,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
mamoswine: {
- tier: "RUBL",
+ tier: "UU",
doublesTier: "(DUU)",
natDexTier: "RUBL",
},
@@ -1700,7 +1700,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tyranitarmega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "UUBL",
+ natDexTier: "OU",
},
lugia: {
tier: "Uber",
@@ -1758,7 +1758,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
swampert: {
tier: "NU",
doublesTier: "(DUU)",
- natDexTier: "RU",
+ natDexTier: "UU",
},
swampertmega: {
isNonstandard: "Past",
@@ -1877,11 +1877,11 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
gardevoirmega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "RUBL",
+ natDexTier: "UU",
},
gallade: {
tier: "RU",
- doublesTier: "(DUU)",
+ doublesTier: "DUU",
natDexTier: "RU",
},
gallademega: {
@@ -1980,7 +1980,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
sableyemega: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "RUBL",
+ natDexTier: "UU",
},
mawile: {
isNonstandard: "Past",
@@ -2701,7 +2701,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
skuntank: {
- tier: "PU",
+ tier: "ZU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -2838,12 +2838,12 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
rotommow: {
- tier: "ZU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
uxie: {
- tier: "PU",
+ tier: "NU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -2926,7 +2926,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
},
shaymin: {
- tier: "ZU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -3290,7 +3290,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
scrafty: {
- tier: "NU",
+ tier: "PU",
doublesTier: "DUU",
natDexTier: "RU",
},
@@ -3646,7 +3646,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
mandibuzz: {
tier: "UU",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "RU",
},
heatmor: {
isNonstandard: "Past",
@@ -3665,7 +3665,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
hydreigon: {
- tier: "RUBL",
+ tier: "UU",
doublesTier: "(DUU)",
natDexTier: "UU",
},
@@ -3683,7 +3683,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
terrakion: {
- tier: "NUBL",
+ tier: "RU",
doublesTier: "(DUU)",
natDexTier: "RUBL",
},
@@ -3848,7 +3848,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "NFE",
},
talonflame: {
- tier: "RU",
+ tier: "UU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -4197,7 +4197,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
},
hoopaunbound: {
tier: "UUBL",
- doublesTier: "(DUU)",
+ doublesTier: "DUU",
natDexTier: "UUBL",
},
volcanion: {
@@ -4241,7 +4241,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
primarina: {
tier: "OU",
doublesTier: "DOU",
- natDexTier: "UU",
+ natDexTier: "RU",
},
pikipek: {
tier: "LC",
@@ -4342,7 +4342,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
lycanrocdusk: {
- tier: "RU",
+ tier: "NUBL",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -4448,7 +4448,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
passimian: {
- tier: "ZU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -4460,7 +4460,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
golisopod: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "UU",
+ natDexTier: "RU",
},
golisopodmega: {
isNonstandard: "Future",
@@ -4717,7 +4717,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
necrozma: {
- tier: "NUBL",
+ tier: "RU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -4777,7 +4777,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
zeraora: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "RU",
+ natDexTier: "UU",
},
zeraoramega: {
isNonstandard: "Future",
@@ -4808,7 +4808,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
rillaboom: {
tier: "OU",
doublesTier: "DOU",
- natDexTier: "UU",
+ natDexTier: "OU",
},
rillaboomgmax: {
isNonstandard: "Past",
@@ -4998,7 +4998,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
barraskewda: {
- tier: "NU",
+ tier: "RU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -5006,7 +5006,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
toxtricity: {
- tier: "NU",
+ tier: "RU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -5154,7 +5154,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
dracozolt: {
isNonstandard: "Past",
tier: "Illegal",
- natDexTier: "UU",
+ natDexTier: "RU",
},
arctozolt: {
isNonstandard: "Past",
@@ -5351,7 +5351,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
lokix: {
tier: "UU",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "RU",
},
rellor: {
tier: "LC",
@@ -5548,7 +5548,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
garganacl: {
tier: "OU",
doublesTier: "DUU",
- natDexTier: "UU",
+ natDexTier: "RU",
},
glimmet: {
tier: "LC",
@@ -5556,7 +5556,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
glimmora: {
tier: "OU",
doublesTier: "DOU",
- natDexTier: "RU",
+ natDexTier: "UU",
},
glimmoramega: {
isNonstandard: "Future",
@@ -5686,7 +5686,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "Uber",
},
wochien: {
- tier: "NU",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -5727,7 +5727,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
ceruledge: {
tier: "OU",
doublesTier: "(DUU)",
- natDexTier: "UUBL",
+ natDexTier: "OU",
},
toedscool: {
tier: "LC",
@@ -5772,7 +5772,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
},
okidogi: {
tier: "UUBL",
- doublesTier: "(DUU)",
+ doublesTier: "DOU",
natDexTier: "UUBL",
},
munkidori: {
@@ -5786,7 +5786,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
ogerpon: {
- tier: "UU",
+ tier: "OU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -5828,7 +5828,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
ironboulder: {
tier: "UUBL",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "RU",
},
ironcrown: {
tier: "OU",
From ba3ed7bce2466d2528cfea73484fb6c76311f66d Mon Sep 17 00:00:00 2001
From: Soul-8691 <42703201+Soul-8691@users.noreply.github.com>
Date: Thu, 2 Apr 2026 02:46:41 -0400
Subject: [PATCH 182/233] FRLG OU: Fix Tangela, Kangaskhan, Ditto, and Porygon
tiers (#11882)
---
data/mods/gen3frlg/formats-data.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/data/mods/gen3frlg/formats-data.ts b/data/mods/gen3frlg/formats-data.ts
index 2d0062372f..5b403df56a 100644
--- a/data/mods/gen3frlg/formats-data.ts
+++ b/data/mods/gen3frlg/formats-data.ts
@@ -372,10 +372,10 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
tangela: {
- tier: "LC",
+ tier: "OU",
},
kangaskhan: {
- tier: "LC",
+ tier: "OU",
},
horsea: {
tier: "LC",
@@ -441,7 +441,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
tier: "OU",
},
ditto: {
- tier: "LC",
+ tier: "OU",
},
eevee: {
tier: "LC",
@@ -464,7 +464,7 @@ export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormat
isNonstandard: "Unobtainable",
},
porygon: {
- tier: "LC",
+ tier: "OU",
},
porygon2: {
tier: "OU",
From db808096eb55a54f523dba6a4e98d782d2f31953 Mon Sep 17 00:00:00 2001
From: Zachary Perlmutter
Date: Wed, 1 Apr 2026 23:47:47 -0700
Subject: [PATCH 183/233] National Dex Ubers UU: Tier Shifts (#11881)
* National Dex Ubers UU: Tier Shifts
Deoxys-S and Pheromosa rise, Hatterene and Kingambit drop
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index bbf09d059f..7e6f3ab9ef 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3225,9 +3225,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: ['[Gen 9] National Dex Ubers'],
banlist: [
- 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Ditto', 'Dondozo', 'Eternatus', 'Giratina-Origin', 'Groudon-Primal',
- 'Hatterene', 'Ho-Oh', 'Kingambit', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Salamence-Mega', 'Smeargle', 'Yveltal',
- 'Zacian-Crowned', 'Zygarde-50%',
+ 'Alomomola', 'Arceus-Normal', 'Arceus-Dark', 'Arceus-Ground', 'Calyrex-Ice', 'Chansey', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto', 'Dondozo', 'Eternatus',
+ 'Giratina-Origin', 'Groudon-Primal', 'Ho-Oh', 'Kyogre-Primal', 'Lunala', 'Marshadow', 'Mewtwo-Mega-Y', 'Necrozma-Dusk-Mane', 'Necrozma-Ultra', 'Pheromosa',
+ 'Salamence-Mega', 'Smeargle', 'Yveltal', 'Zacian-Crowned', 'Zygarde-50%',
// UUBL
'Arceus-Dragon', 'Arceus-Fairy', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Ghost', 'Arceus-Water', 'Blaziken-Mega', 'Chi-Yu', 'Chien-Pao', 'Dracovish', 'Flutter Mane', 'Groudon',
'Kyogre', 'Kyurem-Black', 'Rayquaza', 'Shaymin-Sky', 'Zacian', 'Zekrom', 'Power Construct', 'Light Clay', 'Ultranecrozium Z', 'Last Respects',
From 9e14d688c47e573d9e322a78a3b854a7e895a81c Mon Sep 17 00:00:00 2001
From: Yoshiblaze <53023564+Yoshiblaze@users.noreply.github.com>
Date: Thu, 2 Apr 2026 02:48:09 -0400
Subject: [PATCH 184/233] Add New Pet Mod of the Season, ReGeneration Random
Battle, and Remove Previous PMOTM (#11870)
* April PMOTM Pt. 1
* April PMOTM Pt. 2
* April PMOTM Pt. 3
* April PMOTM Pt. 4
* April PMOTM Pt. 5
* Adding missing movepool updates
---
config/formats.ts | 44 +-
data/mods/gen6megasrevisited/abilities.ts | 369 -
data/mods/gen6megasrevisited/formats-data.ts | 26 -
data/mods/gen6megasrevisited/items.ts | 12 -
data/mods/gen6megasrevisited/moves.ts | 77 -
data/mods/gen6megasrevisited/pokedex.ts | 249 -
data/mods/gen6megasrevisited/rulesets.ts | 33 -
data/mods/gen6megasrevisited/scripts.ts | 237 -
data/mods/gen9regeneration/abilities.ts | 277 +
data/mods/gen9regeneration/formats-data.ts | 674 +
data/mods/gen9regeneration/moves.ts | 573 +
data/mods/gen9regeneration/pokedex.ts | 198 +
data/mods/gen9regeneration/scripts.ts | 329 +
.../gen6megasrevisited/factory-sets.json | 10319 ----------------
.../gen6megasrevisited/sets.json | 6301 ----------
.../gen6megasrevisited/teams.ts | 7 -
.../gen9regeneration/random-sets.json | 1093 ++
data/random-battles/gen9regeneration/teams.ts | 1149 ++
18 files changed, 4320 insertions(+), 17647 deletions(-)
delete mode 100644 data/mods/gen6megasrevisited/abilities.ts
delete mode 100644 data/mods/gen6megasrevisited/formats-data.ts
delete mode 100644 data/mods/gen6megasrevisited/items.ts
delete mode 100644 data/mods/gen6megasrevisited/moves.ts
delete mode 100644 data/mods/gen6megasrevisited/pokedex.ts
delete mode 100644 data/mods/gen6megasrevisited/rulesets.ts
delete mode 100644 data/mods/gen6megasrevisited/scripts.ts
create mode 100644 data/mods/gen9regeneration/abilities.ts
create mode 100644 data/mods/gen9regeneration/formats-data.ts
create mode 100644 data/mods/gen9regeneration/moves.ts
create mode 100644 data/mods/gen9regeneration/pokedex.ts
create mode 100644 data/mods/gen9regeneration/scripts.ts
delete mode 100644 data/random-battles/gen6megasrevisited/factory-sets.json
delete mode 100644 data/random-battles/gen6megasrevisited/sets.json
delete mode 100644 data/random-battles/gen6megasrevisited/teams.ts
create mode 100644 data/random-battles/gen9regeneration/random-sets.json
create mode 100644 data/random-battles/gen9regeneration/teams.ts
diff --git a/config/formats.ts b/config/formats.ts
index 7e6f3ab9ef..08299a52de 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -756,18 +756,18 @@ export const Formats: import('../sim/dex-formats').FormatList = [
},
},
{
- name: "[Gen 6] Megas Revisited Random Battle",
- desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`,
- mod: 'gen6megasrevisited',
+ name: "[Gen 9] ReGeneration Random Battle",
+ desc: `A Kanto-only Gen 9 metagame where many of the Pokemon have been redesigned with modern design philosophies.`,
+ mod: 'gen9regeneration',
team: 'random',
bestOfDefault: true,
- ruleset: ['Obtainable', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Mega Data Mod'],
+ ruleset: ['Obtainable', 'Terastal Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Illusion Level Mod', 'Data Preview'],
onBegin() {
- this.add(`raw|
Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
- this.add('-message', `Welcome to Megas Revisited!`);
- this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`);
+ this.add(`raw|Need help with all of the new moves and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
+ this.add('-message', `Welcome to ReGeneration!`);
+ this.add('-message', `This is a Generation 9 Pet Mod where many Kanto Pokemon have been redesigned to fit the modern era!`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3713949/`);
+ this.add('-message', `https://www.smogon.com/forums/threads/3718196/`);
},
},
{
@@ -3449,18 +3449,28 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Pet Mods",
},
{
- name: "[Gen 6] Megas Revisited", // Roomtours
- desc: `A Gen 6 metagame where every Mega Evolution was reevaluated and redesigned.`,
- mod: 'gen6megasrevisited',
+ name: "[Gen 9] ReGeneration", // Roomtours
+ desc: `A Kanto-only Gen 9 metagame where many of the Pokemon have been redesigned with modern design philosophies.`,
+ mod: 'gen9regeneration',
searchShow: false,
- ruleset: ['Standard', 'Mega Data Mod'],
- banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass', 'Swagger', 'Blaziken + Speed Boost'],
+ ruleset: ['Standard NatDex', 'Terastal Clause', 'Data Preview'],
+ banlist: [
+ 'Arena Trap', 'Moody', 'Shadow Tag', 'Baton Pass',
+ 'Aerodactylite', 'Alakazite', 'Beedrillite', 'Blastoisinite', 'Charizardite X', 'Charizardite Y', 'Gyaradosite',
+ 'Gengarite', 'Kangaskhanite', 'Mewtwonite X', 'Mewtwonite Y', 'Pidgeotite', 'Pinsirite', 'Slowbronite', 'Venusaurite',
+ ],
onBegin() {
- this.add(`raw|Need help with all of the new Megas and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
- this.add('-message', `Welcome to Megas Revisited!`);
- this.add('-message', `This is a Generation 6 OU-based Pet Mod where every existing Mega Evolution has been redesigned.`);
+ this.add(`raw|Need help with all of the new moves and abilities?
Then make sure to check out the spreadsheet or use /dt! `);
+ this.add('-message', `Welcome to ReGeneration!`);
+ this.add('-message', `This is a Generation 9 Pet Mod where many Kanto Pokemon have been redesigned to fit the modern era!`);
this.add('-message', `You can find our thread and metagame resources here:`);
- this.add('-message', `https://www.smogon.com/forums/threads/3713949/`);
+ this.add('-message', `https://www.smogon.com/forums/threads/3718196/`);
+ },
+ onValidateSet(set, format) {
+ const species = this.dex.species.get(set.species || set.name);
+ if (species.num >= 152 && !this.ruleTable.has('+' + species.id)) {
+ return [`${species.baseSpecies} is not in the Kanto Pokédex.`];
+ }
},
},
{
diff --git a/data/mods/gen6megasrevisited/abilities.ts b/data/mods/gen6megasrevisited/abilities.ts
deleted file mode 100644
index 8482c1cfc7..0000000000
--- a/data/mods/gen6megasrevisited/abilities.ts
+++ /dev/null
@@ -1,369 +0,0 @@
-export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
- merciless: {
- shortDesc: "This Pokemon's attacks are critical hits if the target is statused.",
- onModifyCritRatio(critRatio, source, target) {
- if (target?.status) return 5;
- },
- name: "Merciless",
- rating: 1.5,
- num: 196,
- gen: 6,
- },
- pocketdimension: {
- shortDesc: "This Pokemon switches out after using a status move.",
- onModifyMove(move, pokemon) {
- if (move.category === 'Status') {
- move.selfSwitch = true;
- this.add('-ability', pokemon, 'Pocket Dimension');
- this.add('-message', `${pokemon.name} will switch out if this moves lands!`);
- }
- },
- name: "Pocket Dimension",
- rating: 4.5,
- },
- grassysurge: {
- inherit: true,
- gen: 6,
- },
- mistysurge: {
- inherit: true,
- gen: 6,
- },
- neutralizinggas: {
- inherit: true,
- // Ability suppression cancelled in scripts.ts
- // new Ability suppression implemented in scripts.ts
- onSwitchIn: undefined, // no inherit
- onEnd: undefined, // no inherit
- onStart(pokemon) {
- this.add('-ability', pokemon, 'Neutralizing Gas');
- },
- // onModifyPriority implemented in relevant abilities
- onFoeBeforeMovePriority: 13,
- onFoeBeforeMove(attacker, defender, move) {
- attacker.addVolatile('neutralizinggas');
- },
- condition: {
- onAfterMove(pokemon) {
- pokemon.removeVolatile('neutralizinggas');
- },
- },
- flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 },
- desc: "While this Pokemon is active, opposing Pokemon's moves and their effects ignore its own Ability. Does not affect the As One, Battle Bond, Comatose, Disguise, Gulp Missile, Ice Face, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or Zen Mode Abilities.",
- shortDesc: "While this Pokemon is active, opposing Pokemon's Ability has no effect when it uses moves.",
- gen: 6,
- },
- nostalgiatrip: {
- shortDesc: "This Pokemon's moves have the damage categories they would have in Gen 3. Fairy-type moves are Special.",
- onStart(pokemon) {
- this.add('-ability', pokemon, 'Nostalgia Trip');
- this.add('-message', `This Pokemon is experiencing a nostalgia trip!`);
- },
- onModifyMovePriority: 8,
- onModifyMove(move, pokemon) {
- if (move.category === "Status") return;
- if (['Fire', 'Water', 'Grass', 'Electric', 'Dark', 'Psychic', 'Dragon', 'Fairy', 'Ice'].includes(move.type)) {
- move.category = "Special";
- } else {
- move.category = "Physical";
- }
- },
- name: "Nostalgia Trip",
- rating: 4,
- gen: 6,
- },
- weatherreport: {
- onBeforeMovePriority: 0.5,
- onBeforeMove(target, source, move) {
- if (move.type === 'Fire') {
- this.field.setWeather('sunnyday');
- } else if (move.type === 'Water') {
- this.field.setWeather('raindance');
- }
- },
- name: "Weather Report",
- shortDesc: "Before using a Water or Fire-type move, this Pokemon sets Rain Dance or Sunny Day respectively.",
- rating: 4,
- gen: 6,
- },
- armortail: {
- inherit: true,
- gen: 6,
- },
- brainpower: {
- onModifySpAPriority: 5,
- onModifySpA(spa) {
- return this.chainModify(2);
- },
- name: "Brain Power",
- shortDesc: "This Pokemon's Special Attack is doubled.",
- rating: 5,
- },
- neuroforce: {
- inherit: true,
- gen: 6,
- },
- bugzapper: {
- onTryHit(target, source, move) {
- if (target !== source && move.type === 'Bug') {
- if (!source.addVolatile('trapped', target, move, 'trapper')) {
- this.add('-immune', target, '[from] ability: Bug Zapper');
- }
- return null;
- }
- },
- name: "Bug Zapper",
- shortDesc: "This Pokemon is immune to Bug-type moves and traps the foe if hit by one.",
- rating: 5,
- },
- exoskeleton: {
- onSourceModifyDamage(damage, source, target, move) {
- if (move.category === 'Physical') {
- return this.chainModify(0.5);
- }
- },
- name: "Exoskeleton",
- shortDesc: "This Pokemon receives 1/2 damage from physical attacks; Hazard immunity.",
- rating: 4,
- },
- icescales: {
- inherit: true,
- onModifyAtkPriority: 5,
- onModifyAtk(atk, attacker, defender, move) {
- if (move.type === 'Ice') {
- this.debug('Ice Scales boost');
- return this.chainModify(1.5);
- }
- },
- onModifySpAPriority: 5,
- onModifySpA(atk, attacker, defender, move) {
- if (move.type === 'Ice') {
- this.debug('Ice Scales boost');
- return this.chainModify(1.5);
- }
- },
- onImmunity(type, pokemon) {
- if (type === 'hail') return false;
- },
- shortDesc: "This Pokemon receives 1/2 damage from special attacks. Ice moves have 1.5x power. Hail immunity.",
- gen: 6,
- },
- eartheater: {
- inherit: true,
- onDamage(damage, target, source, effect) {
- if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) {
- this.heal(damage);
- return false;
- }
- },
- shortDesc: "Heals 1/4 of its max HP when hit by Ground; Ground immunity. Healed by Spikes and Stealth Rock.",
- gen: 6,
- },
- toxicchain: {
- inherit: true,
- gen: 6,
- },
- shellejection: {
- onModifyMovePriority: -1,
- onModifyMove(move, attacker) {
- if (move.category === 'Special') {
- attacker.addVolatile('shellejection');
- this.add('-ability', attacker, 'Shell Ejection');
- this.add('-message', `${attacker.name} is getting ready to leave the battlefield!`);
- this.add('-message', `${attacker.name} can no longer use status moves!`);
- }
- },
- condition: {
- duration: 2,
- onDisableMove(pokemon) {
- for (const moveSlot of pokemon.moveSlots) {
- const move = this.dex.moves.get(moveSlot.id);
- if (move.category === 'Status' && move.id !== 'mefirst') {
- pokemon.disableMove(moveSlot.id);
- }
- }
- },
- onSwitchOut(pokemon) {
- pokemon.heal(pokemon.baseMaxhp / 3);
- },
- onEnd(pokemon) {
- this.add('-ability', pokemon, 'Shell Ejection');
- this.add('-message', `${pokemon.name} ejected itself from its shell!`);
- pokemon.heal(pokemon.baseMaxhp / 3);
- pokemon.switchFlag = true;
- },
- },
- name: "Shell Ejection",
- rating: 3.5,
- gen: 6,
- shortDesc: "On using Special move: switching heals 1/3, can't use status, switches out at end of next turn.",
- },
- sharpness: {
- inherit: true,
- gen: 6,
- },
- dauntlessshield: {
- onStart(pokemon) {
- this.boost({ def: 1 }, pokemon);
- pokemon.addVolatile('dauntlessshield');
- },
- onResidualOrder: 6,
- onResidual(pokemon) {
- if (pokemon.positiveBoosts()) {
- this.heal(pokemon.baseMaxhp / 16);
- this.add('-message', `${pokemon.name}'s shield gives it strength!`);
- }
- },
- name: "Dauntless Shield",
- rating: 5,
- num: 235,
- shortDesc: "+1 Defense on switch-in. Heals 1/16 of max HP if it has a positive boost.",
- gen: 6,
- },
- confidence: {
- onSourceAfterFaint(length, target, source, effect) {
- if (effect && effect.effectType === 'Move') {
- this.boost({ spa: length }, source);
- }
- },
- name: "Confidence",
- rating: 3,
- shortDesc: "This Pokemon's Sp. Atk is raised by 1 stage if it attacks and KOes another Pokemon.",
- gen: 6,
- },
- electricsurge: {
- inherit: true,
- gen: 6,
- },
- goodasgold: {
- inherit: true,
- gen: 6,
- },
- opportunist: {
- inherit: true,
- onUpdate(pokemon) {
- let activate = false;
- const boosts: SparseBoostsTable = {};
- let i: BoostID;
- for (i in pokemon.boosts) {
- if (pokemon.boosts[i] < 0) {
- activate = true;
- boosts[i] = 0;
- }
- }
- if (this.effectState.herb) return;
- if (activate) {
- pokemon.setBoost(boosts);
- this.effectState.herb = true;
- this.add('-ability', pokemon, 'Opportunist');
- this.add('-clearnegativeboost', pokemon, '[silent]');
- }
- },
- onSwitchIn(pokemon) {
- delete this.effectState.herb;
- },
- shortDesc: "Copies foe's stat gains as they happen. Resets negative stat changes once per switch-in.",
- gen: 6,
- },
- intoxicate: {
- onModifyTypePriority: -1,
- onModifyType(move, pokemon) {
- const noModifyType = [
- 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',
- ];
- if (move.type === 'Normal' && !noModifyType.includes(move.id) &&
- !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {
- move.type = 'Poison';
- move.typeChangerBoosted = this.effect;
- }
- },
- onBasePowerPriority: 23,
- onBasePower(basePower, pokemon, target, move) {
- if (move.typeChangerBoosted) return this.chainModify([5325, 4096]);
- },
- name: "Intoxicate",
- rating: 4,
- shortDesc: "This Pokemon's Normal-type moves become Poison-type and have 1.3x power.",
- },
- dragonsgale: {
- onStart(source) {
- this.field.setWeather('deltastream');
- },
- onAnySetWeather(target, source, weather) {
- const strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];
- if (this.field.getWeather().id === 'deltastream' && !strongWeathers.includes(weather.id)) return false;
- },
- onEnd(pokemon) {
- if (this.field.weatherState.source !== pokemon) return;
- for (const target of this.getAllActive()) {
- if (target === pokemon) continue;
- if (target.hasAbility('dragonsgale')) {
- this.field.weatherState.source = target;
- return;
- }
- }
- this.field.clearWeather();
- },
- onDamage(damage, target, source, effect) {
- if (effect && (effect.id === 'stealthrock' || effect.id === 'spikes')) {
- return damage / 2;
- }
- },
- flags: {},
- name: "Dragon's Gale",
- shortDesc: "On switch-in, sets Delta Stream. User takes halved damage from hazards.",
- rating: 5,
- },
- parentalbond: {
- onPrepareHit(source, target, move) {
- if (move.category === 'Status' || move.selfdestruct || move.multihit) return;
- if ([
- 'endeavor', 'seismictoss', 'psywave', 'nightshade', 'sonicboom', 'dragonrage',
- 'superfang', 'naturesmadness', 'bide', 'counter', 'mirrorcoat', 'metalburst',
- ].includes(move.id)) return;
- if (!move.spreadHit && !move.isZ && !move.isMax) {
- move.multihit = 2;
- move.multihitType = 'parentalbond';
- }
- },
- onSourceModifySecondaries(secondaries, target, source, move) {
- if (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) {
- // hack to prevent accidentally suppressing King's Rock/Razor Fang
- return secondaries.filter(effect => effect.volatileStatus === 'flinch');
- }
- },
- name: "Parental Bond",
- rating: 4.5,
- shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage quartered.",
- num: 184,
- },
-
- // for ngas
- galewings: {
- // for ngas
- inherit: true,
- onModifyPriority(priority, pokemon, target, move) {
- for (const poke of this.getAllActive()) {
- if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) {
- return;
- }
- }
- if (move && move.type === 'Flying') return priority + 1;
- },
- },
- prankster: {
- // for ngas
- inherit: true,
- onModifyPriority(priority, pokemon, target, move) {
- for (const poke of this.getAllActive()) {
- if (poke.hasAbility('neutralizinggas') && poke.side.id !== pokemon.side.id && !poke.abilityState.ending) {
- return;
- }
- }
- if (move?.category === 'Status') {
- move.pranksterBoosted = true;
- return priority + 1;
- }
- },
- },
-};
diff --git a/data/mods/gen6megasrevisited/formats-data.ts b/data/mods/gen6megasrevisited/formats-data.ts
deleted file mode 100644
index a5d97dda38..0000000000
--- a/data/mods/gen6megasrevisited/formats-data.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
- blaziken: {
- tier: "OU",
- },
- blazikenmega: {
- tier: "OU",
- },
- gengarmega: {
- tier: "OU",
- },
- kangaskhanmega: {
- tier: "OU",
- },
- lucariomega: {
- tier: "OU",
- },
- mawilemega: {
- tier: "OU",
- },
- sableyemega: {
- tier: "OU",
- },
- salamencemega: {
- tier: "OU",
- },
-};
diff --git a/data/mods/gen6megasrevisited/items.ts b/data/mods/gen6megasrevisited/items.ts
deleted file mode 100644
index 90f2c22c71..0000000000
--- a/data/mods/gen6megasrevisited/items.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- meteorite: {
- name: "Meteorite",
- spritenum: 615,
- megaStone: { "Rayquaza": "Rayquaza-Mega" },
- itemUser: ["Rayquaza"],
- onTakeItem(item, source) {
- return !item.megaStone?.[source.baseSpecies.baseSpecies];
- },
- desc: "If held by a Rayquaza, this item allows it to Mega Evolve in battle.",
- },
-};
diff --git a/data/mods/gen6megasrevisited/moves.ts b/data/mods/gen6megasrevisited/moves.ts
deleted file mode 100644
index b8e3a95b36..0000000000
--- a/data/mods/gen6megasrevisited/moves.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
- stealthrock: {
- inherit: true,
- condition: {
- // this is a side condition
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Stealth Rock');
- },
- onSwitchIn(pokemon) {
- if (pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
- const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
- this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
- },
- },
- },
- toxicspikes: {
- inherit: true,
- condition: {
- // this is a side condition
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Toxic Spikes');
- this.effectState.layers = 1;
- },
- onSideRestart(side) {
- if (this.effectState.layers >= 2) return false;
- this.add('-sidestart', side, 'move: Toxic Spikes');
- this.effectState.layers++;
- },
- onSwitchIn(pokemon) {
- if (!pokemon.isGrounded()) return;
- if (pokemon.hasType('Poison')) {
- this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`);
- pokemon.side.removeSideCondition('toxicspikes');
- } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) {
- // do nothing
- } else if (this.effectState.layers >= 2) {
- pokemon.trySetStatus('tox', pokemon.side.foe.active[0]);
- } else {
- pokemon.trySetStatus('psn', pokemon.side.foe.active[0]);
- }
- },
- },
- },
- spikes: {
- inherit: true,
- condition: {
- // this is a side condition
- onSideStart(side) {
- this.add('-sidestart', side, 'Spikes');
- this.effectState.layers = 1;
- },
- onSideRestart(side) {
- if (this.effectState.layers >= 3) return false;
- this.add('-sidestart', side, 'Spikes');
- this.effectState.layers++;
- },
- onSwitchIn(pokemon) {
- if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
- const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
- this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
- },
- },
- },
- stickyweb: {
- inherit: true,
- condition: {
- onSideStart(side) {
- this.add('-sidestart', side, 'move: Sticky Web');
- },
- onSwitchIn(pokemon) {
- if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.hasAbility('exoskeleton')) return;
- this.add('-activate', pokemon, 'move: Sticky Web');
- this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
- },
- },
- },
-};
diff --git a/data/mods/gen6megasrevisited/pokedex.ts b/data/mods/gen6megasrevisited/pokedex.ts
deleted file mode 100644
index 70821f3c7f..0000000000
--- a/data/mods/gen6megasrevisited/pokedex.ts
+++ /dev/null
@@ -1,249 +0,0 @@
-export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
- audinomega: {
- inherit: true,
- types: ["Normal", "Electric"],
- baseStats: { hp: 103, atk: 60, def: 120, spa: 110, spd: 97, spe: 55 },
- abilities: { 0: "Regenerator" },
- },
- houndoommega: {
- inherit: true,
- types: ["Dark", "Fire"],
- baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 90, spe: 115 },
- abilities: { 0: "Merciless" },
- },
- lucariomega: {
- inherit: true,
- types: ["Fighting", "Steel"],
- baseStats: { hp: 70, atk: 125, def: 70, spa: 140, spd: 94, spe: 126 },
- abilities: { 0: "Lightning Rod" },
- },
- banettemega: {
- inherit: true,
- types: ["Ghost", "Steel"],
- baseStats: { hp: 64, atk: 149, def: 75, spa: 83, spd: 83, spe: 101 },
- abilities: { 0: "Pocket Dimension" },
- },
- glaliemega: {
- inherit: true,
- types: ["Ice", "Steel"],
- baseStats: { hp: 80, atk: 160, def: 70, spa: 95, spd: 70, spe: 105 },
- abilities: { 0: "Refrigerate" },
- },
- venusaurmega: {
- inherit: true,
- types: ["Grass", "Poison"],
- baseStats: { hp: 80, atk: 82, def: 123, spa: 120, spd: 120, spe: 100 },
- abilities: { 0: "Grassy Surge" },
- },
- blastoisemega: {
- inherit: true,
- types: ["Water", "Fairy"],
- baseStats: { hp: 79, atk: 83, def: 130, spa: 135, spd: 105, spe: 98 },
- abilities: { 0: "Misty Surge" },
- },
- charizardmegay: {
- inherit: true,
- types: ["Fire", "Flying"],
- baseStats: { hp: 78, atk: 94, def: 93, spa: 159, spd: 110, spe: 100 },
- abilities: { 0: "Dragon's Gale" },
- },
- alakazammega: {
- inherit: true,
- types: ["Psychic", "Ice"],
- baseStats: { hp: 55, atk: 50, def: 75, spa: 155, spd: 125, spe: 140 },
- abilities: { 0: "Magic Guard" },
- },
- pinsirmega: {
- inherit: true,
- types: ["Bug", "Ice"],
- baseStats: { hp: 65, atk: 150, def: 110, spa: 80, spd: 85, spe: 110 },
- abilities: { 0: "Mountaineer" },
- },
- gengarmega: {
- inherit: true,
- types: ["Ghost", "Poison"],
- baseStats: { hp: 60, atk: 65, def: 105, spa: 155, spd: 105, spe: 110 },
- abilities: { 0: "Neutralizing Gas" },
- },
- aerodactylmega: {
- inherit: true,
- types: ["Rock", "Flying"],
- baseStats: { hp: 80, atk: 140, def: 65, spa: 85, spd: 100, spe: 145 },
- abilities: { 0: "Nostalgia Trip" },
- },
- steelixmega: {
- inherit: true,
- types: ["Steel", "Ground"],
- baseStats: { hp: 75, atk: 135, def: 210, spa: 55, spd: 105, spe: 30 },
- abilities: { 0: "Flash Fire" },
- weightkg: 999.9,
- },
- altariamega: {
- inherit: true,
- types: ["Dragon", "Fairy"],
- baseStats: { hp: 75, atk: 90, def: 90, spa: 140, spd: 115, spe: 80 },
- abilities: { 0: "Weather Report" },
- },
- sceptilemega: {
- inherit: true,
- types: ["Grass", "Dragon"],
- baseStats: { hp: 70, atk: 95, def: 79, spa: 145, spd: 99, spe: 142 },
- abilities: { 0: "Armor Tail" },
- },
- swampertmega: {
- inherit: true,
- types: ["Water", "Poison"],
- baseStats: { hp: 100, atk: 145, def: 110, spa: 85, spd: 110, spe: 85 },
- abilities: { 0: "Toxic Chain" },
- },
- manectricmega: {
- inherit: true,
- types: ["Electric"],
- baseStats: { hp: 70, atk: 75, def: 80, spa: 135, spd: 85, spe: 130 },
- abilities: { 0: "Bug Zapper" },
- },
- absolmega: {
- inherit: true,
- types: ["Dark", "Fairy"],
- baseStats: { hp: 65, atk: 130, def: 60, spa: 135, spd: 60, spe: 115 },
- abilities: { 0: "Neuroforce" },
- },
- medichammega: {
- inherit: true,
- types: ["Fighting", "Psychic"],
- baseStats: { hp: 60, atk: 60, def: 100, spa: 90, spd: 100, spe: 100 },
- abilities: { 0: "Brain Power" },
- },
- sableyemega: {
- inherit: true,
- types: ["Dark", "Ghost"],
- baseStats: { hp: 50, atk: 95, def: 115, spa: 85, spd: 115, spe: 20 },
- },
- beedrillmega: {
- inherit: true,
- types: ["Bug", "Rock"],
- baseStats: { hp: 65, atk: 140, def: 85, spa: 45, spd: 85, spe: 75 },
- abilities: { 0: "Exoskeleton" },
- },
- mawilemega: {
- inherit: true,
- types: ["Steel", "Fairy"],
- baseStats: { hp: 50, atk: 90, def: 125, spa: 70, spd: 95, spe: 50 },
- abilities: { 0: "Huge Power" },
- },
- abomasnowmega: {
- inherit: true,
- types: ["Grass"],
- abilities: { 0: "Ice Scales" },
- },
- cameruptmega: {
- inherit: true,
- types: ["Fire", "Ground"],
- baseStats: { hp: 70, atk: 80, def: 140, spa: 135, spd: 115, spe: 20 },
- abilities: { 0: "Earth Eater" },
- },
- slowbromega: {
- inherit: true,
- types: ["Water", "Psychic"],
- baseStats: { hp: 95, atk: 75, def: 150, spa: 120, spd: 120, spe: 30 },
- abilities: { 0: "Shell Ejection" },
- },
- gallademega: {
- inherit: true,
- types: ["Psychic", "Fighting"],
- baseStats: { hp: 68, atk: 150, def: 100, spa: 75, spd: 127, spe: 98 },
- abilities: { 0: "Sharpness" },
- },
- ampharosmega: {
- inherit: true,
- types: ["Electric", "Dragon"],
- baseStats: { hp: 90, atk: 95, def: 95, spa: 165, spd: 110, spe: 55 },
- abilities: { 0: "Mega Launcher" },
- },
- gyaradosmega: {
- inherit: true,
- types: ["Water", "Flying"],
- baseStats: { hp: 95, atk: 130, def: 109, spa: 85, spd: 130, spe: 91 },
- abilities: { 0: "Aerilate" },
- },
- heracrossmega: {
- inherit: true,
- types: ["Bug", "Fighting"],
- baseStats: { hp: 80, atk: 150, def: 150, spa: 40, spd: 110, spe: 70 },
- abilities: { 0: "Iron Barbs" },
- },
- sharpedomega: {
- inherit: true,
- types: ["Water", "Electric"],
- baseStats: { hp: 70, atk: 130, def: 55, spa: 145, spd: 55, spe: 105 },
- abilities: { 0: "No Guard" },
- },
- gardevoirmega: {
- inherit: true,
- types: ["Psychic", "Fairy"],
- baseStats: { hp: 68, atk: 65, def: 100, spa: 150, spd: 127, spe: 108 },
- },
- aggronmega: {
- inherit: true,
- types: ["Steel"],
- baseStats: { hp: 70, atk: 145, def: 185, spa: 85, spd: 85, spe: 60 },
- abilities: { 0: "Dauntless Shield" },
- },
- kangaskhanmega: {
- inherit: true,
- types: ["Normal", "Ground"],
- baseStats: { hp: 105, atk: 125, def: 105, spa: 50, spd: 105, spe: 100 },
- },
- salamencemega: {
- inherit: true,
- types: ["Dragon", "Flying"],
- baseStats: { hp: 95, atk: 135, def: 105, spa: 155, spd: 105, spe: 105 },
- abilities: { 0: "Confidence" },
- },
- garchompmega: {
- inherit: true,
- types: ["Dragon", "Ground"],
- baseStats: { hp: 108, atk: 150, def: 115, spa: 140, spd: 85, spe: 102 },
- abilities: { 0: "Water Absorb" },
- },
- tyranitarmega: {
- inherit: true,
- types: ["Rock", "Electric"],
- baseStats: { hp: 100, atk: 144, def: 120, spa: 110, spd: 144, spe: 82 },
- abilities: { 0: "Electric Surge" },
- },
- latiasmega: {
- inherit: true,
- abilities: { 0: "Trace" },
- },
- latiosmega: {
- inherit: true,
- baseStats: { hp: 80, atk: 140, def: 100, spa: 150, spd: 120, spe: 110 },
- abilities: { 0: "Opportunist" },
- },
- dianciemega: {
- inherit: true,
- abilities: { 0: "Good As Gold" },
- },
- blazikenmega: {
- inherit: true,
- baseStats: { hp: 80, atk: 150, def: 80, spa: 120, spd: 90, spe: 110 },
- abilities: { 0: "Regenerator" },
- },
- mewtwomegax: {
- inherit: true,
- types: ["Psychic", "Poison"],
- baseStats: { hp: 106, atk: 140, def: 130, spa: 154, spd: 120, spe: 130 },
- abilities: { 0: "Intoxicate" },
- },
- mewtwomegay: {
- inherit: true,
- types: ["Psychic", "Water"],
- baseStats: { hp: 106, atk: 120, def: 110, spa: 194, spd: 130, spe: 120 },
- abilities: { 0: "Levitate" },
- },
- rayquazamega: {
- inherit: true,
- requiredItem: "Meteorite",
- },
-};
diff --git a/data/mods/gen6megasrevisited/rulesets.ts b/data/mods/gen6megasrevisited/rulesets.ts
deleted file mode 100644
index b1a52de493..0000000000
--- a/data/mods/gen6megasrevisited/rulesets.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
- megadatamod: {
- effectType: 'Rule',
- name: 'Mega Data Mod',
- desc: 'Gives data on stats, Ability and types when a Pokémon Mega Evolves or undergoes Ultra Burst.',
- onSwitchIn(pokemon) {
- if (pokemon.species.forme.startsWith('Mega') || pokemon.species.forme.startsWith('Ultra')) {
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- }
- },
- onAfterMega(pokemon) {
- this.add('-start', pokemon, 'typechange', pokemon.getTypes(true).join('/'), '[silent]');
- const species = pokemon.species;
- let buf = `${species.name} `;
- buf += ``;
- buf += `
`;
- if (species.types[1]) {
- buf += `
`;
- }
- buf += ` `;
- buf += `${species.abilities[0]}`;
- const stats = [];
- let stat: StatID;
- for (stat in species.baseStats) {
- const statNames: { [k in StatID]: string } = { hp: "HP", atk: "Atk", def: "Def", spa: "SpA", spd: "SpD", spe: "Spe" };
- stats.push(`${statNames[stat]}
${species.baseStats[stat]}`);
- }
- buf += `${stats.join(' ')}`;
- buf += ``;
- this.add(`raw|`);
- },
- },
-};
diff --git a/data/mods/gen6megasrevisited/scripts.ts b/data/mods/gen6megasrevisited/scripts.ts
deleted file mode 100644
index fe185cc6a0..0000000000
--- a/data/mods/gen6megasrevisited/scripts.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 6,
- inherit: 'gen6',
- actions: {
- // for parental bond
- modifyDamage(
- baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false
- ) {
- const tr = this.battle.trunc;
- if (!move.type) move.type = '???';
- const type = move.type;
- baseDamage += 2;
- if (move.spreadHit) {
- // multi-target modifier (doubles only)
- const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
- this.battle.debug(`Spread modifier: ${spreadModifier}`);
- baseDamage = this.battle.modify(baseDamage, spreadModifier);
- } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
- // Parental Bond modifier
- const bondModifier = 0.25;
- this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
- baseDamage = this.battle.modify(baseDamage, bondModifier);
- }
- baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
- const isCrit = target.getMoveHitData(move).crit;
- if (isCrit) {
- baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
- }
- baseDamage = this.battle.randomizer(baseDamage);
- if (type !== '???') {
- let stab: number | [number, number] = 1;
- const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
- if (isSTAB) {
- stab = 1.5;
- }
- if (pokemon.terastallized === 'Stellar') {
- if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
- stab = isSTAB ? 2 : [4915, 4096];
- move.stellarBoosted = true;
- if (pokemon.species.name !== 'Terapagos-Stellar') {
- pokemon.stellarBoostedTypes.push(type);
- }
- }
- } else {
- if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
- stab = 2;
- }
- stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
- }
- baseDamage = this.battle.modify(baseDamage, stab);
- }
- let typeMod = target.runEffectiveness(move);
- typeMod = this.battle.clampIntRange(typeMod, -6, 6);
- target.getMoveHitData(move).typeMod = typeMod;
- if (typeMod > 0) {
- if (!suppressMessages) this.battle.add('-supereffective', target);
- for (let i = 0; i < typeMod; i++) {
- baseDamage *= 2;
- }
- }
- if (typeMod < 0) {
- if (!suppressMessages) this.battle.add('-resisted', target);
-
- for (let i = 0; i > typeMod; i--) {
- baseDamage = tr(baseDamage / 2);
- }
- }
- if (isCrit && !suppressMessages) this.battle.add('-crit', target);
- if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
- if (this.battle.gen < 6 || move.id !== 'facade') {
- baseDamage = this.battle.modify(baseDamage, 0.5);
- }
- }
- // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
- if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
- // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
- baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
- baseDamage = this.battle.modify(baseDamage, 0.25);
- this.battle.add('-zbroken', target);
- }
- // Generation 6-7 moves the check for minimum 1 damage after the final modifier...
- if (this.battle.gen !== 5 && !baseDamage) return 1;
- // ...but 16-bit truncation happens even later, and can truncate to 0
- return tr(baseDamage, 16);
- },
- },
- pokemon: {
- // for neutralizing gas
- ignoringAbility() {
- if (this.battle.gen >= 5 && !this.isActive) return true;
- if (this.getAbility().flags['notransform'] && this.transformed) return true;
- if (this.getAbility().flags['cantsuppress']) return false;
- if (this.volatiles['gastroacid']) return true;
- if (this.ability === ('neutralizinggas' as ID)) return false;
- if (this.volatiles['neutralizinggas']) return true;
- return false;
- },
- },
- init() {
- this.modData("Learnsets", "lucario").learnset.meteormash = ["6L1"];
- this.modData("Learnsets", "lucario").learnset.machpunch = ["6L1"];
- this.modData("Learnsets", "houndoom").learnset.toxicspikes = ["6L1"];
- this.modData("Learnsets", "houndoom").learnset.venoshock = ["6L1"];
- this.modData("Learnsets", "houndoom").learnset.hex = ["6L1"];
- this.modData("Learnsets", "audino").learnset.discharge = ["6L1"];
- this.modData("Learnsets", "audino").learnset.voltswitch = ["6L1"];
- this.modData("Learnsets", "audino").learnset.chargebeam = ["6L1"];
- this.modData("Learnsets", "audino").learnset.charge = ["6L1"];
- this.modData("Learnsets", "audino").learnset.zapcannon = ["6L1"];
- this.modData("Learnsets", "glalie").learnset.thunderfang = ["6L1"];
- this.modData("Learnsets", "glalie").learnset.partingshot = ["6L1"];
- this.modData("Learnsets", "glalie").learnset.boomburst = ["6L1"];
- this.modData("Learnsets", "banette").learnset.ironhead = ["6L1"];
- this.modData("Learnsets", "banette").learnset.metalsound = ["6L1"];
- this.modData("Learnsets", "banette").learnset.powder = ["6L1"];
- this.modData("Learnsets", "banette").learnset.stealthrock = ["6L1"];
- this.modData("Learnsets", "banette").learnset.defog = ["6L1"];
- this.modData("Learnsets", "venusaur").learnset.psychic = ["6L1"];
- this.modData("Learnsets", "venusaur").learnset.calmmind = ["6L1"];
- this.modData("Learnsets", "blastoise").learnset.moonblast = ["6L1"];
- this.modData("Learnsets", "blastoise").learnset.mistyterrain = ["6L1"];
- this.modData("Learnsets", "blastoise").learnset.taunt = ["6L1"];
- this.modData("Learnsets", "blastoise").learnset.drainingkiss = ["6L1"];
- this.modData("Learnsets", "blastoise").learnset.dazzlinggleam = ["6L1"];
- this.modData("Learnsets", "charizard").learnset.calmmind = ["6L1"];
- this.modData("Learnsets", "charizard").learnset.hurricane = ["6L1"];
- this.modData("Learnsets", "charizard").learnset.lavaplume = ["6L1"];
- this.modData("Learnsets", "gengar").learnset.reflecttype = ["6L1"];
- this.modData("Learnsets", "gengar").learnset.calmmind = ["6L1"];
- this.modData("Learnsets", "alakazam").learnset.blizzard = ["6L1"];
- this.modData("Learnsets", "alakazam").learnset.flashcannon = ["6L1"];
- this.modData("Learnsets", "alakazam").learnset.icebeam = ["6L1"];
- this.modData("Learnsets", "alakazam").learnset.hail = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.hail = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.megahorn = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.uturn = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.iceshard = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.iciclecrash = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.icebeam = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.blizzard = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.roost = ["6L1"];
- this.modData("Learnsets", "pinsir").learnset.iciclespear = ["6L1"];
- this.modData("Learnsets", "aerodactyl").learnset.powergem = ["6L1"];
- this.modData("Learnsets", "aerodactyl").learnset.shadowball = ["6L1"];
- this.modData("Learnsets", "aerodactyl").learnset.hurricane = ["6L1"];
- this.modData("Learnsets", "steelix").learnset.heatcrash = ["6L1"];
- this.modData("Learnsets", "steelix").learnset.rapidspin = ["6L1"];
- this.modData("Learnsets", "steelix").learnset.smackdown = ["6L1"];
- this.modData("Learnsets", "altaria").learnset.scald = ["6L1"];
- this.modData("Learnsets", "altaria").learnset.hydropump = ["6L1"];
- this.modData("Learnsets", "altaria").learnset.thunder = ["6L1"];
- this.modData("Learnsets", "sceptile").learnset.calmmind = ["6L1"];
- this.modData("Learnsets", "sceptile").learnset.sludgewave = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.sludgebomb = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.bulkup = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.toxicspikes = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.aquajet = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.gunkshot = ["6L1"];
- this.modData("Learnsets", "swampert").learnset.poisonjab = ["6L1"];
- this.modData("Learnsets", "pidgeot").learnset.focusblast = ["6L1"];
- this.modData("Learnsets", "absol").learnset.closecombat = ["6L1"];
- this.modData("Learnsets", "absol").learnset.moonblast = ["6L1"];
- this.modData("Learnsets", "absol").learnset.moonlight = ["6L1"];
- this.modData("Learnsets", "medicham").learnset.aurasphere = ["6L1"];
- this.modData("Learnsets", "medicham").learnset.thunderbolt = ["6L1"];
- this.modData("Learnsets", "medicham").learnset.closecombat = ["6L1"];
- this.modData("Learnsets", "medicham").learnset.gunkshot = ["6L1"];
- this.modData("Learnsets", "medicham").learnset.healingwish = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.earthquake = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.stoneedge = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.rockslide = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.smackdown = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.stealthrock = ["6L1"];
- this.modData("Learnsets", "beedrill").learnset.diamondstorm = ["6L1"];
- this.modData("Learnsets", "mawile").learnset.firepunch = ["6L1"];
- this.modData("Learnsets", "mawile").learnset.rockslide = ["6L1"];
- this.modData("Learnsets", "mawile").learnset.slackoff = ["6L1"];
- this.modData("Learnsets", "camerupt").learnset.morningsun = ["6L1"];
- this.modData("Learnsets", "abomasnow").learnset.spikyshield = ["6L1"];
- this.modData("Learnsets", "abomasnow").learnset.earthpower = ["6L1"];
- this.modData("Learnsets", "abomasnow").learnset.hornleech = ["6L1"];
- this.modData("Learnsets", "gallade").learnset.sacredsword = ["6L1"];
- this.modData("Learnsets", "gallade").learnset.machpunch = ["6L1"];
- this.modData('Moves', 'aerialace').flags.slicing = 1;
- this.modData('Moves', 'aircutter').flags.slicing = 1;
- this.modData('Moves', 'airslash').flags.slicing = 1;
- this.modData('Moves', 'behemothblade').flags.slicing = 1;
- this.modData('Moves', 'crosspoison').flags.slicing = 1;
- this.modData('Moves', 'cut').flags.slicing = 1;
- this.modData('Moves', 'furycutter').flags.slicing = 1;
- this.modData('Moves', 'nightslash').flags.slicing = 1;
- this.modData('Moves', 'psychocut').flags.slicing = 1;
- this.modData('Moves', 'razorleaf').flags.slicing = 1;
- this.modData('Moves', 'razorshell').flags.slicing = 1;
- this.modData('Moves', 'sacredsword').flags.slicing = 1;
- this.modData('Moves', 'slash').flags.slicing = 1;
- this.modData('Moves', 'solarblade').flags.slicing = 1;
- this.modData('Moves', 'xscissor').flags.slicing = 1;
- this.modData("Learnsets", "ampharos").learnset.waterpulse = ["6L1"];
- this.modData("Learnsets", "ampharos").learnset.aurasphere = ["6L1"];
- this.modData("Learnsets", "ampharos").learnset.darkpulse = ["6L1"];
- this.modData("Learnsets", "ampharos").learnset.defog = ["6L1"];
- this.modData("Learnsets", "ampharos").learnset.slackoff = ["6L1"];
- this.modData("Learnsets", "heracross").learnset.healorder = ["6L1"];
- this.modData("Learnsets", "heracross").learnset.circlethrow = ["6L1"];
- this.modData("Learnsets", "heracross").learnset.spikes = ["6L1"];
- this.modData("Learnsets", "heracross").learnset.icepunch = ["6L1"];
- this.modData("Learnsets", "sharpedo").learnset.thunder = ["6L1"];
- this.modData("Learnsets", "gardevoir").learnset.rapidspin = ["6L1"];
- this.modData("Learnsets", "gardevoir").learnset.mysticalfire = ["6L1"];
- this.modData("Learnsets", "aggron").learnset.voltswitch = ["6L1"];
- this.modData("Learnsets", "kangaskhan").learnset.milkdrink = ["6L1"];
- this.modData("Learnsets", "salamence").learnset.hurricane = ["6L1"];
- this.modData("Learnsets", "salamence").learnset.airslash = ["6L1"];
- this.modData("Learnsets", "salamence").learnset.ironhead = ["6L1"];
- this.modData("Learnsets", "tyranitar").learnset.wildcharge = ["6L1"];
- this.modData("Learnsets", "tyranitar").learnset.waterfall = ["6L1"];
- this.modData("Learnsets", "diancie").learnset.spikyshield = ["6L1"];
- this.modData("Learnsets", "blaziken").learnset.uturn = ["6L1"];
- this.modData("Learnsets", "blaziken").learnset.spikes = ["6L1"];
- this.modData("Learnsets", "blaziken").learnset.roost = ["6L1"];
- this.modData("Learnsets", "blaziken").learnset.closecombat = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.extremespeed = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.sludgewave = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.swordsdance = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.uturn = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.closecombat = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.drainpunch = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.machpunch = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.scald = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.surf = ["6L1"];
- this.modData("Learnsets", "mewtwo").learnset.hydropump = ["6L1"];
- this.modData("Learnsets", "rayquaza").learnset.coil = ["6L1"];
- this.modData("Learnsets", "rayquaza").learnset.defog = ["6L1"];
- },
-};
diff --git a/data/mods/gen9regeneration/abilities.ts b/data/mods/gen9regeneration/abilities.ts
new file mode 100644
index 0000000000..777b39548f
--- /dev/null
+++ b/data/mods/gen9regeneration/abilities.ts
@@ -0,0 +1,277 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ // new
+ wingsofvictory: {
+ onStart(pokemon) {
+ if (pokemon.side.foe.totalFainted) {
+ this.add('-activate', pokemon, 'ability: Wings of Victory');
+ const fallen = Math.min(pokemon.side.foe.totalFainted, 5);
+ this.add('-start', pokemon, `fallen${fallen}`, '[silent]');
+ this.effectState.fallen = fallen;
+ }
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, `fallen${this.effectState.fallen}`, '[silent]');
+ },
+ onBasePowerPriority: 21,
+ onBasePower(basePower, attacker, defender, move) {
+ if (this.effectState.fallen) {
+ const powMod = [4096, 4506, 4915, 5325, 5734, 6144];
+ this.debug(`Wings of Victory boost: ${powMod[this.effectState.fallen]}/4096`);
+ return this.chainModify([powMod[this.effectState.fallen], 4096]);
+ }
+ },
+ name: "Wings of Victory",
+ shortDesc: "This Pokemon's moves have 10% more power for each fainted foe, up to 5 foes.",
+ rating: 3.5,
+ },
+ galaxybrain: {
+ onStart(pokemon) {
+ let totalatk = 0;
+ let totalspa = 0;
+ for (const target of pokemon.side.foe.active) {
+ if (!target || target.fainted) continue;
+ totalatk += target.getStat('atk', false, true);
+ totalspa += target.getStat('spa', false, true);
+ }
+ if (totalatk && totalatk >= totalspa) {
+ this.boost({ def: 1 });
+ } else if (totalspa) {
+ this.boost({ spd: 1 });
+ }
+ },
+ name: "Galaxy Brain",
+ shortDesc: "On switch-in, Defense or Sp. Def is raised 1 stage based on the foes' stronger offense.",
+ rating: 4,
+ },
+ blackout: {
+ onStart(source) {
+ this.field.addPseudoWeather('magicroom', source);
+ /* let activated = false;
+ for (const pokemon of this.getAllActive()) {
+ if (!activated) {
+ this.add('-ability', source, 'Blackout');
+ }
+ activated = true;
+ if (!pokemon.volatiles['embargo']) {
+ pokemon.addVolatile('embargo');
+ }
+ } */
+ },
+ /* onAnySwitchIn(pokemon) {
+ if (!pokemon.volatiles['embargo']) {
+ pokemon.addVolatile('embargo');
+ }
+ }, */
+ onEnd(pokemon) {
+ this.field.removePseudoWeather('magicroom');
+ /* for (const target of this.getAllActive()) {
+ if (target === pokemon) continue;
+ if (target.hasAbility('blackout')) return;
+ }
+ for (const target of this.getAllActive()) {
+ target.removeVolatile('embargo');
+ } */
+ },
+ name: "Blackout",
+ shortDesc: "While this Pokemon is active, all held items are disabled.",
+ rating: 5,
+ },
+ excavate: {
+ onSwitchIn(pokemon) {
+ let activated = false;
+ for (const sideCondition of ['spikes', 'stealthrock']) {
+ if (pokemon.side.getSideCondition(sideCondition) && !pokemon.side.getSideCondition('excavate')) {
+ if (!activated) {
+ this.add('-activate', pokemon, 'ability: Excavate');
+ activated = true;
+ }
+ }
+ if (pokemon.side.getSideCondition('spikes') && !pokemon.side.getSideCondition('excavate')) {
+ this.add('-sideend', pokemon.side, 'move: Spikes', `[of] ${pokemon}`);
+ pokemon.side.removeSideCondition('spikes');
+ this.boost({ def: 1 }, pokemon);
+ pokemon.side.addSideCondition('excavate');
+ }
+ if (pokemon.side.getSideCondition('stealthrock') && !pokemon.side.getSideCondition('excavate')) {
+ this.add('-sideend', pokemon.side, 'move: Stealth Rock', `[of] ${pokemon}`);
+ pokemon.side.removeSideCondition('stealthrock');
+ this.boost({ def: 1 }, pokemon);
+ pokemon.side.addSideCondition('excavate');
+ }
+ }
+ },
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Excavate Used');
+ },
+ },
+ name: "Excavate",
+ shortDesc: "Once per game. Removes Stealth Rock and Spikes on switch-in, +1 Def for each hazard removed.",
+ rating: 4,
+ },
+ lifeguard: {
+ onDamagingHit(damage, target, source, move) {
+ if (move.type === 'Water') {
+ this.boost({ def: 1 });
+ }
+ },
+ onModifySecondaries(secondaries, target, source, move) {
+ if (move.type === 'Water') return;
+ this.debug('Lifeguard prevent secondary');
+ return secondaries.filter(effect => !!effect.self);
+ },
+ name: "Lifeguard",
+ shortDesc: "Boosts Defense when hit by a Water move; blocks additional effects of Water moves.",
+ rating: 3,
+ },
+ ballooning: {
+ onDamage(damage, target, source, effect) {
+ if (
+ effect.effectType === "Move" &&
+ !effect.multihit &&
+ !(effect.hasSheerForce && source.hasAbility('sheerforce'))
+ ) {
+ this.effectState.checkedBallooning = false;
+ } else {
+ this.effectState.checkedBallooning = true;
+ }
+ },
+ onTryEatItem(item) {
+ const healingItems = [
+ 'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry',
+ 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice',
+ ];
+ if (healingItems.includes(item.id)) {
+ return this.effectState.checkedBallooning;
+ }
+ return true;
+ },
+ onAfterMoveSecondary(target, source, move) {
+ this.effectState.checkedBallooning = true;
+ if (!source || source === target || !target.hp || !move.totalDamage) return;
+ const lastAttackedBy = target.getLastAttackedBy();
+ if (!lastAttackedBy) return;
+ const damage = move.multihit ? move.totalDamage : lastAttackedBy.damage;
+ if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) {
+ this.boost({ atk: 1, spa: 1, spe: 1 }, target, target);
+ target.addVolatile('perishsong');
+ }
+ },
+ name: "Ballooning",
+ shortDesc: "At 1/2 or less of this Pokemon's max HP: +1 Atk, Sp. Atk, Spe, and gains the Perish Song effect.",
+ rating: 4,
+ },
+ ofafeather: {
+ onModifyAtkPriority: 5,
+ onModifyAtk(atk, attacker, defender, move) {
+ if (move.type === 'Flying') {
+ this.debug('Of A Feather boost');
+ return this.chainModify(1.5);
+ }
+ },
+ onModifySpAPriority: 5,
+ onModifySpA(atk, attacker, defender, move) {
+ if (move.type === 'Flying') {
+ this.debug('Of A Feather boost');
+ return this.chainModify(1.5);
+ }
+ },
+ name: "Of A Feather",
+ rating: 3.5,
+ shortDesc: "This Pokemon's Flying-type moves have 1.5x power.",
+ },
+ patriarch: {
+ onStart(pokemon) {
+ if (pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status)) {
+ this.add('-activate', pokemon, 'ability: Patriarch');
+ const healthy = Math.min(pokemon.side.pokemon
+ .filter(ally => ally === pokemon || !ally.fainted && !ally.status).length, 5);
+ this.add('-start', pokemon, `healthy{healthy}`, '[silent]');
+ this.effectState.healthy = healthy;
+ }
+ },
+ onEnd(pokemon) {
+ this.add('-end', pokemon, `healthy${this.effectState.healthy}`, '[silent]');
+ },
+ onBasePowerPriority: 21,
+ onBasePower(basePower, attacker, defender, move) {
+ if (this.effectState.healthy) {
+ const powMod = [4096, 4506, 4915, 5325, 5734, 6144];
+ this.debug(`Patriach boost: ${powMod[this.effectState.healthy]}/4096`);
+ return this.chainModify([powMod[this.effectState.healthy], 4096]);
+ }
+ },
+ name: "Patriarch",
+ shortDesc: "This Pokemon's moves have 10% more power for each of its healthy allies.",
+ rating: 3.5,
+ },
+ violentabandon: {
+ onAfterUseItem(item, pokemon) {
+ if (
+ pokemon !== this.effectState.target &&
+ pokemon.baseSpecies.baseSpecies !== 'Gyarados' ||
+ pokemon.transformed
+ ) {
+ return;
+ }
+ if (pokemon.species.forme !== 'Mega') {
+ pokemon.formeChange('Gyarados-Mega', this.effect, true);
+ }
+ },
+ onTakeItem(item, pokemon) {
+ if (
+ pokemon !== this.effectState.target &&
+ pokemon.baseSpecies.baseSpecies !== 'Gyarados' ||
+ pokemon.transformed
+ ) {
+ return;
+ }
+ if (pokemon.species.forme !== 'Mega') {
+ pokemon.formeChange('Gyarados-Mega', this.effect, true);
+ }
+ },
+ flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1 },
+ name: "Violent Abandon",
+ shortDesc: "This Pokemon transforms into Mega Gyarados whenever its item is used or lost.",
+ rating: 3.5,
+ },
+ tropicalcurrent: {
+ onDamagePriority: 1,
+ onDamage(damage, target, source, effect) {
+ if (effect.id === 'brn') {
+ this.heal(target.baseMaxhp / 8);
+ return false;
+ }
+ },
+ name: "Tropical Current",
+ shortDesc: "This Pokemon restored 1/8 of its max HP per turn if it's burned. Ignores burn attack drop.",
+ rating: 4,
+ },
+ bullspirit: {
+ onAfterMoveSecondarySelf(source, target, move) {
+ if (!move || source.switchFlag === true || !move.hitTargets || move.type !== 'Normal') return;
+ this.add('-ability', source, 'Bull Spirit');
+ this.add('-message', `${source.name}'s next attack will be physical!`);
+ source.addVolatile('bullspirit');
+ },
+ condition: {
+ onStart(target) {
+ this.add('-start', target, 'ability: Bull Spirit');
+ },
+ duration: 2,
+ onModifyMovePriority: 8,
+ onModifyMove(move, pokemon) {
+ if (move.category !== "Status") {
+ move.category = "Physical";
+ }
+ },
+ onEnd(target) {
+ this.add('-end', target, 'ability: Bull Spirit', '[silent]');
+ },
+ },
+ flags: {},
+ name: "Bull Spirit",
+ rating: 1,
+ shortDesc: "After using a Normal-type move, the user's next attack will always be physical.",
+ },
+};
diff --git a/data/mods/gen9regeneration/formats-data.ts b/data/mods/gen9regeneration/formats-data.ts
new file mode 100644
index 0000000000..b409dc025c
--- /dev/null
+++ b/data/mods/gen9regeneration/formats-data.ts
@@ -0,0 +1,674 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ bulbasaur: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ ivysaur: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ venusaur: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ venusaurmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charmander: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ charmeleon: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ charizard: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ charizardmegax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charizardmegay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ squirtle: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ wartortle: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ blastoise: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ blastoisemega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ caterpie: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ metapod: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ butterfree: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ weedle: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ kakuna: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ beedrill: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ beedrillmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pidgey: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ pidgeotto: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ pidgeot: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ pidgeotmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rattata: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ raticate: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ spearow: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ fearow: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ ekans: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ arbok: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ pikachu: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ raichu: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ sandshrew: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ sandslash: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ nidoranf: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ nidorina: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ nidoqueen: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ nidoranm: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ nidorino: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ nidoking: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ cleffa: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ clefairy: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ clefable: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ vulpix: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ ninetales: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ igglybuff: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ jigglypuff: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ wigglytuff: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ zubat: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ golbat: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ oddish: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ gloom: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ vileplume: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ paras: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ parasect: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ venonat: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ venomoth: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ diglett: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ dugtrio: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ meowth: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ persian: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ psyduck: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ golduck: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ mankey: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ primeape: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ growlithe: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ arcanine: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ poliwag: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ poliwhirl: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ poliwrath: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ abra: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ kadabra: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ alakazam: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ alakazammega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ machop: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ machoke: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ machamp: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ bellsprout: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ weepinbell: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ victreebel: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ tentacool: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ tentacruel: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ geodude: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ graveler: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ golem: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ ponyta: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ rapidash: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ slowpoke: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ slowbro: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ slowbromega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magnemite: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ magneton: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ farfetchd: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ doduo: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ dodrio: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ seel: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ dewgong: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ grimer: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ muk: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ shellder: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ cloyster: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ gastly: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ haunter: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ gengar: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ gengarmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ onix: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ drowzee: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ hypno: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ krabby: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ kingler: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ voltorb: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ electrode: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ exeggcute: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ exeggutor: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ cubone: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ marowak: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ hitmonlee: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ hitmonchan: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ lickitung: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ koffing: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ weezing: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ rhyhorn: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ rhydon: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ chansey: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ tangela: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ kangaskhan: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ kangaskhanmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ horsea: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ seadra: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ goldeen: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ seaking: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ staryu: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ starmie: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ mrmime: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ scyther: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ jynx: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ electabuzz: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ magmar: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ pinsir: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ pinsirmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tauros: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ magikarp: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ gyarados: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ gyaradosmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lapras: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ ditto: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ eevee: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ vaporeon: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ jolteon: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ flareon: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ porygon: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ omanyte: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ omastar: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ kabuto: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ kabutops: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ aerodactyl: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ aerodactylmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snorlax: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ articuno: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ zapdos: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ moltres: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ dratini: {
+ tier: "LC",
+ doublesTier: "LC",
+ },
+ dragonair: {
+ tier: "NFE",
+ doublesTier: "NFE",
+ },
+ dragonite: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+ mewtwo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mewtwomegax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mewtwomegay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mew: {
+ tier: "OU",
+ doublesTier: "DOU",
+ },
+};
diff --git a/data/mods/gen9regeneration/moves.ts b/data/mods/gen9regeneration/moves.ts
new file mode 100644
index 0000000000..5c61416b6c
--- /dev/null
+++ b/data/mods/gen9regeneration/moves.ts
@@ -0,0 +1,573 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ // new
+ vitalenergy: {
+ accuracy: 100,
+ basePower: 150,
+ basePowerCallback(pokemon, target, move) {
+ return move.basePower * pokemon.hp / pokemon.maxhp;
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Seed Flare", target);
+ },
+ category: "Special",
+ name: "Vital Energy",
+ shortDesc: "Less power as user's HP decreases. Hits foe(s).",
+ pp: 5,
+ priority: 0,
+ flags: { protect: 1, mirror: 1 },
+ secondary: undefined,
+ target: "allAdjacentFoes",
+ type: "Grass",
+ contestType: "Beautiful",
+ },
+ smokytorment: {
+ accuracy: true,
+ basePower: 75,
+ category: "Physical",
+ name: "Smoky Torment",
+ shortDesc: "Applies the Torment effect on opponent.",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Outrage", target);
+ },
+ secondary: {
+ chance: 100,
+ volatileStatus: 'torment',
+ },
+ target: "normal",
+ type: "Dark",
+ contestType: "Cool",
+ },
+ powerwash: {
+ accuracy: 100,
+ basePower: 50,
+ category: "Special",
+ name: "Power Wash",
+ shortDesc: "Removes all hazards in the field. If any are cleared, the user heals for 50% of its maximum HP.",
+ pp: 40,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ onHit(target, source, move) {
+ let success = false;
+ const removeAll = [
+ 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge',
+ ];
+ for (const sideCondition of removeAll) {
+ if (source.side.removeSideCondition(sideCondition)) {
+ this.add('-sideend', source.side, this.dex.conditions.get(sideCondition).name, '[from] move: Power Wash', `[of] ${source}`);
+ success = true;
+ }
+ }
+ this.heal(Math.ceil(source.maxhp * 0.5), source);
+ return success;
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Volt Switch", target);
+ },
+ target: "normal",
+ type: "Water",
+ contestType: "Cool",
+ },
+ brainwave: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Special",
+ name: "Brainwave",
+ shortDesc: "Uses user's Special Defense stat as Special Attack in damage calculation.",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ overrideOffensiveStat: 'spd',
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Expanding Force", target);
+ },
+ secondary: undefined,
+ target: "normal",
+ type: "Psychic",
+ },
+ illwind: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Special",
+ name: "Ill Wind",
+ shortDesc: "Lowers the user's Sp. Atk by 1, drains 25% damage, heals another 25% for each neg SpA boost.",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, heal: 1 },
+ self: {
+ boosts: {
+ spa: -1,
+ },
+ },
+ drain: [1, 4],
+ /* onModifyMove(move, pokemon) {
+ move.drain = [pokemon.negativeBoosts.spa(), 4];
+ }, */
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Icy Wind", target);
+ },
+ secondary: undefined,
+ target: "normal",
+ type: "Ice",
+ contestType: "Clever",
+ },
+ guardiandive: {
+ accuracy: 100,
+ basePower: 75,
+ category: "Physical",
+ name: "Guardian Dive",
+ shortDesc: "Uses user's Defense stat as Attack in damage calculation.",
+ pp: 10,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ overrideOffensiveStat: 'def',
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Acrobatics", target);
+ },
+ secondary: undefined,
+ target: "normal",
+ type: "Flying",
+ },
+ coralcrash: {
+ accuracy: 100,
+ basePower: 120,
+ category: "Physical",
+ name: "Coral Crash",
+ shortDesc: "33% recoil. 10% chance to poison.",
+ pp: 15,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ secondary: {
+ chance: 10,
+ status: 'psn',
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Aqua Tail", target);
+ },
+ recoil: [33, 100],
+ target: "normal",
+ type: "Poison",
+ contestType: "Tough",
+ },
+ slipaway: {
+ accuracy: 100,
+ basePower: 50,
+ category: "Physical",
+ name: "Slip Away",
+ shortDesc: "100% chance to lower the target's Attack by 1, switches the user out.",
+ pp: 20,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ secondary: {
+ chance: 100,
+ boosts: {
+ atk: -1,
+ },
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Aqua Tail", target);
+ },
+ selfSwitch: true,
+ target: "normal",
+ type: "Water",
+ zMove: { effect: 'healreplacement' },
+ contestType: "Cool",
+ },
+ flareout: {
+ accuracy: 100,
+ basePower: 70,
+ category: "Physical",
+ name: "Flare Out",
+ shortDesc: "100% chance to lower the target's Defense by 1, switches the user out.",
+ pp: 20,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ secondary: {
+ chance: 100,
+ boosts: {
+ def: -1,
+ },
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Flame Charge", target);
+ },
+ selfSwitch: true,
+ target: "normal",
+ type: "Fire",
+ zMove: { effect: 'healreplacement' },
+ contestType: "Cool",
+ },
+ buzzoff: {
+ accuracy: 100,
+ basePower: 60,
+ category: "Special",
+ name: "Buzz Off",
+ shortDesc: "100% chance to lower the target's Speed by 1, switches the user out.",
+ pp: 20,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ secondary: {
+ chance: 100,
+ boosts: {
+ spe: -1,
+ },
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Volt Switch", target);
+ },
+ selfSwitch: true,
+ target: "normal",
+ type: "Electric",
+ zMove: { effect: 'healreplacement' },
+ contestType: "Cool",
+ },
+ powdergale: {
+ accuracy: 100,
+ basePower: 75,
+ category: "Special",
+ name: "Powder Gale",
+ shortDesc: "100% chance to poison. Harshly lowers a random one of the target's stats.",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, wind: 1, metronome: 1 },
+ onHit(target) {
+ const stats: BoostID[] = [];
+ let stat: BoostID;
+ for (stat in target.boosts) {
+ if (stat === 'accuracy' || stat === 'evasion') continue;
+ if (target.boosts[stat] > -6) {
+ stats.push(stat);
+ }
+ }
+ if (stats.length) {
+ const randomStat = this.sample(stats);
+ const boost: SparseBoostsTable = {};
+ boost[randomStat] = -2;
+ this.boost(boost);
+ } else {
+ return;
+ }
+ },
+ secondary: {
+ chance: 100,
+ status: 'psn',
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Silver Wind", target);
+ },
+ target: "normal",
+ type: "Bug",
+ contestType: "Clever",
+ },
+ splashback: {
+ accuracy: 100,
+ basePower: 50,
+ basePowerCallback(pokemon) {
+ return Math.min(300, 50 + 50 * pokemon.timesAttacked);
+ },
+ /* onEnd(pokemon) {
+ this.add('-end', pokemon, 'Splashback', '[silent]');
+ }, */
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Flip Turn", target);
+ },
+ category: "Physical",
+ name: "Splashback",
+ shortDesc: "Base power increases by 50 every time this Pokemon is hit. Max 300 BP. Reset on switch out.",
+ pp: 10,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ secondary: undefined,
+ target: "normal",
+ type: "Water",
+ },
+ ragingtorrent: {
+ accuracy: 100,
+ basePower: 90,
+ category: "Physical",
+ name: "Raging Torrent",
+ shortDesc: "Lowers the target's Atk by 1. Inflicts Encore on the user.",
+ pp: 20,
+ priority: 0,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
+ self: {
+ volatileStatus: 'encore',
+ },
+ secondary: {
+ chance: 100,
+ boosts: {
+ atk: -1,
+ },
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Breaking Swipe", target);
+ },
+ target: "allAdjacentFoes",
+ type: "Water",
+ contestType: "Tough",
+ },
+ familyonslaught: {
+ accuracy: 100,
+ basePower: 40,
+ category: "Physical",
+ shortDesc: "Hits 2-4 times.",
+ name: "Family Onslaught",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ multihit: [2, 4],
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Population Bomb", target);
+ },
+ target: "normal",
+ type: "Normal",
+ contestType: "Cute",
+ },
+ pestspread: {
+ accuracy: 100,
+ basePower: 100,
+ category: "Physical",
+ shortDesc: "Changes the target's type to the user's type.",
+ name: "Pest Spread",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ onAfterHit(target, source) {
+ if (target.species && (target.species.num === 493 || target.species.num === 773)) return false;
+ if (target.terastallized) return false;
+ const oldApparentType = target.apparentType;
+ let newBaseTypes = source.getTypes(true).filter(type => type !== '???');
+ if (!newBaseTypes.length) {
+ if (source.addedType) {
+ newBaseTypes = ['Normal'];
+ } else {
+ return false;
+ }
+ }
+ this.add('-start', target, 'typechange', '[from] move: Pest Spread', `[of] ${target}`);
+ target.setType(newBaseTypes);
+ target.addedType = source.addedType;
+ target.knownType = source.isAlly(source) && source.knownType;
+ if (!target.knownType) target.apparentType = oldApparentType;
+ },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Sludge Bomb", target);
+ },
+ target: "normal",
+ type: "Poison",
+ },
+ vengefulbone: {
+ accuracy: 100,
+ basePower: 80,
+ category: "Physical",
+ shortDesc: "Power doubles if an ally fainted last turn.",
+ name: "Vengeful Bone",
+ pp: 10,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Shadow Bone", target);
+ },
+ onBasePower(basePower, pokemon) {
+ if (pokemon.side.faintedLastTurn) {
+ this.debug('Boosted for a faint last turn');
+ return this.chainModify(2);
+ }
+ },
+ target: "normal",
+ type: "Ghost",
+ contestType: "Cool",
+ },
+ escort: {
+ accuracy: 100,
+ basePower: 50,
+ category: "Special",
+ shortDesc: "User switches out. Switch-in is immune to hazards.",
+ name: "Escort",
+ pp: 15,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1 },
+ selfSwitch: true,
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[still]');
+ this.add('-anim', source, "Baton Pass", source);
+ },
+ self: {
+ sideCondition: 'escort',
+ },
+ condition: {
+ duration: 1,
+ },
+ target: "normal",
+ type: "Normal",
+ contestType: "Clever",
+ },
+ stealthrock: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Stealth Rock');
+ },
+ onSwitchIn(pokemon) {
+ if (pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return;
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(this.dex.getActiveMove('stealthrock')), -6, 6);
+ this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
+ },
+ },
+ },
+ gmaxsteelsurge: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: G-Max Steelsurge');
+ },
+ onSwitchIn(pokemon) {
+ if (pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return;
+ // Ice Face and Disguise correctly get typed damage from Stealth Rock
+ // because Stealth Rock bypasses Substitute.
+ // They don't get typed damage from Steelsurge because Steelsurge doesn't,
+ // so we're going to test the damage of a Steel-type Stealth Rock instead.
+ const steelHazard = this.dex.getActiveMove('Stealth Rock');
+ steelHazard.type = 'Steel';
+ const typeMod = this.clampIntRange(pokemon.runEffectiveness(steelHazard), -6, 6);
+ this.damage(pokemon.maxhp * (2 ** typeMod) / 8);
+ },
+ },
+ },
+ spikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 3) return false;
+ this.add('-sidestart', side, 'Spikes');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return;
+ const damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4
+ this.damage(damageAmounts[this.effectState.layers] * pokemon.maxhp / 24);
+ },
+ },
+ },
+ stickyweb: {
+ inherit: true,
+ condition: {
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Sticky Web');
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded() || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) return;
+ this.add('-activate', pokemon, 'move: Sticky Web');
+ this.boost({ spe: -1 }, pokemon, pokemon.side.foe.active[0], this.dex.getActiveMove('stickyweb'));
+ },
+ },
+ },
+ toxicspikes: {
+ inherit: true,
+ condition: {
+ // this is a side condition
+ onSideStart(side) {
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers = 1;
+ },
+ onSideRestart(side) {
+ if (this.effectState.layers >= 2) return false;
+ this.add('-sidestart', side, 'move: Toxic Spikes');
+ this.effectState.layers++;
+ },
+ onSwitchIn(pokemon) {
+ if (!pokemon.isGrounded()) return;
+ if (pokemon.hasType('Poison')) {
+ this.add('-sideend', pokemon.side, 'move: Toxic Spikes', `[of] ${pokemon}`);
+ pokemon.side.removeSideCondition('toxicspikes');
+ } else if (pokemon.hasType('Steel') || pokemon.hasItem('heavydutyboots') || pokemon.side.getSideCondition('escort')) {
+ // do nothing
+ } else if (this.effectState.layers >= 2) {
+ pokemon.trySetStatus('tox', pokemon.side.foe.active[0]);
+ } else {
+ pokemon.trySetStatus('psn', pokemon.side.foe.active[0]);
+ }
+ },
+ },
+ },
+ /* // leftover placeholder for hidden power because teams.ts was not cooperating previously
+ terablast: {
+ num: 851,
+ accuracy: 100,
+ basePower: 60,
+ category: "Special",
+ name: "Tera Blast",
+ pp: 15,
+ priority: 0,
+ flags: { protect: 1, mirror: 1, metronome: 1, mustpressure: 1 },
+ onPrepareHit(target, source, move) {
+ this.attrLastMove('[anim] Tera Blast ' + source.teraType);
+ },
+ onModifyType(move, pokemon, target) {
+ move.type = pokemon.teraType;
+ this.add('-message', `This attack is ${pokemon.teraType}-type!`);
+ },
+ target: "normal",
+ type: "Normal",
+ }, */
+ magicroom: {
+ inherit: true,
+ condition: {
+ duration: 5,
+ durationCallback(source, effect) {
+ if (source?.hasAbility('blackout')) {
+ this.add('-activate', source, 'ability: blackout', '[move] Magic Room');
+ return 0;
+ }
+ if (source?.hasAbility('persistent')) {
+ this.add('-activate', source, 'ability: Persistent', '[move] Magic Room');
+ return 7;
+ }
+ return 5;
+ },
+ onFieldStart(target, source) {
+ if (source?.hasAbility('persistent')) {
+ this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`, '[persistent]');
+ } else {
+ this.add('-fieldstart', 'move: Magic Room', `[of] ${source}`);
+ }
+ for (const mon of this.getAllActive()) {
+ this.singleEvent('End', mon.getItem(), mon.itemState, mon);
+ }
+ },
+ onFieldRestart(target, source) {
+ this.field.removePseudoWeather('magicroom');
+ },
+ // Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js
+ onFieldResidualOrder: 27,
+ onFieldResidualSubOrder: 6,
+ onFieldEnd() {
+ this.add('-fieldend', 'move: Magic Room', '[of] ' + this.effectState.source);
+ },
+ },
+ },
+};
diff --git a/data/mods/gen9regeneration/pokedex.ts b/data/mods/gen9regeneration/pokedex.ts
new file mode 100644
index 0000000000..b6ec63046e
--- /dev/null
+++ b/data/mods/gen9regeneration/pokedex.ts
@@ -0,0 +1,198 @@
+export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
+ // new
+ alakazam: {
+ inherit: true,
+ baseStats: { hp: 80, atk: 50, def: 50, spa: 110, spd: 110, spe: 110 },
+ abilities: { 0: "Galaxy Brain", 1: "Inner Focus", H: "Trace" },
+ },
+ gengar: {
+ inherit: true,
+ types: ["Ghost", "Ice"],
+ baseStats: { hp: 65, atk: 65, def: 65, spa: 100, spd: 90, spe: 115 },
+ abilities: { 0: "Blackout" },
+ },
+ dragonite: {
+ inherit: true,
+ baseStats: { hp: 91, atk: 134, def: 95, spa: 95, spd: 84, spe: 101 },
+ abilities: { 0: "Lifeguard", H: "Marvel Scale" },
+ },
+ venusaur: {
+ inherit: true,
+ types: ["Grass", "Fairy"],
+ baseStats: { hp: 80, atk: 66, def: 98, spa: 111, spd: 100, spe: 70 },
+ abilities: { 0: "Overgrow", H: "Misty Surge" },
+ },
+ charizard: {
+ inherit: true,
+ types: ["Fire", "Dark"],
+ baseStats: { hp: 68, atk: 120, def: 89, spa: 60, spd: 87, spe: 109 },
+ abilities: { 0: "Blaze", H: "Levitate" },
+ },
+ blastoise: {
+ inherit: true,
+ types: ["Water", "Electric"],
+ baseStats: { hp: 79, atk: 53, def: 100, spa: 105, spd: 105, spe: 88 },
+ abilities: { 0: "Torrent", H: "Motor Drive" },
+ },
+ beedrill: {
+ inherit: true,
+ baseStats: { hp: 65, atk: 100, def: 40, spa: 35, spd: 94, spe: 116 },
+ abilities: { 0: "Poison Touch", H: "Speed Boost" },
+ },
+ pidgeot: {
+ inherit: true,
+ types: ["Flying"],
+ baseStats: { hp: 83, atk: 100, def: 75, spa: 50, spd: 70, spe: 112 },
+ abilities: { 0: "Keen Eye", 1: "Tangled Feet", H: "Wings of Victory" },
+ },
+ onix: {
+ inherit: true,
+ evos: [],
+ baseStats: { hp: 75, atk: 135, def: 140, spa: 30, spd: 75, spe: 70 },
+ abilities: { 0: "Sturdy", 1: "Solid Rock", H: "Excavate" },
+ },
+ wigglytuff: {
+ inherit: true,
+ types: ["Fairy", "Dark"],
+ baseStats: { hp: 140, atk: 75, def: 50, spa: 65, spd: 45, spe: 121 },
+ abilities: { 0: "Cute Charm", 1: "Aftermath", H: "Ballooning" },
+ },
+ dodrio: {
+ inherit: true,
+ types: ["Ground", "Fighting"],
+ baseStats: { hp: 85, atk: 115, def: 60, spa: 55, spd: 55, spe: 115 },
+ abilities: { 0: "Sand Rush", 1: "Early Bird", H: "Of A Feather" },
+ },
+ seadra: {
+ inherit: true,
+ evos: [],
+ types: ["Poison", "Dragon"],
+ baseStats: { hp: 80, atk: 100, def: 95, spa: 100, spd: 70, spe: 85 },
+ abilities: { 0: "Poison Point", 1: "Rain Dish", H: "Merciless" },
+ },
+ vaporeon: {
+ inherit: true,
+ abilities: { 0: "Run Away", 1: "Trace", H: "Protean" },
+ },
+ flareon: {
+ inherit: true,
+ baseStats: { hp: 110, atk: 130, def: 60, spa: 65, spd: 65, spe: 95 },
+ abilities: { 0: "Run Away", 1: "Trace", H: "Protean" },
+ },
+ jolteon: {
+ inherit: true,
+ baseStats: { hp: 65, atk: 65, def: 60, spa: 95, spd: 110, spe: 130 },
+ abilities: { 0: "Run Away", 1: "Trace", H: "Protean" },
+ },
+ nidoking: {
+ inherit: true,
+ baseStats: { hp: 81, atk: 102, def: 82, spa: 95, spd: 70, spe: 95 },
+ abilities: { 0: "Poison Point", 1: "Patriarch", H: "Sheer Force" },
+ },
+ nidoqueen: {
+ inherit: true,
+ baseStats: { hp: 100, atk: 82, def: 87, spa: 95, spd: 85, spe: 76 },
+ abilities: { 0: "Poison Point", 1: "Natural Cure", H: "Sheer Force" },
+ },
+ butterfree: {
+ inherit: true,
+ baseStats: { hp: 80, atk: 45, def: 52, spa: 92, spd: 79, spe: 106 },
+ abilities: { 0: "Compound Eyes", 1: "Tinted Lens", H: "Multiscale" },
+ },
+ cloyster: {
+ inherit: true,
+ types: ["Water", "Steel"],
+ baseStats: { hp: 80, atk: 90, def: 165, spa: 80, spd: 70, spe: 50 },
+ abilities: { 0: "Shell Armor", 1: "Water Veil", H: "Regenerator" },
+ },
+ gyarados: {
+ inherit: true,
+ baseStats: { hp: 100, atk: 100, def: 107, spa: 70, spd: 92, spe: 71 },
+ abilities: { 0: "Violent Abandon" },
+ },
+ gyaradosmega: {
+ inherit: true,
+ baseStats: { hp: 100, atk: 125, def: 107, spa: 105, spd: 122, spe: 81 },
+ abilities: { 0: "Violent Abandon" },
+ requiredItem: "",
+ },
+ tentacruel: {
+ inherit: true,
+ types: ["Dark", "Poison"],
+ baseStats: { hp: 80, atk: 50, def: 65, spa: 100, spd: 120, spe: 100 },
+ abilities: { 0: "Tropical Current" },
+ },
+ raticate: {
+ inherit: true,
+ types: ["Normal", "Poison"],
+ baseStats: { hp: 75, atk: 90, def: 70, spa: 40, spd: 75, spe: 125 },
+ abilities: { 0: "Poison Touch", 1: "Hustle", H: "Guts" },
+ },
+ kangaskhan: {
+ inherit: true,
+ types: ["Normal", "Dragon"],
+ baseStats: { hp: 115, atk: 110, def: 70, spa: 60, spd: 60, spe: 85 },
+ abilities: { 0: "Early Bird", 1: "Bulletproof", H: "Skill Link" },
+ },
+ farfetchd: {
+ inherit: true,
+ types: ["Normal", "Fighting"],
+ baseStats: { hp: 75, atk: 100, def: 80, spa: 60, spd: 75, spe: 90 },
+ abilities: { 0: "Hustle", 1: "Scrappy", H: "Defiant" },
+ },
+ lapras: {
+ inherit: true,
+ types: ["Ice", "Water"],
+ baseStats: { hp: 130, atk: 85, def: 80, spa: 85, spd: 95, spe: 60 },
+ abilities: { 0: "Storm Drain", 1: "Shell Armor", H: "Hydration" },
+ },
+ tauros: {
+ inherit: true,
+ types: ["Normal", "Ground"],
+ baseStats: { hp: 85, atk: 110, def: 105, spa: 30, spd: 70, spe: 110 },
+ abilities: { 0: "Intimidate", 1: "Bull Spirit", H: "Sheer Force" },
+ },
+ marowak: {
+ inherit: true,
+ types: ["Ground", "Ghost"],
+ baseStats: { hp: 80, atk: 80, def: 105, spa: 50, spd: 95, spe: 100 },
+ abilities: { 0: "Battle Armor", 1: "Sand Force", H: "Justified" },
+ },
+ // Minor Changes (mostly to prevent unevolved Pokemons in gen 1 to hold Eviolite)
+ golbat: {
+ inherit: true,
+ evos: [],
+ },
+ magneton: {
+ inherit: true,
+ evos: [],
+ },
+ lickitung: {
+ inherit: true,
+ evos: [],
+ },
+ rhydon: {
+ inherit: true,
+ evos: [],
+ },
+ chansey: {
+ inherit: true,
+ evos: [],
+ },
+ tangela: {
+ inherit: true,
+ evos: [],
+ },
+ electabuzz: {
+ inherit: true,
+ evos: [],
+ },
+ magmar: {
+ inherit: true,
+ evos: [],
+ },
+ porygon: {
+ inherit: true,
+ evos: [],
+ },
+};
diff --git a/data/mods/gen9regeneration/scripts.ts b/data/mods/gen9regeneration/scripts.ts
new file mode 100644
index 0000000000..c1b723b53c
--- /dev/null
+++ b/data/mods/gen9regeneration/scripts.ts
@@ -0,0 +1,329 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ actions: {
+ modifyDamage(
+ baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages = false
+ ) {
+ const tr = this.battle.trunc;
+ if (!move.type) move.type = '???';
+ const type = move.type;
+
+ baseDamage += 2;
+
+ if (move.spreadHit) {
+ // multi-target modifier (doubles only)
+ const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
+ this.battle.debug(`Spread modifier: ${spreadModifier}`);
+ baseDamage = this.battle.modify(baseDamage, spreadModifier);
+ } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
+ // Parental Bond modifier
+ const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5;
+ this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
+ baseDamage = this.battle.modify(baseDamage, bondModifier);
+ }
+
+ // weather modifier
+ baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
+
+ // crit - not a modifier
+ const isCrit = target.getMoveHitData(move).crit;
+ if (isCrit) {
+ baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
+ }
+
+ // random factor - also not a modifier
+ baseDamage = this.battle.randomizer(baseDamage);
+
+ // STAB
+ // The "???" type never gets STAB
+ // Not even if you Roost in Gen 4 and somehow manage to use
+ // Struggle in the same turn.
+ // (On second thought, it might be easier to get a MissingNo.)
+ if (type !== '???') {
+ let stab: number | [number, number] = 1;
+
+ const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
+ if (isSTAB) {
+ stab = 1.5;
+ }
+
+ // The Stellar tera type makes this incredibly confusing
+ // If the move's type does not match one of the user's base types,
+ // the Stellar tera type applies a one-time 1.2x damage boost for that type.
+ //
+ // If the move's type does match one of the user's base types,
+ // then the Stellar tera type applies a one-time 2x STAB boost for that type,
+ // and then goes back to using the regular 1.5x STAB boost for those types.
+ if (pokemon.terastallized === 'Stellar') {
+ if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
+ stab = isSTAB ? 2 : [4915, 4096];
+ move.stellarBoosted = true;
+ if (pokemon.species.name !== 'Terapagos-Stellar') {
+ pokemon.stellarBoostedTypes.push(type);
+ }
+ }
+ } else {
+ if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
+ stab = 2;
+ }
+ stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
+ }
+
+ baseDamage = this.battle.modify(baseDamage, stab);
+ }
+
+ // types
+ let typeMod = target.runEffectiveness(move);
+ typeMod = this.battle.clampIntRange(typeMod, -6, 6);
+ target.getMoveHitData(move).typeMod = typeMod;
+ if (typeMod > 0) {
+ if (!suppressMessages) this.battle.add('-supereffective', target);
+
+ for (let i = 0; i < typeMod; i++) {
+ baseDamage *= 2;
+ }
+ }
+ if (typeMod < 0) {
+ if (!suppressMessages) this.battle.add('-resisted', target);
+
+ for (let i = 0; i > typeMod; i--) {
+ baseDamage = tr(baseDamage / 2);
+ }
+ }
+
+ if (isCrit && !suppressMessages) this.battle.add('-crit', target);
+
+ if (
+ pokemon.status === 'brn' && move.category === 'Physical' &&
+ !pokemon.hasAbility('guts') && !pokemon.hasAbility('tropicalcurrent')
+ ) {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+
+ // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
+ if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
+
+ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
+ baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
+
+ 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);
+ },
+ },
+ init() {
+ this.modData("Learnsets", "alakazam").learnset.brainwave = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.avalanche = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.blizzard = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.focusenergy = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.frostbreath = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.icebeam = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.iceshard = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.powdersnow = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.snowscape = ["9L1"];
+ this.modData("Learnsets", "gengar").learnset.illwind = ["9L1"];
+ this.modData("Learnsets", "dragonite").learnset.barrier = ["9L1"];
+ this.modData("Learnsets", "dragonite").learnset.guardiandive = ["9L1"];
+ this.modData("Learnsets", "dragonite").learnset.uturn = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.aromaticmist = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.calmmind = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.dazzlinggleam = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.drainingkiss = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.fairywind = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.floralhealing = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.flowershield = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.healpulse = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.playrough = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.psychic = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.vitalenergy = ["9L1"];
+ this.modData("Learnsets", "venusaur").learnset.zenheadbutt = ["9L1"];
+ this.modData("Learnsets", "charizard").learnset.ceaselessedge = ["9L1"];
+ this.modData("Learnsets", "charizard").learnset.throatchop = ["9L1"];
+ this.modData("Learnsets", "charizard").learnset.smokytorment = ["9L1"];
+ this.modData("Learnsets", "charizard").learnset.suckerpunch = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.chargebeam = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.charge = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.iondeluge = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.powerwash = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.thunder = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.thunderwave = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.thunderbolt = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.thundershock = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.voltswitch = ["9L1"];
+ this.modData("Learnsets", "blastoise").learnset.zapcannon = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.closecombat = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.flail = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.reversal = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.spikes = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.stickyweb = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.taunt = ["9L1"];
+ this.modData("Learnsets", "beedrill").learnset.terablast = ["9L1"];
+ this.modData("Learnsets", "pidgeot").learnset.acrobatics = ["9L1"];
+ this.modData("Learnsets", "pidgeot").learnset.closecombat = ["9L1"];
+ this.modData("Learnsets", "wigglytuff").learnset.crunch = ["9L1"];
+ this.modData("Learnsets", "wigglytuff").learnset.darkpulse = ["9L1"];
+ this.modData("Learnsets", "wigglytuff").learnset.rapidspin = ["9L1"];
+ this.modData("Learnsets", "wigglytuff").learnset.taunt = ["9L1"];
+ this.modData("Learnsets", "wigglytuff").learnset.uturn = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.brickbreak = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.bulldoze = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.dig = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.drillrun = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.earthquake = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.highjumpkick = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.lowkick = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.quickguard = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.rototiller = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.sandattack = ["9L1"];
+ this.modData("Learnsets", "dodrio").learnset.triplekick = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.acidspray = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.coralcrash = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.dracometeor = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.sludgebomb = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.sludgewave = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.thunder = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.thunderbolt = ["9L1"];
+ this.modData("Learnsets", "seadra").learnset.toxicspikes = ["9L1"];
+ this.modData("Learnsets", "vaporeon").learnset.slipaway = ["9L1"];
+ this.modData("Learnsets", "flareon").learnset.crunch = ["9L1"];
+ this.modData("Learnsets", "flareon").learnset.flareout = ["9L1"];
+ this.modData("Learnsets", "flareon").learnset.playrough = ["9L1"];
+ this.modData("Learnsets", "flareon").learnset.psychicfangs = ["9L1"];
+ this.modData("Learnsets", "flareon").learnset.suckerpunch = ["9L1"];
+ this.modData("Learnsets", "jolteon").learnset.buzzoff = ["9L1"];
+ this.modData("Learnsets", "nidoking").learnset.barbbarrage = ["9L1"];
+ this.modData("Learnsets", "nidoqueen").learnset.moonlight = ["9L1"];
+ this.modData("Learnsets", "butterfree").learnset.strengthsap = ["9L1"];
+ this.modData("Learnsets", "butterfree").learnset.powdergale = ["9L1"];
+ delete this.modData('Learnsets', 'alakazam').learnset.focusblast;
+ delete this.modData('Learnsets', 'alakazam').learnset.nastyplot;
+ delete this.modData('Learnsets', 'gengar').learnset.focusblast;
+ delete this.modData('Learnsets', 'gengar').learnset.nastyplot;
+ delete this.modData('Learnsets', 'gengar').learnset.terablast;
+ delete this.modData('Learnsets', 'gengar').learnset.thunderbolt;
+ delete this.modData('Learnsets', 'gengar').learnset.thunder;
+ delete this.modData('Learnsets', 'dragonite').learnset.dragonclaw;
+ delete this.modData('Learnsets', 'dragonite').learnset.dragondance;
+ delete this.modData('Learnsets', 'dragonite').learnset.dragonrush;
+ delete this.modData('Learnsets', 'dragonite').learnset.dualwingbeat;
+ delete this.modData('Learnsets', 'dragonite').learnset.honeclaws;
+ delete this.modData('Learnsets', 'dragonite').learnset.outrage;
+ delete this.modData('Learnsets', 'dragonite').learnset.poweruppunch;
+ delete this.modData('Learnsets', 'dragonite').learnset.terablast;
+ delete this.modData('Learnsets', 'venusaur').learnset.earthpower;
+ delete this.modData('Learnsets', 'venusaur').learnset.weatherball;
+ delete this.modData('Learnsets', 'blastoise').learnset.aurasphere;
+ delete this.modData('Learnsets', 'blastoise').learnset.avalanche;
+ delete this.modData('Learnsets', 'blastoise').learnset.blizzard;
+ delete this.modData('Learnsets', 'blastoise').learnset.focusblast;
+ delete this.modData('Learnsets', 'blastoise').learnset.hail;
+ delete this.modData('Learnsets', 'blastoise').learnset.icebeam;
+ delete this.modData('Learnsets', 'blastoise').learnset.icepunch;
+ delete this.modData('Learnsets', 'blastoise').learnset.icywind;
+ delete this.modData('Learnsets', 'blastoise').learnset.mist;
+ delete this.modData('Learnsets', 'blastoise').learnset.shellsmash;
+ delete this.modData('Learnsets', 'pidgeot').learnset.toxic;
+ delete this.modData('Learnsets', 'dodrio').learnset.fly;
+ delete this.modData('Learnsets', 'seadra').learnset.blizzard;
+ delete this.modData('Learnsets', 'seadra').learnset.icebeam;
+ // Removing the prevos' moves
+ delete this.modData('Learnsets', 'gastly').learnset.nastyplot;
+ delete this.modData('Learnsets', 'gastly').learnset.terablast;
+ delete this.modData('Learnsets', 'gastly').learnset.thunderbolt;
+ delete this.modData('Learnsets', 'gastly').learnset.thunder;
+ delete this.modData('Learnsets', 'haunter').learnset.focusblast;
+ delete this.modData('Learnsets', 'haunter').learnset.nastyplot;
+ delete this.modData('Learnsets', 'haunter').learnset.terablast;
+ delete this.modData('Learnsets', 'haunter').learnset.thunderbolt;
+ delete this.modData('Learnsets', 'haunter').learnset.thunder;
+ delete this.modData('Learnsets', 'dratini').learnset.dragondance;
+ delete this.modData('Learnsets', 'dratini').learnset.dragonrush;
+ delete this.modData('Learnsets', 'dratini').learnset.outrage;
+ delete this.modData('Learnsets', 'dratini').learnset.terablast;
+ delete this.modData('Learnsets', 'dragonair').learnset.dragondance;
+ delete this.modData('Learnsets', 'dragonair').learnset.dragonrush;
+ delete this.modData('Learnsets', 'dragonair').learnset.outrage;
+ delete this.modData('Learnsets', 'dragonair').learnset.terablast;
+ delete this.modData('Learnsets', 'bulbasaur').learnset.weatherball;
+ delete this.modData('Learnsets', 'ivysaur').learnset.weatherball;
+ delete this.modData('Learnsets', 'squirtle').learnset.aurasphere;
+ delete this.modData('Learnsets', 'squirtle').learnset.blizzard;
+ delete this.modData('Learnsets', 'squirtle').learnset.hail;
+ delete this.modData('Learnsets', 'squirtle').learnset.icebeam;
+ delete this.modData('Learnsets', 'squirtle').learnset.icepunch;
+ delete this.modData('Learnsets', 'squirtle').learnset.mist;
+ delete this.modData('Learnsets', 'squirtle').learnset.shellsmash;
+ delete this.modData('Learnsets', 'wartortle').learnset.aurasphere;
+ delete this.modData('Learnsets', 'wartortle').learnset.blizzard;
+ delete this.modData('Learnsets', 'wartortle').learnset.hail;
+ delete this.modData('Learnsets', 'wartortle').learnset.icebeam;
+ delete this.modData('Learnsets', 'wartortle').learnset.icepunch;
+ delete this.modData('Learnsets', 'wartortle').learnset.mist;
+ delete this.modData('Learnsets', 'wartortle').learnset.shellsmash;
+ delete this.modData('Learnsets', 'pidgey').learnset.toxic;
+ delete this.modData('Learnsets', 'pidgeotto').learnset.toxic;
+ delete this.modData('Learnsets', 'doduo').learnset.fly;
+ delete this.modData('Learnsets', 'horsea').learnset.blizzard;
+ delete this.modData('Learnsets', 'horsea').learnset.icebeam;
+ this.modData("Learnsets", "raticate").learnset.gunkshot = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.poisonjab = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.sludgebomb = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.sludgewave = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.sludge = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.closecombat = ["9L1"];
+ this.modData("Learnsets", "raticate").learnset.pestspread = ["9L1"];
+ delete this.modData('Learnsets', 'raticate').learnset.swordsdance;
+ delete this.modData('Learnsets', 'raticate').learnset.stompingtantrum;
+ delete this.modData('Learnsets', 'raticate').learnset.suckerpunch;
+ delete this.modData('Learnsets', 'raticate').learnset.pursuit;
+ delete this.modData('Learnsets', 'raticate').learnset.zenheadbutt;
+ delete this.modData('Learnsets', 'rattata').learnset.swordsdance;
+ delete this.modData('Learnsets', 'rattata').learnset.stompingtantrum;
+ delete this.modData('Learnsets', 'rattata').learnset.suckerpunch;
+ delete this.modData('Learnsets', 'rattata').learnset.pursuit;
+ delete this.modData('Learnsets', 'rattata').learnset.zenheadbutt;
+ this.modData("Learnsets", "kangaskhan").learnset.familyonslaught = ["9L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.dragontail = ["9L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.dragonclaw = ["9L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.dracometeor = ["9L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.dragondance = ["9L1"];
+ this.modData("Learnsets", "kangaskhan").learnset.uturn = ["9L1"];
+ this.modData("Learnsets", "farfetchd").learnset.bulkup = ["9L1"];
+ this.modData("Learnsets", "farfetchd").learnset.sacredsword = ["9L1"];
+ delete this.modData('Learnsets', 'farfetchd').learnset.toxic;
+ this.modData("Learnsets", "lapras").learnset.escort = ["9L1"];
+ this.modData("Learnsets", "lapras").learnset.wish = ["9L1"];
+ this.modData("Learnsets", "tauros").learnset.escort = ["9L1"];
+ this.modData("Learnsets", "tauros").learnset.headlongrush = ["9L1"];
+ this.modData("Learnsets", "marowak").learnset.knockoff = ["9L1"];
+ this.modData("Learnsets", "marowak").learnset.vengefulbone = ["9L1"];
+ this.modData("Learnsets", "marowak").learnset.closecombat = ["9L1"];
+ this.modData("Learnsets", "gyarados").learnset.acrobatics = ["9L1"];
+ this.modData("Learnsets", "gyarados").learnset.ragingtorrent = ["9L1"];
+ this.modData("Learnsets", "cloyster").learnset.bulletpunch = ["9L1"];
+ this.modData("Learnsets", "cloyster").learnset.curse = ["9L1"];
+ this.modData("Learnsets", "cloyster").learnset.explosion = ["9L1"];
+ this.modData("Learnsets", "cloyster").learnset.ironhead = ["9L1"];
+ this.modData("Learnsets", "cloyster").learnset.splashback = ["9L1"];
+ this.modData("Learnsets", "tentacruel").learnset.darkpulse = ["9L1"];
+ this.modData("Learnsets", "tentacruel").learnset.foulplay = ["9L1"];
+ this.modData("Learnsets", "tentacruel").learnset.nastyplot = ["9L1"];
+ delete this.modData('Learnsets', 'cloyster').learnset.iceshard;
+ delete this.modData('Learnsets', 'cloyster').learnset.lifedew;
+ delete this.modData('Learnsets', 'cloyster').learnset.shellsmash;
+ delete this.modData('Learnsets', 'tentacruel').learnset.scald;
+ delete this.modData('Learnsets', 'shellder').learnset.iceshard;
+ delete this.modData('Learnsets', 'shellder').learnset.lifedew;
+ delete this.modData('Learnsets', 'shellder').learnset.shellsmash;
+ delete this.modData('Learnsets', 'tentacool').learnset.scald;
+ },
+};
diff --git a/data/random-battles/gen6megasrevisited/factory-sets.json b/data/random-battles/gen6megasrevisited/factory-sets.json
deleted file mode 100644
index 12918022ce..0000000000
--- a/data/random-battles/gen6megasrevisited/factory-sets.json
+++ /dev/null
@@ -1,10319 +0,0 @@
-{
- "Uber": {
- "klefki": {
- "flags": {},
- "sets": [
- {
- "species": "Klefki",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Spikes"], ["Thunder Wave"], ["Toxic"], ["Play Rough"]]
- }
- ]
- },
- "zekrom": {
- "flags": {},
- "sets": [
- {
- "species": "Zekrom",
- "item": "Choice Band",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bolt Strike"], ["Outrage"], ["Dragon Claw"], ["Volt Switch"]]
- },
- {
- "species": "Zekrom",
- "item": "Choice Scarf",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Lonely",
- "moves": [["Bolt Strike"], ["Volt Switch"], ["Draco Meteor"], ["Outrage"]]
- },
- {
- "species": "Zekrom",
- "item": "Choice Scarf",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bolt Strike"], ["Volt Switch"], ["Sleep Talk"], ["Outrage"]]
- },
- {
- "species": "Zekrom",
- "item": "Life Orb",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Lonely",
- "moves": [["Bolt Strike"], ["Draco Meteor"], ["Dragon Claw"], ["Tailwind"]]
- },
- {
- "species": "Zekrom",
- "item": "Shuca Berry",
- "ability": "Teravolt",
- "evs": {"hp": 132, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 124},
- "nature": "Adamant",
- "moves": [["Substitute", "Outrage"], ["Hone Claws"], ["Bolt Strike"], ["Dragon Claw"]]
- }
- ]
- },
- "yveltal": {
- "flags": {},
- "sets": [
- {
- "species": "Yveltal",
- "item": "Choice Scarf",
- "ability": "Dark Aura",
- "evs": {"hp": 0, "atk": 32, "def": 4, "spa": 248, "spd": 0, "spe": 224},
- "nature": "Modest",
- "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Foul Play"], ["U-turn"]]
- },
- {
- "species": "Yveltal",
- "item": "Life Orb",
- "ability": "Dark Aura",
- "evs": {"hp": 132, "atk": 28, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Rash",
- "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Sucker Punch"], ["Heat Wave"]]
- },
- {
- "species": "Yveltal",
- "item": "Leftovers",
- "ability": "Dark Aura",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Foul Play"], ["Taunt"], ["Sucker Punch"], ["Roost"]]
- },
- {
- "species": "Yveltal",
- "item": "Leftovers",
- "ability": "Dark Aura",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Bold",
- "moves": [["Foul Play"], ["Taunt"], ["Toxic"], ["Roost"]]
- }
- ]
- },
- "xerneas": {
- "flags": {},
- "sets": [
- {
- "species": "Xerneas",
- "item": "Life Orb",
- "ability": "Fairy Aura",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Mild",
- "moves": [["Moonblast"], ["Close Combat"], ["Rock Slide"], ["Aromatherapy"]]
- },
- {
- "species": "Xerneas",
- "item": "Choice Scarf",
- "ability": "Fairy Aura",
- "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 248, "spd": 0, "spe": 184},
- "nature": "Rash",
- "moves": [["Moonblast"], ["Sleep Talk"], ["Close Combat"], ["Rock Slide"]]
- },
- {
- "species": "Xerneas",
- "item": "Leftovers",
- "ability": "Fairy Aura",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Aromatherapy"], ["Rest"], ["Sleep Talk"], ["Moonblast"]]
- },
- {
- "species": "Xerneas",
- "item": "Power Herb",
- "ability": "Fairy Aura",
- "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44},
- "nature": "Modest",
- "moves": [["Geomancy"], ["Moonblast"], ["Focus Blast"], ["Thunder"]]
- },
- {
- "species": "Xerneas",
- "item": "Power Herb",
- "ability": "Fairy Aura",
- "evs": {"hp": 184, "atk": 0, "def": 28, "spa": 252, "spd": 0, "spe": 44},
- "nature": "Modest",
- "moves": [["Geomancy"], ["Moonblast"], ["Hidden Power Ground"], ["Thunder"]]
- }
- ]
- },
- "tyranitar": {
- "flags": {},
- "sets": [
- {
- "species": "Tyranitar",
- "item": "Leftovers",
- "ability": "Sand Stream",
- "evs": {"hp": 248, "atk": 0, "def": 96, "spa": 0, "spd": 164, "spe": 0},
- "nature": "Careful",
- "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
- },
- {
- "species": "Tyranitar",
- "item": "Shuca Berry",
- "ability": "Sand Stream",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Stealth Rock"], ["Pursuit"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
- },
- {
- "species": "Tyranitar",
- "item": "Shuca Berry",
- "ability": "Sand Stream",
- "evs": {"hp": 248, "atk": 72, "def": 0, "spa": 0, "spd": 188, "spe": 0},
- "nature": "Careful",
- "moves": [["Stealth Rock"], ["Low Kick"], ["Rock Slide"], ["Thunder Wave", "Roar"]]
- }
- ]
- },
- "shayminsky": {
- "flags": {},
- "sets": [
- {
- "species": "Shaymin-Sky",
- "item": "Life Orb",
- "ability": "Serene Grace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Seed Flare"], ["Air Slash"], ["Earth Power"], ["Healing Wish"]]
- },
- {
- "species": "Shaymin-Sky",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]]
- }
- ]
- },
- "salamence": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Salamence",
- "item": "Salamencite",
- "ability": "Intimidate",
- "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Adamant",
- "moves": [["Double-Edge"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]]
- },
- {
- "species": "Salamence",
- "item": "Salamencite",
- "ability": "Intimidate",
- "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Adamant",
- "moves": [["Return"], ["Refresh", "Earthquake"], ["Roost"], ["Dragon Dance"]],
- "happiness": 255
- },
- {
- "species": "Salamence",
- "item": "Salamencite",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Return"], ["Earthquake"], ["Roost"], ["Dragon Dance"]],
- "happiness": 255
- },
- {
- "species": "Salamence",
- "item": "Salamencite",
- "ability": "Intimidate",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124},
- "nature": "Impish",
- "moves": [["Return"], ["Refresh"], ["Roost"], ["Dragon Dance"]],
- "happiness": 255
- }
- ]
- },
- "sableye": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Sableye",
- "item": "Sablenite",
- "ability": "Prankster",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Bold",
- "moves": [["Foul Play"], ["Protect", "Fake Out"], ["Will-O-Wisp"], ["Recover"]]
- }
- ]
- },
- "reshiram": {
- "flags": {},
- "sets": [
- {
- "species": "Reshiram",
- "item": "Choice Scarf",
- "ability": "Turboblaze",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Blue Flare"], ["Draco Meteor"], ["Sleep Talk"], ["Stone Edge"]]
- },
- {
- "species": "Reshiram",
- "item": "Life Orb",
- "ability": "Turboblaze",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Flame Charge"], ["Blue Flare"], ["Draco Meteor"], ["Stone Edge"]]
- },
- {
- "species": "Reshiram",
- "item": "Leftovers",
- "ability": "Turboblaze",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Blue Flare"], ["Draco Meteor"], ["Toxic"], ["Roost"]]
- }
- ]
- },
- "rayquaza": {
- "flags": {},
- "sets": [
- {
- "species": "Rayquaza",
- "item": "Life Orb",
- "ability": "Air Lock",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]]
- },
- {
- "species": "Rayquaza",
- "item": "Life Orb",
- "ability": "Air Lock",
- "evs": {"hp": 0, "atk": 40, "def": 0, "spa": 252, "spd": 0, "spe": 216},
- "nature": "Rash",
- "moves": [["Draco Meteor"], ["Dragon Ascent"], ["Extreme Speed"], ["Earthquake"]]
- },
- {
- "species": "Rayquaza",
- "item": "Life Orb",
- "ability": "Air Lock",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]]
- }
- ]
- },
- "palkia": {
- "flags": {},
- "sets": [
- {
- "species": "Palkia",
- "item": "Choice Specs",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Draco Meteor"], ["Spacial Rend"], ["Fire Blast"]]
- },
- {
- "species": "Palkia",
- "item": "Lustrous Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Spacial Rend"], ["Fire Blast"], ["Thunder Wave"]]
- },
- {
- "species": "Palkia",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Surf"], ["Toxic"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Palkia",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 60, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Rest"], ["Toxic"], ["Hydro Pump"], ["Spacial Rend"]]
- }
- ]
- },
- "mewtwo": {
- "flags": {},
- "sets": [
- {
- "species": "Mewtwo",
- "item": "Mewtwonite X",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Ice Beam"], ["Low Kick"], ["Earthquake"], ["Rock Slide"]]
- },
- {
- "species": "Mewtwo",
- "item": "Mewtwonite X",
- "ability": "Pressure",
- "evs": {"hp": 176, "atk": 80, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Low Kick"], ["Taunt"], ["Earthquake"], ["Ice Beam"]]
- },
- {
- "species": "Mewtwo",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]]
- },
- {
- "species": "Mewtwo",
- "item": "Mewtwonite Y",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psystrike"], ["Calm Mind"], ["Ice Beam"], ["Focus Blast"]]
- }
- ]
- },
- "mawile": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Mawile",
- "item": "Mawilite",
- "ability": "Intimidate",
- "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0},
- "nature": "Adamant",
- "moves": [["Iron Head"], ["Play Rough"], ["Sucker Punch"], ["Baton Pass"]]
- }
- ]
- },
- "lugia": {
- "flags": {},
- "sets": [
- {
- "species": "Lugia",
- "item": "Leftovers",
- "ability": "Multiscale",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Bold",
- "moves": [["Roost"], ["Ice Beam"], ["Whirlwind"], ["Toxic"]]
- }
- ]
- },
- "lucario": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Lucario",
- "item": "Lucarionite",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["Bullet Punch"], ["Stone Edge"], ["Iron Tail"]]
- }
- ]
- },
- "latios": {
- "flags": {},
- "sets": [
- {
- "species": "Latios",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Memento", "Recover"]]
- },
- {
- "species": "Latios",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Hidden Power Fire"]]
- },
- {
- "species": "Latios",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Memento", "Recover"]]
- },
- {
- "species": "Latios",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Hidden Power Fire"]]
- }
- ]
- },
- "latias": {
- "flags": {},
- "sets": [
- {
- "species": "Latias",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 212, "atk": 0, "def": 0, "spa": 120, "spd": 0, "spe": 176},
- "nature": "Timid",
- "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Recover", "Healing Wish"]]
- },
- {
- "species": "Latias",
- "item": "Soul Dew",
- "ability": "Levitate",
- "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Draco Meteor"], ["Psyshock"], ["Recover"]]
- }
- ]
- },
- "kyuremwhite": {
- "flags": {},
- "sets": [
- {
- "species": "Kyurem-White",
- "item": "Choice Specs",
- "ability": "Turboblaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Earth Power"]]
- },
- {
- "species": "Kyurem-White",
- "item": "Life Orb",
- "ability": "Turboblaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Ice Beam"], ["Fusion Flare"], ["Stone Edge"]]
- }
- ]
- },
- "kyogre": {
- "flags": {},
- "sets": [
- {
- "species": "Kyogre",
- "item": "Blue Orb",
- "ability": "Drizzle",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Origin Pulse"], ["Thunder"], ["Ice Beam"], ["Calm Mind"]]
- },
- {
- "species": "Kyogre",
- "item": "Blue Orb",
- "ability": "Drizzle",
- "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12},
- "nature": "Bold",
- "moves": [["Rest"], ["Sleep Talk"], ["Scald"], ["Ice Beam", "Roar"]]
- },
- {
- "species": "Kyogre",
- "item": "Blue Orb",
- "ability": "Drizzle",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 12},
- "nature": "Modest",
- "moves": [["Origin Pulse"], ["Thunder", "Rest", "Substitute"], ["Ice Beam"], ["Calm Mind"]]
- },
- {
- "species": "Kyogre",
- "item": "Choice Specs",
- "ability": "Drizzle",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Water Spout"], ["Origin Pulse", "Scald"], ["Ice Beam"], ["Thunder"]]
- },
- {
- "species": "Kyogre",
- "item": "Choice Scarf",
- "ability": "Drizzle",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Water Spout"], ["Ice Beam"], ["Origin Pulse"], ["Thunder", "Sleep Talk"]]
- }
- ]
- },
- "kangaskhan": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Kangaskhan",
- "item": "Kangaskhanite",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Return"], ["Fake Out"], ["Power-Up Punch"], ["Crunch"]],
- "happiness": 255
- },
- {
- "species": "Kangaskhan",
- "item": "Kangaskhanite",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Double-Edge"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]]
- },
- {
- "species": "Kangaskhan",
- "item": "Kangaskhanite",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Return"], ["Fake Out"], ["Sucker Punch"], ["Low Kick"]],
- "happiness": 255
- }
- ]
- },
- "hooh": {
- "flags": {},
- "sets": [
- {
- "species": "Ho-Oh",
- "item": "Choice Band",
- "ability": "Regenerator",
- "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0},
- "nature": "Adamant",
- "moves": [["Brave Bird"], ["Sacred Fire"], ["Earthquake"], ["Sleep Talk"]]
- },
- {
- "species": "Ho-Oh",
- "item": "Life Orb",
- "ability": "Regenerator",
- "evs": {"hp": 248, "atk": 208, "def": 0, "spa": 0, "spd": 52, "spe": 0},
- "nature": "Adamant",
- "moves": [["Brave Bird"], ["Sacred Fire"], ["Recover"], ["Thunder Wave", "Earthquake", "Substitute"]]
- }
- ]
- },
- "groudon": {
- "flags": {},
- "sets": [
- {
- "species": "Groudon",
- "item": "Red Orb",
- "ability": "Drought",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 200, "spe": 56},
- "nature": "Adamant",
- "moves": [["Rock Polish"], ["Precipice Blades", "Earthquake"], ["Stone Edge"], ["Swords Dance", "Dragon Claw"]]
- },
- {
- "species": "Groudon",
- "item": "Red Orb",
- "ability": "Drought",
- "evs": {"hp": 248, "atk": 0, "def": 56, "spa": 0, "spd": 192, "spe": 12},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Precipice Blades", "Earthquake"], ["Lava Plume", "Stone Edge"], ["Thunder Wave", "Roar"]]
- },
- {
- "species": "Groudon",
- "item": "Red Orb",
- "ability": "Drought",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Lava Plume"], ["Roar"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Groudon",
- "item": "Leftovers",
- "ability": "Drought",
- "evs": {"hp": 248, "atk": 0, "def": 248, "spa": 0, "spd": 0, "spe": 12},
- "nature": "Impish",
- "moves": [["Precipice Blades"], ["Stealth Rock"], ["Stone Edge"], ["Dragon Tail", "Roar"]]
- }
- ]
- },
- "greninja": {
- "flags": {},
- "sets": [
- {
- "species": "Greninja",
- "item": "Focus Sash",
- "ability": "Protean",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Toxic Spikes"], ["Spikes"], ["Taunt"], ["Shadow Sneak"]]
- },
- {
- "species": "Greninja",
- "item": "Focus Sash",
- "ability": "Protean",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Toxic Spikes"], ["Scald"], ["Taunt"], ["Shadow Sneak"]]
- }
- ]
- },
- "giratina": {
- "flags": {},
- "sets": [
- {
- "species": "Giratina",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]]
- },
- {
- "species": "Giratina",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Rest"], ["Sleep Talk"], ["Will-O-Wisp"], ["Roar"]]
- }
- ]
- },
- "giratinaorigin": {
- "flags": {},
- "sets": [
- {
- "species": "Giratina-Origin",
- "item": "Griseous Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 180, "def": 0, "spa": 252, "spd": 0, "spe": 76},
- "nature": "Rash",
- "moves": [["Draco Meteor"], ["Shadow Sneak"], ["Dragon Tail"], ["Defog"]]
- },
- {
- "species": "Giratina-Origin",
- "item": "Griseous Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 244, "def": 252, "spa": 0, "spd": 0, "spe": 12},
- "nature": "Adamant",
- "moves": [["Defog"], ["Shadow Sneak"], ["Dragon Tail"], ["Shadow Force"]]
- }
- ]
- },
- "gengar": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Gengar",
- "item": "Gengarite",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Taunt"], ["Destiny Bond"], ["Sludge Wave"], ["Focus Blast"]]
- },
- {
- "species": "Gengar",
- "item": "Gengarite",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 84, "spe": 176},
- "nature": "Timid",
- "moves": [["Perish Song"], ["Taunt"], ["Protect"], ["Disable"]]
- }
- ]
- },
- "genesect": {
- "flags": {},
- "sets": [
- {
- "species": "Genesect",
- "item": "Choice Scarf",
- "ability": "Download",
- "evs": {"hp": 0, "atk": 248, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["U-turn"], ["Iron Head"], ["Explosion"], ["Ice Beam"]]
- }
- ]
- },
- "ferrothorn": {
- "flags": {},
- "sets": [
- {
- "species": "Ferrothorn",
- "item": "Leftovers",
- "ability": "Iron Barbs",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Leech Seed"], ["Spikes"], ["Power Whip", "Gyro Ball"], ["Protect"]]
- },
- {
- "species": "Ferrothorn",
- "item": "Leftovers",
- "ability": "Iron Barbs",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Leech Seed"], ["Spikes"], ["Power Whip"], ["Protect", "Gyro Ball"]]
- }
- ]
- },
- "excadrill": {
- "flags": {},
- "sets": [
- {
- "species": "Excadrill",
- "item": "Life Orb",
- "ability": "Sand Rush",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Iron Head"], ["Earthquake"], ["Rock Slide"], ["Rapid Spin"]]
- },
- {
- "species": "Excadrill",
- "item": "Air Balloon",
- "ability": "Sand Rush",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Iron Head"], ["Earthquake"], ["Swords Dance"], ["Rapid Spin"]]
- }
- ]
- },
- "dialga": {
- "flags": {},
- "sets": [
- {
- "species": "Dialga",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Stealth Rock"], ["Toxic"], ["Draco Meteor"], ["Fire Blast"]]
- },
- {
- "species": "Dialga",
- "item": "Shuca Berry",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Flash Cannon"], ["Fire Blast"], ["Stealth Rock"]]
- }
- ]
- },
- "deoxys": {
- "flags": {},
- "sets": [
- {
- "species": "Deoxys",
- "item": "Focus Sash",
- "ability": "Pressure",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psycho Boost"], ["Stealth Rock"], ["Spikes"], ["Taunt"]]
- }
- ]
- },
- "deoxysattack": {
- "flags": {},
- "sets": [
- {
- "species": "Deoxys-Attack",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Psycho Boost"], ["Low Kick"], ["Ice Beam"], ["Extreme Speed"]]
- },
- {
- "species": "Deoxys-Attack",
- "item": "Focus Sash",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Spikes"], ["Psycho Boost"], ["Knock Off"], ["Extreme Speed"]]
- }
- ]
- },
- "deoxysdefense": {
- "flags": {},
- "sets": [
- {
- "species": "Deoxys-Defense",
- "item": "Mental Herb",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Recover"], ["Spikes"], ["Skill Swap"], ["Toxic"]]
- }
- ]
- },
- "deoxysspeed": {
- "flags": {},
- "sets": [
- {
- "species": "Deoxys-Speed",
- "item": "Focus Sash",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Taunt"], ["Spikes"], ["Knock Off"]]
- },
- {
- "species": "Deoxys-Speed",
- "item": "Light Clay",
- "ability": "Pressure",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Stealth Rock"], ["Taunt"], ["Reflect"], ["Light Screen"]]
- }
- ]
- },
- "darkrai": {
- "flags": {},
- "sets": [
- {
- "species": "Darkrai",
- "item": "Life Orb",
- "ability": "Bad Dreams",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Dark Void"], ["Dark Pulse"], ["Nasty Plot", "Taunt"], ["Sludge Bomb", "Thunder", "Focus Blast"]]
- }
- ]
- },
- "blissey": {
- "flags": {},
- "sets": [
- {
- "species": "Blissey",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Ice Beam"], ["Toxic"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]]
- },
- {
- "species": "Blissey",
- "item": "Shed Shell",
- "ability": "Natural Cure",
- "evs": {"hp": 20, "atk": 0, "def": 236, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Toxic"], ["Seismic Toss", "Snatch"], ["Soft-Boiled", "Wish"], ["Heal Bell", "Protect"]]
- }
- ]
- },
- "blaziken": {
- "flags": {},
- "sets": [
- {
- "species": "Blaziken",
- "item": "Leftovers",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Baton Pass"], ["Protect"], ["Swords Dance"], ["Flare Blitz"]]
- },
- {
- "species": "Blaziken",
- "item": "Blazikenite",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]]
- },
- {
- "species": "Blaziken",
- "item": "Blazikenite",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]]
- },
- {
- "species": "Blaziken",
- "item": "Life Orb",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Hidden Power Ice"]]
- },
- {
- "species": "Blaziken",
- "item": "Life Orb",
- "ability": "Speed Boost",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Low Kick"], ["Flare Blitz"], ["Protect"], ["Stone Edge", "Knock Off"]]
- }
- ]
- },
- "arceuswater": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Water",
- "item": "Splash Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Bold",
- "moves": [["Ice Beam", "Judgment"], ["Defog"], ["Recover"], ["Toxic"]]
- }
- ]
- },
- "arceussteel": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Steel",
- "item": "Iron Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Earth Power", "Thunder"]]
- },
- {
- "species": "Arceus-Steel",
- "item": "Iron Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Iron Head"], ["Earthquake"], ["Stone Edge", "Recover", "Extreme Speed"]]
- }
- ]
- },
- "arceusfire": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Fire",
- "item": "Flame Plate",
- "ability": "Multitype",
- "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
- "nature": "Modest",
- "moves": [["Overheat", "Fire Blast"], ["Calm Mind"], ["Thunder"], ["Earth Power"]]
- }
- ]
- },
- "arceusflying": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Flying",
- "item": "Sky Plate",
- "ability": "Multitype",
- "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 200, "spd": 0, "spe": 176},
- "nature": "Timid",
- "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Refresh", "Earth Power", "Substitute"]]
- }
- ]
- },
- "arceuspsychic": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Psychic",
- "item": "Mind Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Bold",
- "moves": [["Fire Blast", "Payback"], ["Ice Beam"], ["Recover"], ["Toxic"]]
- }
- ]
- },
- "arceuspoison": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Poison",
- "item": "Toxic Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Impish",
- "moves": [["Defog"], ["Poison Jab"], ["Thunder Wave"], ["Recover"]]
- }
- ]
- },
- "arceusbug": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Bug",
- "item": "Insect Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["X-Scissor"], ["Stone Edge"], ["Earthquake"]]
- }
- ]
- },
- "arceusfighting": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Fighting",
- "item": "Fist Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 0, "def": 40, "spa": 252, "spd": 0, "spe": 216},
- "nature": "Modest",
- "moves": [["Judgment"], ["Thunder Wave"], ["Recover"], ["Ice Beam", "Stone Edge"]]
- }
- ]
- },
- "arceusfairy": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Fairy",
- "item": "Pixie Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Bold",
- "moves": [["Judgment"], ["Recover"], ["Defog"], ["Toxic"]]
- },
- {
- "species": "Arceus-Fairy",
- "item": "Pixie Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Judgment"], ["Calm Mind"], ["Recover"], ["Earth Power", "Thunder"]]
- }
- ]
- },
- "arceusice": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Ice",
- "item": "Icicle Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Judgment"], ["Recover"], ["Calm Mind"], ["Thunder", "Fire Blast"]]
- }
- ]
- },
- "arceusrock": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Rock",
- "item": "Stone Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Judgment"], ["Defog"], ["Recover"], ["Will-O-Wisp"]]
- }
- ]
- },
- "arceusghost": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Ghost",
- "item": "Spooky Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Will-O-Wisp"]]
- },
- {
- "species": "Arceus-Ghost",
- "item": "Spooky Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw", "Brick Break"], ["Extreme Speed"]]
- },
- {
- "species": "Arceus-Ghost",
- "item": "Spooky Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Shadow Force"], ["Shadow Claw"], ["Brick Break"]]
- }
- ]
- },
- "arceusdragon": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Dragon",
- "item": "Draco Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 204, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Bold",
- "moves": [["Judgment"], ["Defog"], ["Recover"], ["Toxic"]]
- },
- {
- "species": "Arceus-Dragon",
- "item": "Draco Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 84, "spd": 0, "spe": 176},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Judgment"], ["Fire Blast"], ["Recover"]]
- }
- ]
- },
- "arceus": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus",
- "item": "Life Orb",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake"], ["Stone Edge", "Shadow Claw"]]
- },
- {
- "species": "Arceus",
- "item": "Silk Scarf",
- "ability": "Multitype",
- "evs": {"hp": 200, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 56},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Extreme Speed"], ["Earthquake", "Shadow Force"], ["Refresh"]]
- }
- ]
- },
- "arceusdark": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Dark",
- "item": "Dread Plate",
- "ability": "Multitype",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 144, "spe": 112},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Refresh"]]
- }
- ]
- },
- "arceusgrass": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Grass",
- "item": "Meadow Plate",
- "ability": "Multitype",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 148, "spe": 112},
- "nature": "Timid",
- "moves": [["Grass Knot"], ["Recover"], ["Ice Beam"], ["Defog"]]
- }
- ]
- },
- "arceuselectric": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Electric",
- "item": "Zap Plate",
- "ability": "Multitype",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Judgment"], ["Ice Beam"], ["Recover"]]
- }
- ]
- },
- "arceusground": {
- "flags": {},
- "sets": [
- {
- "species": "Arceus-Ground",
- "item": "Earth Plate",
- "ability": "Multitype",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Recover", "Extreme Speed"]]
- }
- ]
- },
- "aegislash": {
- "flags": {},
- "sets": [
- {
- "species": "Aegislash",
- "item": "Leftovers",
- "ability": "Stance Change",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Sassy",
- "moves": [["King's Shield"], ["Toxic"], ["Gyro Ball"], ["Pursuit"]]
- }
- ]
- },
- "scizor": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Scizor",
- "item": "Scizorite",
- "ability": "Technician",
- "evs": {"hp": 212, "atk": 60, "def": 152, "spa": 0, "spd": 84, "spe": 0},
- "nature": "Impish",
- "moves": [["Toxic"], ["Roost"], ["Defog"], ["Bullet Punch"]]
- }
- ]
- },
- "diancie": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Diancie",
- "item": "Diancite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power", "Protect"], ["Stealth Rock"]]
- },
- {
- "species": "Diancie",
- "item": "Diancite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 68, "def": 0, "spa": 188, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]]
- }
- ]
- },
- "landorus": {
- "flags": {},
- "sets": [
- {
- "species": "Landorus",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Sludge Wave"]]
- },
- {
- "species": "Landorus",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Knock Off"], ["Earth Power"], ["Rock Slide"], ["Hidden Power Ice"]]
- }
- ]
- }
- },
- "OU": {
- "diancie": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Diancie",
- "item": "Diancite",
- "ability": "Clear Body",
- "evs": {"hp": 44, "atk": 32, "def": 0, "spa": 252, "spd": 0, "spe": 180},
- "nature": "Rash",
- "moves": [["Moonblast"], ["Diamond Storm"], ["Earth Power"], ["Rock Polish"]]
- },
- {
- "species": "Diancie",
- "item": "Diancite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Moonblast"], ["Earth Power"], ["Hidden Power Fire"]]
- },
- {
- "species": "Diancie",
- "item": "Diancite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Protect"]]
- }
- ]
- },
- "hippowdon": {
- "flags": {},
- "sets": [
- {
- "species": "Hippowdon",
- "gender": "M",
- "item": "Leftovers",
- "ability": "Sand Stream",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Impish",
- "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]]
- },
- {
- "species": "Hippowdon",
- "gender": "M",
- "item": "Leftovers",
- "ability": "Sand Stream",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Slack Off"], ["Stealth Rock"], ["Stone Edge"], ["Earthquake"]]
- },
- {
- "species": "Hippowdon",
- "gender": "M",
- "item": "Leftovers",
- "ability": "Sand Stream",
- "evs": {"hp": 252, "atk": 0, "def": 144, "spa": 0, "spd": 112, "spe": 0},
- "nature": "Careful",
- "moves": [["Slack Off"], ["Stealth Rock"], ["Whirlwind"], ["Earthquake"]]
- }
- ]
- },
- "jirachi": {
- "flags": {},
- "sets": [
- {
- "species": "Jirachi",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 160, "def": 0, "spa": 0, "spd": 0, "spe": 96},
- "nature": "Jolly",
- "moves": [["Iron Head"], ["Fire Punch"], ["Substitute"], ["Toxic"]]
- },
- {
- "species": "Jirachi",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 224, "spe": 32},
- "nature": "Careful",
- "moves": [["Wish"], ["Protect"], ["Iron Head"], ["Body Slam"]]
- },
- {
- "species": "Jirachi",
- "item": "Choice Scarf",
- "ability": "Serene Grace",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["U-turn"], ["Iron Head"], ["Ice Punch"], ["Fire Punch"]]
- }
- ]
- },
- "celebi": {
- "flags": {},
- "sets": [
- {
- "species": "Celebi",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
- "nature": "Bold",
- "moves": [["Earth Power"], ["Nasty Plot"], ["Giga Drain"], ["Recover"]]
- },
- {
- "species": "Celebi",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 84, "spe": 16},
- "nature": "Bold",
- "moves": [["Thunder Wave"], ["Recover"], ["Giga Drain"], ["Stealth Rock"]]
- }
- ]
- },
- "zygarde": {
- "flags": {},
- "sets": [
- {
- "species": "Zygarde",
- "item": "Life Orb",
- "ability": "Aura Break",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Earthquake"], ["Outrage"], ["Extreme Speed"]]
- },
- {
- "species": "Zygarde",
- "item": "Leftovers",
- "ability": "Aura Break",
- "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 56},
- "nature": "Careful",
- "moves": [["Substitute"], ["Coil"], ["Earthquake"], ["Dragon Tail"]]
- }
- ]
- },
- "weavile": {
- "flags": {},
- "sets": [
- {
- "species": "Weavile",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Ice Punch"], ["Knock Off"], ["Ice Shard"], ["Low Kick"]]
- },
- {
- "species": "Weavile",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Pursuit"], ["Knock Off"], ["Ice Shard"], ["Icicle Crash"]]
- }
- ]
- },
- "volcarona": {
- "flags": {},
- "sets": [
- {
- "species": "Volcarona",
- "item": "Leftovers",
- "ability": "Flame Body",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 124},
- "nature": "Bold",
- "moves": [["Quiver Dance"], ["Fiery Dance"], ["Giga Drain"], ["Roost"]]
- },
- {
- "species": "Volcarona",
- "item": "Lum Berry",
- "ability": "Flame Body",
- "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
- "nature": "Modest",
- "moves": [["Quiver Dance"], ["Fire Blast"], ["Giga Drain"], ["Bug Buzz"]]
- }
- ]
- },
- "victini": {
- "flags": {},
- "sets": [
- {
- "species": "Victini",
- "item": "Choice Band",
- "ability": "Victory Star",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["V-create"], ["Bolt Strike"], ["Brick Break"], ["U-turn"]]
- },
- {
- "species": "Victini",
- "item": "Choice Scarf",
- "ability": "Victory Star",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Final Gambit"]]
- },
- {
- "species": "Victini",
- "item": "Expert Belt",
- "ability": "Victory Star",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Blue Flare"], ["Thunder"], ["Glaciate"], ["Focus Blast"]]
- },
- {
- "species": "Victini",
- "item": "Leftovers",
- "ability": "Victory Star",
- "evs": {"hp": 248, "atk": 32, "def": 68, "spa": 0, "spd": 0, "spe": 160},
- "nature": "Adamant",
- "moves": [["Taunt"], ["V-create"], ["Will-O-Wisp"], ["Bolt Strike"]]
- },
- {
- "species": "Victini",
- "item": "Leftovers",
- "ability": "Victory Star",
- "evs": {"hp": 96, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 160},
- "nature": "Adamant",
- "moves": [["Substitute"], ["V-create"], ["Bolt Strike"], ["Power-Up Punch"]]
- }
- ]
- },
- "tornadustherian": {
- "flags": {},
- "sets": [
- {
- "species": "Tornadus-Therian",
- "item": "Assault Vest",
- "ability": "Regenerator",
- "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 216},
- "nature": "Timid",
- "moves": [["Hurricane"], ["Focus Blast"], ["Knock Off"], ["U-turn"]]
- },
- {
- "species": "Tornadus-Therian",
- "item": "Life Orb",
- "ability": "Regenerator",
- "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 216, "spd": 0, "spe": 216},
- "nature": "Naive",
- "moves": [["Hurricane"], ["Superpower"], ["U-turn"], ["Taunt"]]
- }
- ]
- },
- "togekiss": {
- "flags": {},
- "sets": [
- {
- "species": "Togekiss",
- "item": "Lum Berry",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Nasty Plot"], ["Air Slash"], ["Aura Sphere"], ["Roost"]]
- },
- {
- "species": "Togekiss",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Thunder Wave"], ["Air Slash"], ["Defog"], ["Roost"]]
- }
- ]
- },
- "staraptor": {
- "flags": {},
- "sets": [
- {
- "species": "Staraptor",
- "item": "Choice Band",
- "ability": "Reckless",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Close Combat"], ["U-turn"], ["Double-Edge"]]
- },
- {
- "species": "Staraptor",
- "item": "Choice Scarf",
- "ability": "Reckless",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Double-Edge"], ["Close Combat"], ["U-turn"]]
- }
- ]
- },
- "thundurustherian": {
- "flags": {},
- "sets": [
- {
- "species": "Thundurus-Therian",
- "item": "Leftovers",
- "ability": "Volt Absorb",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
- },
- {
- "species": "Thundurus-Therian",
- "item": "Choice Scarf",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"], ["U-turn"]]
- },
- {
- "species": "Thundurus-Therian",
- "item": "Leftovers",
- "ability": "Volt Absorb",
- "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128},
- "nature": "Modest",
- "moves": [["Agility"], ["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"]]
- }
- ]
- },
- "scolipede": {
- "flags": {},
- "sets": [
- {
- "species": "Scolipede",
- "item": "Life Orb",
- "ability": "Speed Boost",
- "evs": {"hp": 16, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 236},
- "nature": "Adamant",
- "moves": [["Megahorn"], ["Earthquake"], ["Poison Jab"], ["Protect"]]
- }
- ]
- },
- "medicham": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Medicham",
- "item": "Medichamite",
- "ability": "Pure Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Fake Out"], ["Ice Punch"]]
- }
- ]
- },
- "manaphy": {
- "flags": {},
- "sets": [
- {
- "species": "Manaphy",
- "item": "Leftovers",
- "ability": "Hydration",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Rest"], ["Rain Dance"], ["Scald"]]
- },
- {
- "species": "Manaphy",
- "item": "Leftovers",
- "ability": "Hydration",
- "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
- "nature": "Timid",
- "moves": [["Tail Glow"], ["Surf"], ["Ice Beam"], ["Energy Ball"]]
- },
- {
- "species": "Manaphy",
- "item": "Leftovers",
- "ability": "Hydration",
- "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
- "nature": "Timid",
- "moves": [["Tail Glow"], ["Rain Dance"], ["Scald"], ["Psychic"]]
- }
- ]
- },
- "klefki": {
- "flags": {},
- "sets": [
- {
- "species": "Klefki",
- "item": "Light Clay",
- "ability": "Prankster",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Bold",
- "moves": [["Reflect"], ["Light Screen"], ["Spikes"], ["Foul Play"]]
- },
- {
- "species": "Klefki",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Thunder Wave"], ["Magnet Rise"], ["Spikes"], ["Play Rough"]]
- }
- ]
- },
- "hawlucha": {
- "flags": {},
- "sets": [
- {
- "species": "Hawlucha",
- "item": "Sitrus Berry",
- "ability": "Unburden",
- "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244},
- "nature": "Jolly",
- "moves": [["Substitute"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]]
- },
- {
- "species": "Hawlucha",
- "item": "Power Herb",
- "ability": "Unburden",
- "evs": {"hp": 12, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 244},
- "nature": "Jolly",
- "moves": [["Sky Attack"], ["Swords Dance"], ["High Jump Kick"], ["Acrobatics"]]
- }
- ]
- },
- "diggersby": {
- "flags": {},
- "sets": [
- {
- "species": "Diggersby",
- "item": "Choice Scarf",
- "ability": "Huge Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Return"], ["Earthquake"], ["Fire Punch"], ["U-turn"]],
- "happiness": 255
- },
- {
- "species": "Diggersby",
- "item": "Focus Sash",
- "ability": "Huge Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]],
- "happiness": 255
- },
- {
- "species": "Diggersby",
- "item": "Life Orb",
- "ability": "Huge Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Quick Attack"]],
- "happiness": 255
- },
- {
- "species": "Diggersby",
- "item": "Focus Sash",
- "ability": "Huge Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Earthquake"], ["Return"], ["Fire Punch"]],
- "happiness": 255
- }
- ]
- },
- "crawdaunt": {
- "flags": {},
- "sets": [
- {
- "species": "Crawdaunt",
- "item": "Life Orb",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]]
- },
- {
- "species": "Crawdaunt",
- "item": "Choice Band",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Crunch"]]
- }
- ]
- },
- "alakazam": {
- "flags": {},
- "sets": [
- {
- "species": "Alakazam",
- "item": "Focus Sash",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball"], ["Hidden Power Ice"], ["Thunder Wave"]]
- },
- {
- "species": "Alakazam",
- "item": "Life Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]]
- },
- {
- "species": "Alakazam",
- "item": "Life Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Hidden Power Ice"]]
- },
- {
- "species": "Alakazam",
- "item": "Alakazite",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore"]]
- }
- ]
- },
- "zapdos": {
- "flags": {},
- "sets": [
- {
- "species": "Zapdos",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 68, "spd": 0, "spe": 20},
- "nature": "Bold",
- "moves": [["Thunderbolt"], ["Roost"], ["Defog"], ["Heat Wave"]]
- }
- ]
- },
- "venusaur": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Venusaur",
- "item": "Venusaurite",
- "ability": "Chlorophyll",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Bold",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Leech Seed"]]
- },
- {
- "species": "Venusaur",
- "item": "Venusaurite",
- "ability": "Chlorophyll",
- "evs": {"hp": 232, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 20},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]]
- }
- ]
- },
- "tyranitar": {
- "flags": {},
- "sets": [
- {
- "species": "Tyranitar",
- "item": "Choice Scarf",
- "ability": "Sand Stream",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]]
- },
- {
- "species": "Tyranitar",
- "item": "Tyranitarite",
- "ability": "Sand Stream",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Stone Edge"], ["Superpower"], ["Ice Punch"]]
- },
- {
- "species": "Tyranitar",
- "item": "Leftovers",
- "ability": "Sand Stream",
- "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 180, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Stealth Rock"], ["Stone Edge"], ["Ice Beam"], ["Pursuit"]]
- },
- {
- "species": "Tyranitar",
- "item": "Choice Band",
- "ability": "Sand Stream",
- "evs": {"hp": 100, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 156},
- "nature": "Adamant",
- "moves": [["Pursuit"], ["Crunch"], ["Stone Edge"], ["Superpower"]]
- }
- ]
- },
- "thundurus": {
- "flags": {},
- "sets": [
- {
- "species": "Thundurus",
- "item": "Life Orb",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 76, "def": 0, "spa": 180, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Thunderbolt"], ["Knock Off"], ["Superpower"], ["Hidden Power Ice"]]
- },
- {
- "species": "Thundurus",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
- },
- {
- "species": "Thundurus",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunder Wave"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
- }
- ]
- },
- "terrakion": {
- "flags": {},
- "sets": [
- {
- "species": "Terrakion",
- "item": "Choice Scarf",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["Stone Edge"], ["X-Scissor"], ["Rock Slide"]]
- },
- {
- "species": "Terrakion",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Close Combat"], ["Stone Edge"], ["Swords Dance"], ["Hidden Power Ice"]]
- },
- {
- "species": "Terrakion",
- "item": "Focus Sash",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Close Combat"], ["Stone Edge"], ["Taunt"]]
- },
- {
- "species": "Terrakion",
- "item": "Lum Berry",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Rock Polish"], ["Stone Edge"], ["Close Combat"]]
- }
- ]
- },
- "talonflame": {
- "flags": {},
- "sets": [
- {
- "species": "Talonflame",
- "ability": "Gale Wings",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Bulk Up"], ["Acrobatics"], ["Roost"], ["Taunt"]]
- },
- {
- "species": "Talonflame",
- "item": "Choice Band",
- "ability": "Gale Wings",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Brave Bird"], ["Flare Blitz"], ["U-turn"], ["Steel Wing"]]
- },
- {
- "species": "Talonflame",
- "ability": "Gale Wings",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Acrobatics"], ["Taunt"], ["Roost"], ["Will-O-Wisp"]]
- },
- {
- "species": "Talonflame",
- "item": "Sharp Beak",
- "ability": "Gale Wings",
- "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Brave Bird"], ["Flare Blitz"], ["Roost"]]
- },
- {
- "species": "Talonflame",
- "item": "Liechi Berry",
- "ability": "Gale Wings",
- "evs": {"hp": 88, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 168},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Natural Gift"], ["Brave Bird"], ["Flare Blitz"]]
- },
- {
- "species": "Talonflame",
- "ability": "Gale Wings",
- "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Acrobatics"], ["Will-O-Wisp"], ["Roost"]]
- }
- ]
- },
- "sylveon": {
- "flags": {},
- "sets": [
- {
- "species": "Sylveon",
- "item": "Choice Specs",
- "ability": "Pixilate",
- "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 12},
- "nature": "Modest",
- "moves": [["Hyper Voice"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Ground"]]
- }
- ]
- },
- "slowbro": {
- "flags": {},
- "sets": [
- {
- "species": "Slowbro",
- "item": "Slowbronite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 80, "spa": 0, "spd": 176, "spe": 0},
- "nature": "Bold",
- "moves": [["Scald"], ["Calm Mind"], ["Slack Off"], ["Psyshock"]]
- },
- {
- "species": "Slowbro",
- "item": "Slowbronite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
- "nature": "Modest",
- "moves": [["Fire Blast"], ["Scald"], ["Psyshock"], ["Slack Off"]]
- },
- {
- "species": "Slowbro",
- "item": "Leftovers",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 24, "spe": 0},
- "nature": "Bold",
- "moves": [["Scald"], ["Psyshock"], ["Thunder Wave"], ["Slack Off"]]
- }
- ]
- },
- "skarmory": {
- "flags": {},
- "sets": [
- {
- "species": "Skarmory",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Iron Head"], ["Spikes"], ["Roost"], ["Whirlwind"]]
- },
- {
- "species": "Skarmory",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Roost"], ["Defog"], ["Brave Bird"], ["Whirlwind"]]
- },
- {
- "species": "Skarmory",
- "gender": "F",
- "item": "Custap Berry",
- "ability": "Sturdy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Spikes"], ["Taunt"], ["Stealth Rock"]]
- }
- ]
- },
- "scizor": {
- "flags": {},
- "sets": [
- {
- "species": "Scizor",
- "item": "Scizorite",
- "ability": "Light Metal",
- "evs": {"hp": 248, "atk": 84, "def": 0, "spa": 0, "spd": 176, "spe": 0},
- "nature": "Impish",
- "moves": [["Swords Dance"], ["Roost"], ["Bullet Punch"], ["Knock Off"]]
- },
- {
- "species": "Scizor",
- "item": "Choice Band",
- "ability": "Technician",
- "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Adamant",
- "moves": [["U-turn"], ["Bullet Punch"], ["Knock Off"], ["Superpower"]]
- },
- {
- "species": "Scizor",
- "item": "Scizorite",
- "ability": "Light Metal",
- "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Defog"], ["Roost"], ["Bullet Punch"], ["Knock Off"]]
- },
- {
- "species": "Scizor",
- "item": "Scizorite",
- "ability": "Light Metal",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Bullet Punch"], ["Bug Bite"], ["Superpower"]]
- }
- ]
- },
- "rotomwash": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom-Wash",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44},
- "nature": "Bold",
- "moves": [["Volt Switch"], ["Hydro Pump"], ["Will-O-Wisp"], ["Pain Split"]]
- }
- ]
- },
- "pinsir": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Pinsir",
- "item": "Pinsirite",
- "ability": "Hyper Cutter",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Return"], ["Close Combat"], ["Quick Attack"]],
- "happiness": 255
- },
- {
- "species": "Pinsir",
- "item": "Pinsirite",
- "ability": "Hyper Cutter",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Return"], ["Earthquake"], ["Quick Attack"]],
- "happiness": 255
- }
- ]
- },
- "mew": {
- "flags": {},
- "sets": [
- {
- "species": "Mew",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152},
- "nature": "Impish",
- "moves": [["Defog"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]]
- },
- {
- "species": "Mew",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 252, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 152},
- "nature": "Impish",
- "moves": [["Taunt"], ["Soft-Boiled"], ["Will-O-Wisp"], ["Knock Off"]]
- }
- ]
- },
- "metagross": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Metagross",
- "item": "Metagrossite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Grass Knot"]]
- },
- {
- "species": "Metagross",
- "item": "Metagrossite",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Hammer Arm"], ["Pursuit"]]
- },
- {
- "species": "Metagross",
- "item": "Metagrossite",
- "ability": "Clear Body",
- "evs": {"hp": 80, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 176},
- "nature": "Adamant",
- "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Earthquake"], ["Agility"]]
- }
- ]
- },
- "manectric": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Manectric",
- "item": "Manectite",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Overheat"], ["Hidden Power Ice"]]
- },
- {
- "species": "Manectric",
- "item": "Manectite",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Flamethrower"], ["Hidden Power Ice"]]
- }
- ]
- },
- "mandibuzz": {
- "flags": {},
- "sets": [
- {
- "species": "Mandibuzz",
- "item": "Leftovers",
- "ability": "Overcoat",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 108, "spe": 16},
- "nature": "Bold",
- "moves": [["Foul Play"], ["Roost"], ["Taunt"], ["Defog"]]
- }
- ]
- },
- "mamoswine": {
- "flags": {},
- "sets": [
- {
- "species": "Mamoswine",
- "item": "Focus Sash",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Endeavor"], ["Ice Shard"], ["Earthquake"]]
- },
- {
- "species": "Mamoswine",
- "item": "Life Orb",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 16, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Earthquake"], ["Ice Shard"], ["Icicle Crash"], ["Freeze-Dry"]]
- }
- ]
- },
- "magnezone": {
- "flags": {},
- "sets": [
- {
- "species": "Magnezone",
- "item": "Choice Scarf",
- "ability": "Magnet Pull",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]]
- },
- {
- "species": "Magnezone",
- "item": "Choice Specs",
- "ability": "Magnet Pull",
- "evs": {"hp": 172, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 84},
- "nature": "Modest",
- "moves": [["Volt Switch"], ["Hidden Power Fire"], ["Flash Cannon"], ["Thunderbolt"]]
- }
- ]
- },
- "lopunny": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Lopunny",
- "item": "Lopunnite",
- "ability": "Limber",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Ice Punch"]],
- "happiness": 255
- },
- {
- "species": "Lopunny",
- "item": "Lopunnite",
- "ability": "Limber",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Return"], ["Fake Out"], ["Power-Up Punch"]],
- "happiness": 255
- },
- {
- "species": "Lopunny",
- "item": "Lopunnite",
- "ability": "Limber",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Return"], ["Substitute"], ["Encore"]],
- "happiness": 255
- }
- ]
- },
- "latios": {
- "flags": {},
- "sets": [
- {
- "species": "Latios",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Trick"]]
- },
- {
- "species": "Latios",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Earthquake"], ["Defog"]]
- },
- {
- "species": "Latios",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Roost"], ["Defog"]]
- },
- {
- "species": "Latios",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Hidden Power Fire"], ["Defog"]]
- },
- {
- "species": "Latios",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Roost"]]
- },
- {
- "species": "Latios",
- "gender": "M",
- "item": "Latiosite",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Psyshock"], ["Draco Meteor"], ["Earthquake"], ["Hidden Power Fire"]]
- }
- ]
- },
- "latias": {
- "flags": {},
- "sets": [
- {
- "species": "Latias",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Healing Wish"]]
- },
- {
- "species": "Latias",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 72, "atk": 0, "def": 0, "spa": 184, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Defog"], ["Draco Meteor"], ["Psyshock"], ["Roost"]]
- },
- {
- "species": "Latias",
- "gender": "F",
- "item": "Latiasite",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 100, "spa": 0, "spd": 0, "spe": 160},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Roost"], ["Substitute"], ["Calm Mind"], ["Stored Power"]]
- },
- {
- "species": "Latias",
- "gender": "F",
- "item": "Latiasite",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 68, "spa": 0, "spd": 0, "spe": 192},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Thunder Wave"], ["Roar"], ["Recover"], ["Dragon Pulse"]]
- }
- ]
- },
- "landorustherian": {
- "flags": {},
- "sets": [
- {
- "species": "Landorus-Therian",
- "item": "Choice Scarf",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 24, "spa": 0, "spd": 0, "spe": 232},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["U-turn"], ["Explosion"], ["Stone Edge"]]
- },
- {
- "species": "Landorus-Therian",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 8, "spe": 8},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Earthquake"], ["U-turn"], ["Stone Edge"]]
- },
- {
- "species": "Landorus-Therian",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 56, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 232},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Rock Polish"], ["Earthquake"], ["Stone Edge"]]
- },
- {
- "species": "Landorus-Therian",
- "item": "Earth Plate",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Stone Edge"], ["U-turn"]]
- }
- ]
- },
- "kyuremblack": {
- "flags": {},
- "sets": [
- {
- "species": "Kyurem-Black",
- "item": "Choice Scarf",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 32, "spd": 0, "spe": 224},
- "nature": "Naive",
- "moves": [["Outrage"], ["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"]]
- },
- {
- "species": "Kyurem-Black",
- "item": "Life Orb",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 56, "spd": 0, "spe": 200},
- "nature": "Lonely",
- "moves": [["Dragon Claw"], ["Fusion Bolt"], ["Ice Beam"], ["Iron Head"]]
- },
- {
- "species": "Kyurem-Black",
- "item": "Life Orb",
- "ability": "Teravolt",
- "evs": {"hp": 0, "atk": 56, "def": 0, "spa": 252, "spd": 0, "spe": 200},
- "nature": "Mild",
- "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage"]]
- },
- {
- "species": "Kyurem-Black",
- "item": "Leftovers",
- "ability": "Teravolt",
- "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200},
- "nature": "Mild",
- "moves": [["Substitute"], ["Ice Beam"], ["Fusion Bolt"], ["Earth Power"]]
- }
- ]
- },
- "keldeo": {
- "flags": {},
- "sets": [
- {
- "species": "Keldeo",
- "item": "Choice Specs",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Icy Wind"]]
- },
- {
- "species": "Keldeo",
- "item": "Choice Scarf",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Secret Sword"], ["Scald"], ["Hidden Power Electric"]]
- },
- {
- "species": "Keldeo",
- "item": "Leftovers",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Scald"], ["Secret Sword"], ["Substitute"], ["Calm Mind"]]
- },
- {
- "species": "Keldeo",
- "item": "Salac Berry",
- "ability": "Justified",
- "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Endeavor"], ["Substitute"], ["Hydro Pump"], ["Secret Sword"]]
- }
- ]
- },
- "heracross": {
- "flags": {},
- "sets": [
- {
- "species": "Heracross",
- "item": "Heracronite",
- "ability": "Guts",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["Pin Missile"], ["Rock Blast"], ["Swords Dance"]]
- },
- {
- "species": "Heracross",
- "item": "Toxic Orb",
- "ability": "Guts",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["Megahorn"], ["Facade"], ["Swords Dance"]]
- }
- ]
- },
- "heatran": {
- "flags": {},
- "sets": [
- {
- "species": "Heatran",
- "item": "Choice Scarf",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Overheat"], ["Flash Cannon"], ["Earth Power"], ["Stone Edge"]]
- },
- {
- "species": "Heatran",
- "item": "Air Balloon",
- "ability": "Flash Fire",
- "evs": {"hp": 12, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 244},
- "nature": "Timid",
- "moves": [["Stealth Rock"], ["Fire Blast"], ["Taunt"], ["Earth Power"]]
- },
- {
- "species": "Heatran",
- "item": "Leftovers",
- "ability": "Flash Fire",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 68},
- "nature": "Calm",
- "moves": [["Lava Plume"], ["Toxic"], ["Taunt"], ["Stealth Rock"]]
- }
- ]
- },
- "gyarados": {
- "flags": {},
- "sets": [
- {
- "species": "Gyarados",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 88, "atk": 192, "def": 4, "spa": 0, "spd": 0, "spe": 224},
- "nature": "Adamant",
- "moves": [["Substitute"], ["Dragon Dance"], ["Waterfall"], ["Bounce"]]
- },
- {
- "species": "Gyarados",
- "item": "Gyaradosite",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Waterfall"], ["Crunch"], ["Earthquake"]]
- }
- ]
- },
- "gallade": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Gallade",
- "item": "Galladite",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Close Combat"], ["Knock Off"], ["Zen Headbutt"]]
- },
- {
- "species": "Gallade",
- "item": "Galladite",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Close Combat"], ["Ice Punch"], ["Zen Headbutt"]]
- }
- ]
- },
- "gliscor": {
- "flags": {},
- "sets": [
- {
- "species": "Gliscor",
- "item": "Toxic Orb",
- "ability": "Poison Heal",
- "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
- "nature": "Careful",
- "moves": [["Swords Dance"], ["Roost"], ["Knock Off"], ["Earthquake"]]
- },
- {
- "species": "Gliscor",
- "item": "Toxic Orb",
- "ability": "Poison Heal",
- "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
- "nature": "Careful",
- "moves": [["Taunt"], ["Roost"], ["Knock Off"], ["Earthquake"]]
- },
- {
- "species": "Gliscor",
- "item": "Toxic Orb",
- "ability": "Poison Heal",
- "evs": {"hp": 244, "atk": 0, "def": 0, "spa": 0, "spd": 192, "spe": 72},
- "nature": "Careful",
- "moves": [["Taunt"], ["Roost"], ["Toxic"], ["Earthquake"]]
- },
- {
- "species": "Gliscor",
- "item": "Toxic Orb",
- "ability": "Poison Heal",
- "evs": {"hp": 244, "atk": 0, "def": 28, "spa": 0, "spd": 0, "spe": 236},
- "nature": "Impish",
- "moves": [["Substitute"], ["Toxic"], ["Protect"], ["Earthquake"]]
- }
- ]
- },
- "gengar": {
- "flags": {},
- "sets": [
- {
- "species": "Gengar",
- "item": "Black Sludge",
- "ability": "Levitate",
- "evs": {"hp": 8, "atk": 0, "def": 0, "spa": 248, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hex"], ["Taunt"], ["Will-O-Wisp"], ["Sludge Wave"]]
- },
- {
- "species": "Gengar",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Taunt"]]
- },
- {
- "species": "Gengar",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Pain Split"], ["Shadow Ball"], ["Focus Blast"]]
- }
- ]
- },
- "gardevoir": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Gardevoir",
- "item": "Gardevoirite",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Calm Mind"], ["Hyper Voice"], ["Psyshock"], ["Focus Blast"]]
- },
- {
- "species": "Gardevoir",
- "item": "Gardevoirite",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Taunt"]]
- },
- {
- "species": "Gardevoir",
- "item": "Gardevoirite",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 24, "spa": 232, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Will-O-Wisp"]]
- }
- ]
- },
- "garchomp": {
- "flags": {},
- "sets": [
- {
- "species": "Garchomp",
- "item": "Rocky Helmet",
- "ability": "Rough Skin",
- "evs": {"hp": 252, "atk": 0, "def": 164, "spa": 0, "spd": 76, "spe": 16},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Tail"], ["Fire Blast"]]
- },
- {
- "species": "Garchomp",
- "item": "Focus Sash",
- "ability": "Rough Skin",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Dragon Claw"], ["Fire Blast"]]
- },
- {
- "species": "Garchomp",
- "item": "Lum Berry",
- "ability": "Rough Skin",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Outrage"], ["Swords Dance"]]
- },
- {
- "species": "Garchomp",
- "item": "Garchompite",
- "ability": "Rough Skin",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Draco Meteor"], ["Earthquake"], ["Fire Blast"], ["Stone Edge"]]
- },
- {
- "species": "Garchomp",
- "item": "Choice Scarf",
- "ability": "Rough Skin",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Dragon Claw"]]
- }
- ]
- },
- "ferrothorn": {
- "flags": {},
- "sets": [
- {
- "species": "Ferrothorn",
- "item": "Leftovers",
- "ability": "Iron Barbs",
- "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Power Whip"]]
- },
- {
- "species": "Ferrothorn",
- "item": "Shed Shell",
- "ability": "Iron Barbs",
- "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Protect"]]
- },
- {
- "species": "Ferrothorn",
- "item": "Leftovers",
- "ability": "Iron Barbs",
- "evs": {"hp": 252, "atk": 0, "def": 88, "spa": 0, "spd": 168, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Protect"], ["Leech Seed"], ["Gyro Ball"], ["Stealth Rock"]]
- }
- ]
- },
- "excadrill": {
- "flags": {},
- "sets": [
- {
- "species": "Excadrill",
- "item": "Choice Scarf",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]]
- },
- {
- "species": "Excadrill",
- "item": "Air Balloon",
- "ability": "Sand Rush",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Swords Dance"]]
- },
- {
- "species": "Excadrill",
- "item": "Life Orb",
- "ability": "Sand Rush",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]]
- },
- {
- "species": "Excadrill",
- "item": "Leftovers",
- "ability": "Mold Breaker",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Earthquake"], ["Iron Head"], ["Rapid Spin"], ["Toxic"]]
- }
- ]
- },
- "dragonite": {
- "flags": {},
- "sets": [
- {
- "species": "Dragonite",
- "item": "Choice Band",
- "ability": "Multiscale",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Outrage"], ["Extreme Speed"], ["Thunder Punch"], ["Superpower"]]
- },
- {
- "species": "Dragonite",
- "item": "Lum Berry",
- "ability": "Multiscale",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Earthquake"]]
- },
- {
- "species": "Dragonite",
- "item": "Lum Berry",
- "ability": "Multiscale",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Fire Punch"]]
- }
- ]
- },
- "conkeldurr": {
- "flags": {},
- "sets": [
- {
- "species": "Conkeldurr",
- "item": "Assault Vest",
- "ability": "Guts",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 236, "spe": 20},
- "nature": "Adamant",
- "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Poison Jab"]]
- },
- {
- "species": "Conkeldurr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 48, "atk": 252, "def": 0, "spa": 0, "spd": 208, "spe": 0},
- "nature": "Adamant",
- "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Thunder Punch"]]
- }
- ]
- },
- "clefable": {
- "flags": {},
- "sets": [
- {
- "species": "Clefable",
- "item": "Leftovers",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0},
- "nature": "Calm",
- "moves": [["Calm Mind"], ["Moonblast"], ["Soft-Boiled"], ["Flamethrower"]]
- },
- {
- "species": "Clefable",
- "item": "Leftovers",
- "ability": "Unaware",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Heal Bell"]]
- },
- {
- "species": "Clefable",
- "item": "Leftovers",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 172, "spa": 0, "spd": 84, "spe": 0},
- "nature": "Calm",
- "moves": [["Stealth Rock"], ["Moonblast"], ["Thunder Wave"], ["Soft-Boiled"]]
- }
- ]
- },
- "charizard": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Charizard",
- "item": "Charizardite X",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Roost"]]
- },
- {
- "species": "Charizard",
- "item": "Charizardite X",
- "ability": "Blaze",
- "evs": {"hp": 248, "atk": 24, "def": 0, "spa": 0, "spd": 180, "spe": 56},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Dragon Claw"], ["Will-O-Wisp"], ["Roost"]]
- },
- {
- "species": "Charizard",
- "item": "Charizardite X",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Earthquake"]]
- },
- {
- "species": "Charizard",
- "item": "Charizardite X",
- "ability": "Blaze",
- "evs": {"hp": 144, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 112},
- "nature": "Adamant",
- "moves": [["Tailwind"], ["Outrage"], ["Flare Blitz"], ["Swords Dance"]]
- },
- {
- "species": "Charizard",
- "item": "Charizardite Y",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Solar Beam"], ["Focus Blast"], ["Roost"]]
- }
- ]
- },
- "chansey": {
- "flags": {},
- "sets": [
- {
- "species": "Chansey",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Bold",
- "moves": [["Soft-Boiled"], ["Heal Bell"], ["Stealth Rock"], ["Seismic Toss"]]
- },
- {
- "species": "Chansey",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 4, "atk": 0, "def": 252, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Bold",
- "moves": [["Wish"], ["Soft-Boiled"], ["Seismic Toss"], ["Toxic"]]
- }
- ]
- },
- "breloom": {
- "flags": {},
- "sets": [
- {
- "species": "Breloom",
- "item": "Toxic Orb",
- "ability": "Poison Heal",
- "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Superpower"], ["Seed Bomb"], ["Facade"]]
- },
- {
- "species": "Breloom",
- "item": "Focus Sash",
- "ability": "Technician",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Rock Tomb"]]
- },
- {
- "species": "Breloom",
- "item": "Life Orb",
- "ability": "Technician",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Swords Dance"]]
- }
- ]
- },
- "bisharp": {
- "flags": {},
- "sets": [
- {
- "species": "Bisharp",
- "item": "Black Glasses",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 52, "spe": 204},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Pursuit"]]
- },
- {
- "species": "Bisharp",
- "item": "Life Orb",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["Swords Dance"], ["Iron Head"], ["Sucker Punch"]]
- },
- {
- "species": "Bisharp",
- "item": "Life Orb",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]]
- },
- {
- "species": "Bisharp",
- "item": "Black Glasses",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["Low Kick"], ["Iron Head"], ["Sucker Punch"]]
- }
- ]
- },
- "azumarill": {
- "flags": {},
- "sets": [
- {
- "species": "Azumarill",
- "item": "Assault Vest",
- "ability": "Huge Power",
- "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 16, "spe": 0},
- "nature": "Adamant",
- "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Knock Off"]]
- },
- {
- "species": "Azumarill",
- "item": "Sitrus Berry",
- "ability": "Huge Power",
- "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164},
- "nature": "Adamant",
- "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]]
- },
- {
- "species": "Azumarill",
- "item": "Choice Band",
- "ability": "Huge Power",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Play Rough"], ["Waterfall"], ["Aqua Jet"], ["Superpower"]]
- }
- ]
- },
- "altaria": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Cloud Nine",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Earthquake"]],
- "happiness": 255
- },
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Cloud Nine",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28},
- "nature": "Impish",
- "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Substitute"]],
- "happiness": 255
- },
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Cloud Nine",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 96, "spe": 28},
- "nature": "Impish",
- "moves": [["Dragon Dance"], ["Roost"], ["Return"], ["Heal Bell"]],
- "happiness": 255
- },
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Cloud Nine",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 168, "spd": 0, "spe": 92},
- "nature": "Modest",
- "moves": [["Hyper Voice"], ["Fire Blast"], ["Roost"], ["Earthquake"]]
- },
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 104, "spa": 0, "spd": 156, "spe": 0},
- "nature": "Bold",
- "moves": [["Hyper Voice"], ["Roost"], ["Heal Bell"], ["Flamethrower"]]
- },
- {
- "species": "Altaria",
- "item": "Altarianite",
- "ability": "Cloud Nine",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Return"], ["Earthquake"], ["Fire Blast"]],
- "happiness": 255
- }
- ]
- },
- "serperior": {
- "flags": {},
- "sets": [
- {
- "species": "Serperior",
- "item": "Life Orb",
- "ability": "Contrary",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Glare"]]
- },
- {
- "species": "Serperior",
- "item": "Meadow Plate",
- "ability": "Contrary",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Taunt"]]
- },
- {
- "species": "Serperior",
- "item": "Leftovers",
- "ability": "Contrary",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Ground"], ["Substitute"]]
- },
- {
- "species": "Serperior",
- "item": "Life Orb",
- "ability": "Contrary",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Giga Drain"]]
- }
- ]
- },
- "feraligatr": {
- "flags": {},
- "sets": [
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]]
- },
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]]
- }
- ]
- },
- "raikou": {
- "flags": {},
- "sets": [
- {
- "species": "Raikou",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"]]
- },
- {
- "species": "Raikou",
- "item": "Choice Specs",
- "ability": "Pressure",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]]
- },
- {
- "species": "Raikou",
- "item": "Assault Vest",
- "ability": "Pressure",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"]]
- }
- ]
- }
- },
- "UU": {
- "gardevoir": {
- "flags": {},
- "sets": [
- {
- "species": "Gardevoir",
- "item": "Choice Specs",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Trick"]]
- },
- {
- "species": "Gardevoir",
- "item": "Choice Specs",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Moonblast"], ["Psyshock"], ["Focus Blast"], ["Shadow Ball"]]
- },
- {
- "species": "Gardevoir",
- "item": "Choice Specs",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Moonblast"], ["Psyshock"], ["Shadow Ball"], ["Trick"]]
- },
- {
- "species": "Gardevoir",
- "item": "Leftovers",
- "ability": "Trace",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Moonblast"], ["Psyshock"], ["Focus Blast", "Substitute"]]
- }
- ]
- },
- "sableye": {
- "flags": {},
- "sets": [
- {
- "species": "Sableye",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Recover"], ["Will-O-Wisp"], ["Taunt"], ["Knock Off"]]
- }
- ]
- },
- "diancie": {
- "flags": {},
- "sets": [
- {
- "species": "Diancie",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0},
- "nature": "Quiet",
- "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Earth Power", "Protect"]]
- }
- ]
- },
- "metagross": {
- "flags": {},
- "sets": [
- {
- "species": "Metagross",
- "item": "Shuca Berry",
- "ability": "Clear Body",
- "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Earthquake", "Ice Punch", "Thunder Punch"], ["Zen Headbutt"], ["Bullet Punch"]]
- }
- ]
- },
- "gyarados": {
- "flags": {},
- "sets": [
- {
- "species": "Gyarados",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Waterfall"], ["Bounce"], ["Substitute", "Earthquake", "Stone Edge"]]
- },
- {
- "species": "Gyarados",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 216, "atk": 60, "def": 184, "spa": 0, "spd": 0, "spe": 48},
- "nature": "Impish",
- "moves": [["Rest"], ["Sleep Talk"], ["Waterfall"], ["Toxic", "Roar"]]
- }
- ]
- },
- "hoopa": {
- "flags": {},
- "sets": [
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Trick Room"], ["Shadow Ball"], ["Psyshock", "Psychic"], ["Focus Blast"]]
- },
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Substitute"]]
- },
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Focus Blast"], ["Psyshock"], ["Nasty Plot"]]
- },
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Focus Blast"], ["Nasty Plot"], ["Substitute"]]
- }
- ]
- },
- "crobat": {
- "flags": {},
- "sets": [
- {
- "species": "Crobat",
- "item": "Choice Band",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Sleep Talk"], ["Brave Bird"], ["Cross Poison"], ["U-turn"]]
- },
- {
- "species": "Crobat",
- "item": "Black Sludge",
- "ability": "Infiltrator",
- "evs": {"hp": 248, "atk": 0, "def": 80, "spa": 0, "spd": 4, "spe": 176},
- "nature": "Jolly",
- "moves": [["Roost"], ["Defog"], ["Taunt"], ["Brave Bird"]]
- }
- ]
- },
- "entei": {
- "flags": {},
- "sets": [
- {
- "species": "Entei",
- "item": "Choice Band",
- "ability": "Pressure",
- "shiny": true,
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
- },
- {
- "species": "Entei",
- "item": "Life Orb",
- "ability": "Pressure",
- "shiny": true,
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
- },
- {
- "species": "Entei",
- "item": "Assault Vest",
- "ability": "Pressure",
- "shiny": true,
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 240, "spe": 16},
- "nature": "Adamant",
- "moves": [["Extreme Speed"], ["Sacred Fire"], ["Stone Edge"], ["Bulldoze"]]
- }
- ]
- },
- "suicune": {
- "flags": {},
- "sets": [
- {
- "species": "Suicune",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Rest"], ["Sleep Talk"], ["Calm Mind"], ["Scald"]]
- },
- {
- "species": "Suicune",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Rest"], ["Sleep Talk"], ["Roar"], ["Scald"]]
- },
- {
- "species": "Suicune",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 196, "spd": 0, "spe": 64},
- "nature": "Modest",
- "moves": [["Substitute"], ["Calm Mind"], ["Hydro Pump"], ["Ice Beam"]]
- },
- {
- "species": "Suicune",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]]
- }
- ]
- },
- "aerodactyl": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Aerodactyl",
- "item": "Aerodactylite",
- "ability": "Pressure",
- "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
- "nature": "Jolly",
- "moves": [["Hone Claws"], ["Stone Edge"], ["Aerial Ace"], ["Aqua Tail"]]
- },
- {
- "species": "Aerodactyl",
- "item": "Aerodactylite",
- "ability": "Pressure",
- "evs": {"hp": 40, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 216},
- "nature": "Jolly",
- "moves": [["Roost"], ["Taunt"], ["Stone Edge"], ["Aerial Ace"]]
- }
- ]
- },
- "hydreigon": {
- "flags": {},
- "sets": [
- {
- "species": "Hydreigon",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Roost"], ["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"]]
- },
- {
- "species": "Hydreigon",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Roost"], ["Draco Meteor"], ["Fire Blast"], ["Superpower"]]
- },
- {
- "species": "Hydreigon",
- "item": "Choice Specs",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"], ["Flash Cannon"]]
- },
- {
- "species": "Hydreigon",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["U-turn"], ["Draco Meteor"], ["Dark Pulse"], ["Focus Blast"]]
- }
- ]
- },
- "machamp": {
- "flags": {},
- "sets": [
- {
- "species": "Machamp",
- "item": "Assault Vest",
- "ability": "No Guard",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]]
- },
- {
- "species": "Machamp",
- "item": "Choice Band",
- "ability": "No Guard",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bullet Punch"], ["Dynamic Punch"], ["Knock Off"], ["Ice Punch"]]
- },
- {
- "species": "Machamp",
- "item": "Leftovers",
- "ability": "No Guard",
- "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Adamant",
- "moves": [["Rest"], ["Sleep Talk"], ["Dynamic Punch"], ["Knock Off"]]
- },
- {
- "species": "Machamp",
- "item": "Leftovers",
- "ability": "No Guard",
- "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
- "nature": "Adamant",
- "moves": [["Bulk Up"], ["Dynamic Punch"], ["Stone Edge"], ["Ice Punch"]]
- }
- ]
- },
- "mienshao": {
- "flags": {},
- "sets": [
- {
- "species": "Mienshao",
- "item": "Life Orb",
- "ability": "Regenerator",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Fake Out"], ["High Jump Kick"], ["Knock Off"], ["U-turn"]]
- },
- {
- "species": "Mienshao",
- "item": "Choice Scarf",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Knock Off"], ["Poison Jab"], ["U-turn"]]
- }
- ]
- },
- "absol": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Absol",
- "item": "Absolite",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Sucker Punch"], ["Knock Off"], ["Superpower"]]
- },
- {
- "species": "Absol",
- "item": "Absolite",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 240, "def": 0, "spa": 44, "spd": 0, "spe": 224},
- "nature": "Naive",
- "moves": [["Sucker Punch"], ["Knock Off"], ["Ice Beam"], ["Fire Blast"]]
- }
- ]
- },
- "aggron": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Aggron",
- "item": "Aggronite",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 16, "spa": 0, "spd": 244, "spe": 0},
- "nature": "Impish",
- "moves": [["Rest"], ["Sleep Talk"], ["Heavy Slam"], ["Earthquake"]]
- },
- {
- "species": "Aggron",
- "item": "Aggronite",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 136, "spa": 0, "spd": 124, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Roar"], ["Heavy Slam"], ["Earthquake"]]
- }
- ]
- },
- "beedrill": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Beedrill",
- "item": "Beedrillite",
- "ability": "Swarm",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Protect"], ["U-turn"], ["Poison Jab"], ["Drill Run"]]
- }
- ]
- },
- "blastoise": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Blastoise",
- "item": "Blastoisinite",
- "ability": "Rain Dish",
- "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 200},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Aura Sphere"], ["Dark Pulse"]]
- },
- {
- "species": "Blastoise",
- "item": "Blastoisinite",
- "ability": "Torrent",
- "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 44, "spd": 64, "spe": 0},
- "nature": "Bold",
- "moves": [["Rapid Spin"], ["Scald"], ["Ice Beam"], ["Dark Pulse"]]
- }
- ]
- },
- "empoleon": {
- "flags": {},
- "sets": [
- {
- "species": "Empoleon",
- "item": "Leftovers",
- "ability": "Torrent",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Stealth Rock"], ["Defog"], ["Roar"], ["Scald"]]
- },
- {
- "species": "Empoleon",
- "item": "Choice Specs",
- "ability": "Torrent",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Flash Cannon"], ["Ice Beam"], ["Grass Knot"]]
- },
- {
- "species": "Empoleon",
- "item": "Petaya Berry",
- "ability": "Torrent",
- "evs": {"hp": 12, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 240},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Agility"], ["Substitute"], ["Surf"], ["Ice Beam"]]
- }
- ]
- },
- "krookodile": {
- "flags": {},
- "sets": [
- {
- "species": "Krookodile",
- "item": "Choice Band",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Pursuit"], ["Earthquake"], ["Knock Off"], ["Superpower"]]
- },
- {
- "species": "Krookodile",
- "item": "Choice Scarf",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Superpower"]]
- },
- {
- "species": "Krookodile",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Taunt"], ["Earthquake"], ["Knock Off"]]
- }
- ]
- },
- "nidoqueen": {
- "flags": {},
- "sets": [
- {
- "species": "Nidoqueen",
- "gender": "F",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 128, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 128},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Stealth Rock"], ["Sludge Wave"], ["Earth Power"], ["Ice Beam"]]
- },
- {
- "species": "Nidoqueen",
- "gender": "F",
- "item": "Black Sludge",
- "ability": "Sheer Force",
- "evs": {"hp": 248, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 20},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Roar"], ["Earth Power"], ["Ice Beam"]]
- }
- ]
- },
- "shaymin": {
- "flags": {},
- "sets": [
- {
- "species": "Shaymin",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Substitute"], ["Leech Seed"], ["Seed Flare"], ["Air Slash"]]
- },
- {
- "species": "Shaymin",
- "item": "Life Orb",
- "ability": "Natural Cure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Rest"], ["Seed Flare"], ["Earth Power"], ["Air Slash"]]
- }
- ]
- },
- "swampert": {
- "flags": {},
- "sets": [
- {
- "species": "Swampert",
- "item": "Leftovers",
- "ability": "Torrent",
- "evs": {"hp": 240, "atk": 16, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Stealth Rock"], ["Roar"], ["Earthquake"], ["Scald"]]
- },
- {
- "species": "Swampert",
- "item": "Choice Band",
- "ability": "Torrent",
- "evs": {"hp": 204, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 52},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Earthquake"], ["Ice Beam"], ["Superpower"]]
- },
- {
- "species": "Swampert",
- "item": "Chesto Berry",
- "ability": "Torrent",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Curse"], ["Earthquake"], ["Ice Beam"]]
- },
- {
- "species": "Swampert",
- "item": "Swampertite",
- "ability": "Torrent",
- "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152},
- "nature": "Adamant",
- "moves": [["Rain Dance"], ["Waterfall"], ["Earthquake"], ["Ice Punch"]]
- }
- ]
- },
- "ampharos": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Ampharos",
- "item": "Ampharosite",
- "ability": "Static",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Agility"], ["Dragon Pulse"], ["Thunderbolt"], ["Focus Blast"]]
- },
- {
- "species": "Ampharos",
- "gender": "M",
- "item": "Ampharosite",
- "ability": "Static",
- "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124},
- "nature": "Modest",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Dragon Pulse"], ["Focus Blast"]]
- },
- {
- "species": "Ampharos",
- "item": "Ampharosite",
- "ability": "Static",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 8, "spd": 0, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]]
- },
- {
- "species": "Ampharos",
- "item": "Ampharosite",
- "ability": "Static",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Rest"], ["Sleep Talk"], ["Volt Switch"], ["Dragon Pulse"]]
- }
- ]
- },
- "arcanine": {
- "flags": {},
- "sets": [
- {
- "species": "Arcanine",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Morning Sun"], ["Will-O-Wisp"], ["Extreme Speed"], ["Flare Blitz"]]
- },
- {
- "species": "Arcanine",
- "item": "Life Orb",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]]
- },
- {
- "species": "Arcanine",
- "item": "Choice Band",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Extreme Speed"], ["Flare Blitz"], ["Close Combat"], ["Wild Charge"]]
- }
- ]
- },
- "blissey": {
- "flags": {},
- "sets": [
- {
- "species": "Blissey",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Soft-Boiled"], ["Wish"], ["Toxic"], ["Seismic Toss"]]
- },
- {
- "species": "Blissey",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Soft-Boiled"], ["Heal Bell"], ["Toxic"], ["Seismic Toss"]]
- },
- {
- "species": "Blissey",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Seismic Toss"]]
- }
- ]
- },
- "chandelure": {
- "flags": {},
- "sets": [
- {
- "species": "Chandelure",
- "item": "Choice Scarf",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Trick"], ["Fire Blast"], ["Shadow Ball"], ["Energy Ball"]]
- },
- {
- "species": "Chandelure",
- "item": "Choice Specs",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Trick"], ["Overheat"], ["Shadow Ball"], ["Energy Ball"]]
- },
- {
- "species": "Chandelure",
- "item": "Leftovers",
- "ability": "Flash Fire",
- "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 140, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Substitute"], ["Flamethrower"], ["Shadow Ball"]]
- }
- ]
- },
- "chesnaught": {
- "flags": {},
- "sets": [
- {
- "species": "Chesnaught",
- "item": "Leftovers",
- "ability": "Bulletproof",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]]
- },
- {
- "species": "Chesnaught",
- "item": "Leftovers",
- "ability": "Bulletproof",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Spiky Shield"], ["Spikes"], ["Leech Seed"], ["Drain Punch"]]
- }
- ]
- },
- "cloyster": {
- "flags": {},
- "sets": [
- {
- "species": "Cloyster",
- "item": "Focus Sash",
- "ability": "Skill Link",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]]
- },
- {
- "species": "Cloyster",
- "item": "Focus Sash",
- "ability": "Skill Link",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Rapid Spin"], ["Spikes"], ["Icicle Spear"], ["Explosion"]]
- }
- ]
- },
- "darmanitan": {
- "flags": {},
- "sets": [
- {
- "species": "Darmanitan",
- "item": "Choice Band",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
- },
- {
- "species": "Darmanitan",
- "item": "Choice Scarf",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
- },
- {
- "species": "Darmanitan",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower"], ["U-turn"]]
- }
- ]
- },
- "donphan": {
- "flags": {},
- "sets": [
- {
- "species": "Donphan",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Rapid Spin"], ["Ice Shard"], ["Earthquake"]]
- },
- {
- "species": "Donphan",
- "item": "Assault Vest",
- "ability": "Sturdy",
- "evs": {"hp": 176, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 80},
- "nature": "Adamant",
- "moves": [["Rapid Spin"], ["Ice Shard"], ["Earthquake"], ["Knock Off"]]
- }
- ]
- },
- "espeon": {
- "flags": {},
- "sets": [
- {
- "species": "Espeon",
- "item": "Light Clay",
- "ability": "Magic Bounce",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 8, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Morning Sun"], ["Reflect"], ["Light Screen"], ["Psyshock"]]
- },
- {
- "species": "Espeon",
- "item": "Choice Specs",
- "ability": "Magic Bounce",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Trick"], ["Psyshock"], ["Shadow Ball"], ["Hidden Power Fighting"]]
- }
- ]
- },
- "florges": {
- "flags": {},
- "sets": [
- {
- "species": "Florges",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Flower Veil",
- "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 24, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
- },
- {
- "species": "Florges",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Flower Veil",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Synthesis"], ["Aromatherapy"], ["Calm Mind"], ["Moonblast"]]
- }
- ]
- },
- "flygon": {
- "flags": {},
- "sets": [
- {
- "species": "Flygon",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Defog"], ["Outrage"], ["Earthquake"], ["U-turn"]]
- },
- {
- "species": "Flygon",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Roost"], ["Defog"], ["Earthquake"], ["U-turn"]]
- }
- ]
- },
- "forretress": {
- "flags": {},
- "sets": [
- {
- "species": "Forretress",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Spikes"], ["Rapid Spin"], ["Gyro Ball"], ["Volt Switch"]]
- }
- ]
- },
- "galvantula": {
- "flags": {},
- "sets": [
- {
- "species": "Galvantula",
- "item": "Focus Sash",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Sticky Web"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
- },
- {
- "species": "Galvantula",
- "gender": "M",
- "item": "Life Orb",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
- },
- {
- "species": "Galvantula",
- "gender": "M",
- "item": "Choice Specs",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunder"], ["Bug Buzz"], ["Energy Ball"]]
- }
- ]
- },
- "goodra": {
- "flags": {},
- "sets": [
- {
- "species": "Goodra",
- "item": "Assault Vest",
- "ability": "Sap Sipper",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Dragon Tail"]]
- },
- {
- "species": "Goodra",
- "item": "Life Orb",
- "ability": "Sap Sipper",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Fire Blast"], ["Sludge Bomb"], ["Ice Beam"]]
- }
- ]
- },
- "haxorus": {
- "flags": {},
- "sets": [
- {
- "species": "Haxorus",
- "item": "Choice Band",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Sleep Talk"], ["Outrage"], ["Earthquake"], ["Poison Jab"]]
- },
- {
- "species": "Haxorus",
- "item": "Life Orb",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]]
- },
- {
- "species": "Haxorus",
- "gender": "M",
- "item": "Lum Berry",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Outrage"], ["Earthquake"], ["Poison Jab"]]
- },
- {
- "species": "Haxorus",
- "item": "Life Orb",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Taunt"], ["Outrage"], ["Earthquake"]]
- }
- ]
- },
- "heliolisk": {
- "flags": {},
- "sets": [
- {
- "species": "Heliolisk",
- "item": "Choice Specs",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]]
- },
- {
- "species": "Heliolisk",
- "item": "Life Orb",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Grass Knot"], ["Hidden Power Ice"]]
- }
- ]
- },
- "honchkrow": {
- "flags": {},
- "sets": [
- {
- "species": "Honchkrow",
- "item": "Life Orb",
- "ability": "Moxie",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Roost"], ["Sucker Punch"], ["Brave Bird"], ["Superpower"]]
- },
- {
- "species": "Honchkrow",
- "item": "Choice Scarf",
- "ability": "Moxie",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Brave Bird"], ["Night Slash"], ["Superpower"], ["Heat Wave"]]
- }
- ]
- },
- "infernape": {
- "flags": {},
- "sets": [
- {
- "species": "Infernape",
- "item": "Focus Sash",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Fake Out"], ["Stealth Rock"], ["Close Combat"], ["Overheat"]]
- },
- {
- "species": "Infernape",
- "item": "Choice Scarf",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]]
- },
- {
- "species": "Infernape",
- "item": "Choice Band",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Close Combat"], ["Stone Edge"], ["U-turn"]]
- },
- {
- "species": "Infernape",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Fire Blast"], ["Grass Knot"]]
- }
- ]
- },
- "kingdra": {
- "flags": {},
- "sets": [
- {
- "species": "Kingdra",
- "item": "Lum Berry",
- "ability": "Sniper",
- "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232},
- "nature": "Adamant",
- "moves": [["Dragon Dance"], ["Outrage"], ["Waterfall"], ["Iron Head"]]
- },
- {
- "species": "Kingdra",
- "item": "Leftovers",
- "ability": "Sniper",
- "evs": {"hp": 24, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 232},
- "nature": "Adamant",
- "moves": [["Iron Head"], ["Dragon Dance"], ["Outrage"], ["Waterfall"]]
- },
- {
- "species": "Kingdra",
- "item": "Scope Lens",
- "ability": "Sniper",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Rash",
- "moves": [["Agility"], ["Focus Energy"], ["Draco Meteor"], ["Waterfall"]]
- },
- {
- "species": "Kingdra",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 60, "def": 0, "spa": 252, "spd": 0, "spe": 196},
- "nature": "Mild",
- "moves": [["Rain Dance"], ["Hydro Pump"], ["Draco Meteor"], ["Waterfall"]]
- }
- ]
- },
- "lucario": {
- "flags": {},
- "sets": [
- {
- "species": "Lucario",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Crunch"]]
- },
- {
- "species": "Lucario",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Ice Punch"]]
- },
- {
- "species": "Lucario",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Bullet Punch"], ["Close Combat"], ["Ice Punch"]]
- },
- {
- "species": "Lucario",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Extreme Speed"], ["Close Combat"], ["Crunch"]]
- },
- {
- "species": "Lucario",
- "item": "Life Orb",
- "ability": "Steadfast",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Vacuum Wave"], ["Aura Sphere"], ["Flash Cannon"]]
- }
- ]
- },
- "milotic": {
- "flags": {},
- "sets": [
- {
- "species": "Milotic",
- "item": "Life Orb",
- "ability": "Competitive",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Recover"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]]
- },
- {
- "species": "Milotic",
- "item": "Leftovers",
- "ability": "Marvel Scale",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]]
- },
- {
- "species": "Milotic",
- "item": "Leftovers",
- "ability": "Marvel Scale",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Recover"], ["Haze"], ["Scald"], ["Ice Beam"]]
- }
- ]
- },
- "noivern": {
- "flags": {},
- "sets": [
- {
- "species": "Noivern",
- "item": "Choice Specs",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Switcheroo"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]]
- },
- {
- "species": "Noivern",
- "item": "Life Orb",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Roost"], ["Draco Meteor"], ["Hurricane"], ["Flamethrower"]]
- },
- {
- "species": "Noivern",
- "item": "Leftovers",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Roost"], ["Taunt"], ["Draco Meteor"], ["Air Slash"]]
- }
- ]
- },
- "porygonz": {
- "flags": {},
- "sets": [
- {
- "species": "Porygon-Z",
- "item": "Life Orb",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Tri Attack"], ["Dark Pulse"], ["Hidden Power Fighting"]]
- },
- {
- "species": "Porygon-Z",
- "item": "Choice Specs",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]]
- },
- {
- "species": "Porygon-Z",
- "item": "Choice Scarf",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Trick"], ["Tri Attack"], ["Thunderbolt"], ["Ice Beam"]]
- }
- ]
- },
- "porygon2": {
- "flags": {},
- "sets": [
- {
- "species": "Porygon2",
- "item": "Eviolite",
- "ability": "Trace",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]]
- },
- {
- "species": "Porygon2",
- "item": "Eviolite",
- "ability": "Trace",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Recover"], ["Thunder Wave"], ["Thunderbolt"], ["Ice Beam"]]
- }
- ]
- },
- "rotomheat": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom-Heat",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]]
- },
- {
- "species": "Rotom-Heat",
- "item": "Choice Specs",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Trick"], ["Overheat"], ["Volt Switch"], ["Hidden Power Grass"]]
- },
- {
- "species": "Rotom-Heat",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 216, "spa": 0, "spd": 0, "spe": 44},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Pain Split"], ["Will-O-Wisp"], ["Overheat"], ["Volt Switch"]]
- }
- ]
- },
- "scrafty": {
- "flags": {},
- "sets": [
- {
- "species": "Scrafty",
- "item": "Leftovers",
- "ability": "Shed Skin",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Bulk Up"], ["Drain Punch"], ["Knock Off"]]
- },
- {
- "species": "Scrafty",
- "item": "Life Orb",
- "ability": "Moxie",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Zen Headbutt"]]
- }
- ]
- },
- "snorlax": {
- "flags": {},
- "sets": [
- {
- "species": "Snorlax",
- "item": "Choice Band",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 252, "def": 56, "spa": 0, "spd": 200, "spe": 0},
- "nature": "Adamant",
- "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Punch"]]
- },
- {
- "species": "Snorlax",
- "item": "Assault Vest",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 252, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Adamant",
- "moves": [["Pursuit"], ["Body Slam"], ["Earthquake"], ["Fire Blast"]]
- },
- {
- "species": "Snorlax",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 144, "atk": 0, "def": 188, "spa": 0, "spd": 176, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Sleep Talk"], ["Curse"], ["Body Slam"]]
- }
- ]
- },
- "tentacruel": {
- "flags": {},
- "sets": [
- {
- "species": "Tentacruel",
- "item": "Black Sludge",
- "ability": "Liquid Ooze",
- "evs": {"hp": 240, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 24},
- "nature": "Bold",
- "moves": [["Toxic Spikes"], ["Rapid Spin"], ["Scald"], ["Knock Off"]]
- }
- ]
- },
- "toxicroak": {
- "flags": {},
- "sets": [
- {
- "species": "Toxicroak",
- "item": "Life Orb",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Sucker Punch"], ["Gunk Shot"], ["Drain Punch"]]
- },
- {
- "species": "Toxicroak",
- "item": "Black Sludge",
- "ability": "Dry Skin",
- "evs": {"hp": 248, "atk": 132, "def": 116, "spa": 0, "spd": 0, "spe": 12},
- "nature": "Adamant",
- "moves": [["Substitute"], ["Bulk Up"], ["Sucker Punch"], ["Drain Punch"]]
- }
- ]
- },
- "umbreon": {
- "flags": {},
- "sets": [
- {
- "species": "Umbreon",
- "gender": "M",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]]
- },
- {
- "species": "Umbreon",
- "gender": "M",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Foul Play"]]
- }
- ]
- },
- "vaporeon": {
- "flags": {},
- "sets": [
- {
- "species": "Vaporeon",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Protect"], ["Wish"], ["Heal Bell"], ["Scald"]]
- }
- ]
- },
- "froslass": {
- "flags": {},
- "sets": [
- {
- "species": "Froslass",
- "gender": "F",
- "item": "Focus Sash",
- "ability": "Cursed Body",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Destiny Bond"], ["Spikes"], ["Taunt"], ["Icy Wind"]]
- }
- ]
- },
- "houndoom": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Houndoom",
- "item": "Houndoominite",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Taunt"], ["Fire Blast"], ["Dark Pulse"]]
- },
- {
- "species": "Houndoom",
- "item": "Houndoominite",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Sunny Day"], ["Fire Blast"], ["Dark Pulse"], ["Solar Beam"]]
- }
- ]
- },
- "kyurem": {
- "flags": {},
- "sets": [
- {
- "species": "Kyurem",
- "item": "Choice Scarf",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Outrage"]]
- },
- {
- "species": "Kyurem",
- "item": "Choice Specs",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Ice Beam"], ["Earth Power"], ["Flash Cannon"]]
- },
- {
- "species": "Kyurem",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Roost"], ["Draco Meteor"], ["Ice Beam"], ["Earth Power"]]
- },
- {
- "species": "Kyurem",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 56, "atk": 0, "def": 0, "spa": 236, "spd": 0, "spe": 216},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Roost"], ["Substitute"], ["Ice Beam"], ["Earth Power"]]
- }
- ]
- },
- "shuckle": {
- "flags": {},
- "sets": [
- {
- "species": "Shuckle",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Stealth Rock"], ["Sticky Web"], ["Encore"], ["Knock Off"]]
- }
- ]
- },
- "tornadus": {
- "flags": {},
- "sets": [
- {
- "species": "Tornadus",
- "gender": "M",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Acrobatics"], ["Knock Off"], ["Superpower"], ["U-turn"]]
- },
- {
- "species": "Tornadus",
- "gender": "M",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Tailwind"], ["Hurricane"], ["Heat Wave"], ["Grass Knot"]]
- }
- ]
- },
- "yanmega": {
- "flags": {},
- "sets": [
- {
- "species": "Yanmega",
- "item": "Choice Specs",
- "ability": "Tinted Lens",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Sleep Talk"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]]
- },
- {
- "species": "Yanmega",
- "item": "Life Orb",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Protect"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]]
- }
- ]
- },
- "zoroark": {
- "flags": {},
- "sets": [
- {
- "species": "Zoroark",
- "item": "Choice Specs",
- "ability": "Illusion",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Trick"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]]
- },
- {
- "species": "Zoroark",
- "item": "Life Orb",
- "ability": "Illusion",
- "evs": {"hp": 0, "atk": 196, "def": 0, "spa": 96, "spd": 0, "spe": 216},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Naive",
- "moves": [["Sucker Punch"], ["Knock Off"], ["Flamethrower"], ["Grass Knot"]]
- },
- {
- "species": "Zoroark",
- "item": "Life Orb",
- "ability": "Illusion",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Night Daze"], ["Focus Blast"], ["Flamethrower"]]
- }
- ]
- },
- "cresselia": {
- "flags": {},
- "sets": [
- {
- "species": "Cresselia",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Moonlight"], ["Thunder Wave"], ["Psyshock"], ["Moonblast"]]
- },
- {
- "species": "Cresselia",
- "gender": "F",
- "item": "Light Clay",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Lunar Dance"], ["Reflect"], ["Light Screen"], ["Moonblast"]]
- },
- {
- "species": "Cresselia",
- "gender": "F",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Moonlight"], ["Substitute"], ["Calm Mind"], ["Psyshock"]]
- },
- {
- "species": "Cresselia",
- "item": "Light Clay",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Reflect"], ["Light Screen"], ["Lunar Dance"], ["Psyshock"]]
- },
- {
- "species": "Cresselia",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 136, "spa": 0, "spd": 0, "spe": 120},
- "nature": "Bold",
- "moves": [["Substitute"], ["Calm Mind"], ["Moonblast"], ["Moonlight"]]
- },
- {
- "species": "Cresselia",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 116, "spa": 0, "spd": 0, "spe": 144},
- "nature": "Bold",
- "moves": [["Substitute"], ["Calm Mind"], ["Psyshock"], ["Moonblast"]]
- }
- ]
- },
- "gligar": {
- "flags": {},
- "sets": [
- {
- "species": "Gligar",
- "item": "Eviolite",
- "ability": "Hyper Cutter",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]]
- },
- {
- "species": "Gligar",
- "item": "Eviolite",
- "ability": "Hyper Cutter",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Roost"], ["Defog"], ["Stealth Rock"], ["Earthquake"]]
- },
- {
- "species": "Gligar",
- "item": "Eviolite",
- "ability": "Hyper Cutter",
- "evs": {"hp": 248, "atk": 0, "def": 20, "spa": 0, "spd": 240, "spe": 0},
- "nature": "Careful",
- "moves": [["Roost"], ["Defog"], ["Toxic"], ["Earthquake"]]
- }
- ]
- },
- "aromatisse": {
- "flags": {},
- "sets": [
- {
- "species": "Aromatisse",
- "item": "Leftovers",
- "ability": "Aroma Veil",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Bold",
- "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
- },
- {
- "species": "Aromatisse",
- "item": "Leftovers",
- "ability": "Aroma Veil",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Protect"], ["Wish"], ["Aromatherapy"], ["Moonblast"]]
- }
- ]
- },
- "roserade": {
- "flags": {},
- "sets": [
- {
- "species": "Roserade",
- "item": "Life Orb",
- "ability": "Natural Cure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Spikes"], ["Giga Drain"], ["Sludge Bomb"], ["Synthesis"]]
- },
- {
- "species": "Roserade",
- "item": "Black Sludge",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 244, "spe": 16},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Rest"], ["Spikes"], ["Giga Drain"], ["Sludge Bomb"]]
- }
- ]
- },
- "cobalion": {
- "flags": {},
- "sets": [
- {
- "species": "Cobalion",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Calm Mind"], ["Focus Blast"], ["Flash Cannon"], ["Hidden Power Ghost"]]
- },
- {
- "species": "Cobalion",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Close Combat"], ["Iron Head"], ["Stone Edge"]]
- },
- {
- "species": "Cobalion",
- "item": "Leftovers",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Taunt"], ["Close Combat"], ["Iron Head"]]
- }
- ]
- },
- "dragalge": {
- "flags": {},
- "sets": [
- {
- "species": "Dragalge",
- "item": "Choice Specs",
- "ability": "Adaptability",
- "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Sludge Wave"], ["Hidden Power Fire"], ["Focus Blast"]]
- },
- {
- "species": "Dragalge",
- "item": "Choice Specs",
- "ability": "Adaptability",
- "evs": {"hp": 200, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 56},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Sludge Wave"], ["Scald"], ["Focus Blast"]]
- },
- {
- "species": "Dragalge",
- "item": "Black Sludge",
- "ability": "Adaptability",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Toxic Spikes"], ["Dragon Tail"], ["Sludge Bomb"], ["Scald"]]
- },
- {
- "species": "Dragalge",
- "item": "Dragon Fang",
- "ability": "Adaptability",
- "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Focus Blast"], ["Dragon Pulse"]]
- },
- {
- "species": "Dragalge",
- "item": "Choice Specs",
- "ability": "Adaptability",
- "evs": {"hp": 188, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 68},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Dragon Pulse"], ["Sludge Wave"], ["Focus Blast"]]
- }
- ]
- },
- "reuniclus": {
- "flags": {},
- "sets": [
- {
- "species": "Reuniclus",
- "item": "Leftovers",
- "ability": "Magic Guard",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]]
- },
- {
- "species": "Reuniclus",
- "item": "Life Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Recover"], ["Calm Mind"], ["Psyshock"], ["Focus Blast"]]
- }
- ]
- },
- "whimsicott": {
- "flags": {},
- "sets": [
- {
- "species": "Whimsicott",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Encore"], ["Giga Drain"], ["Moonblast"], ["Hidden Power Fire"]]
- },
- {
- "species": "Whimsicott",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Encore"], ["Taunt"], ["Leech Seed"], ["Moonblast"]]
- },
- {
- "species": "Whimsicott",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Moonblast"], ["Giga Drain"], ["Hidden Power Fire"], ["Encore"]]
- },
- {
- "species": "Whimsicott",
- "item": "Leftovers",
- "ability": "Prankster",
- "evs": {"hp": 248, "atk": 0, "def": 236, "spa": 0, "spd": 0, "spe": 24},
- "nature": "Bold",
- "moves": [["Encore"], ["U-turn"], ["Stun Spore"], ["Moonblast"]]
- }
- ]
- },
- "sharpedo": {
- "flags": {},
- "sets": [
- {
- "species": "Sharpedo",
- "item": "Sharpedonite",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Protect"], ["Waterfall"], ["Crunch"], ["Ice Fang"]]
- },
- {
- "species": "Sharpedo",
- "item": "Sharpedonite",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naughty",
- "moves": [["Protect"], ["Crunch"], ["Ice Fang"], ["Hydro Pump"]]
- },
- {
- "species": "Sharpedo",
- "item": "Sharpedonite",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]]
- },
- {
- "species": "Sharpedo",
- "item": "Life Orb",
- "ability": "Speed Boost",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Protect"], ["Destiny Bond"], ["Waterfall"], ["Crunch"]]
- }
- ]
- },
- "sceptile": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]]
- },
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Giga Drain"], ["Dragon Pulse"], ["Hidden Power Fire"]]
- },
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Substitute"]]
- },
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Giga Drain"], ["Dragon Pulse"], ["Focus Blast"], ["Leaf Storm"]]
- },
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Leaf Blade"], ["Outrage"], ["Earthquake"]]
- },
- {
- "species": "Sceptile",
- "item": "Sceptilite",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Dragon Pulse"], ["Giga Drain"], ["Focus Blast"], ["Hidden Power Fire"]]
- }
- ]
- },
- "rhyperior": {
- "flags": {},
- "sets": [
- {
- "species": "Rhyperior",
- "item": "Choice Band",
- "ability": "Solid Rock",
- "evs": {"hp": 168, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 92},
- "nature": "Adamant",
- "moves": [["Stone Edge"], ["Earthquake"], ["Megahorn"], ["Aqua Tail"]]
- },
- {
- "species": "Rhyperior",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 248, "atk": 16, "def": 244, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
- },
- {
- "species": "Rhyperior",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
- }
- ]
- },
- "bronzong": {
- "flags": {},
- "sets": [
- {
- "species": "Bronzong",
- "item": "Light Clay",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Reflect"], ["Light Screen"], ["Explosion"]]
- },
- {
- "species": "Bronzong",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]]
- },
- {
- "species": "Bronzong",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
- "nature": "Sassy",
- "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Earthquake"]]
- }
- ]
- },
- "feraligatr": {
- "flags": {},
- "sets": [
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 32, "atk": 248, "def": 0, "spa": 0, "spd": 0, "spe": 228},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Waterfall"], ["Ice Punch"], ["Crunch"]]
- },
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Torrent",
- "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Aqua Jet"], ["Waterfall"], ["Crunch"]]
- },
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Superpower"], ["Aqua Jet"], ["Swords Dance"]]
- },
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Ice Punch"], ["Superpower"], ["Dragon Dance"]]
- },
- {
- "species": "Feraligatr",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Ice Punch"], ["Crunch"], ["Dragon Dance"]]
- }
- ]
- },
- "slurpuff": {
- "flags": {},
- "sets": [
- {
- "species": "Slurpuff",
- "item": "Sitrus Berry",
- "ability": "Unburden",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Belly Drum"], ["Play Rough"], ["Drain Punch"], ["Return"]],
- "happiness": 255
- },
- {
- "species": "Slurpuff",
- "item": "Chesto Berry",
- "ability": "Unburden",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Rest"], ["Calm Mind"], ["Draining Kiss"], ["Flamethrower"]]
- },
- {
- "species": "Slurpuff",
- "item": "Sitrus Berry",
- "ability": "Unburden",
- "evs": {"hp": 52, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 204},
- "nature": "Adamant",
- "moves": [["Belly Drum"], ["Play Rough"], ["Return"], ["Aromatherapy"]],
- "happiness": 255
- }
- ]
- },
- "pangoro": {
- "flags": {},
- "sets": [
- {
- "species": "Pangoro",
- "item": "Choice Band",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["Superpower"], ["Gunk Shot"], ["Ice Punch"]]
- },
- {
- "species": "Pangoro",
- "item": "Life Orb",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]]
- },
- {
- "species": "Pangoro",
- "item": "Lum Berry",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]]
- }
- ]
- },
- "abomasnow": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Abomasnow",
- "item": "Abomasite",
- "ability": "Soundproof",
- "evs": {"hp": 0, "atk": 128, "def": 0, "spa": 252, "spd": 0, "spe": 128},
- "nature": "Mild",
- "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]]
- },
- {
- "species": "Abomasnow",
- "item": "Abomasite",
- "ability": "Soundproof",
- "evs": {"hp": 128, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 128},
- "nature": "Adamant",
- "moves": [["Ice Shard"], ["Wood Hammer"], ["Earthquake"], ["Swords Dance"]]
- }
- ]
- }
- },
- "RU": {
- "venusaur": {
- "flags": {},
- "sets": [
- {
- "species": "Venusaur",
- "item": "Life Orb",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]]
- },
- {
- "species": "Venusaur",
- "item": "Black Sludge",
- "ability": "Overgrow",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 92, "spd": 0, "spe": 164},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]]
- }
- ]
- },
- "diancie": {
- "flags": {},
- "sets": [
- {
- "species": "Diancie",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Sassy",
- "moves": [["Stealth Rock"], ["Heal Bell"], ["Moonblast"], ["Diamond Storm"]]
- },
- {
- "species": "Diancie",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Rest"], ["Sleep Talk"], ["Moonblast"]]
- },
- {
- "species": "Diancie",
- "item": "Life Orb",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 0},
- "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 0},
- "nature": "Quiet",
- "moves": [["Trick Room"], ["Moonblast"], ["Earth Power"], ["Psychic", "Diamond Storm", "Explosion"]]
- }
- ]
- },
- "manectric": {
- "flags": {},
- "sets": [
- {
- "species": "Manectric",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Flamethrower", "Overheat"], ["Hidden Power Ice"]]
- },
- {
- "species": "Manectric",
- "item": "Choice Scarf",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Hidden Power Ice"], ["Overheat", "Switcheroo"]]
- }
- ]
- },
- "hoopa": {
- "flags": {},
- "sets": [
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute", "Nasty Plot"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]]
- },
- {
- "species": "Hoopa",
- "item": "Life Orb",
- "ability": "Magician",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Mild",
- "moves": [["Knock Off"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]]
- },
- {
- "species": "Hoopa",
- "item": "Leftovers",
- "ability": "Magician",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Nasty Plot"], ["Shadow Ball"], ["Focus Blast"]]
- }
- ]
- },
- "banette": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Banette",
- "item": "Banettite",
- "ability": "Insomnia",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Destiny Bond", "Gunk Shot"], ["Knock Off"], ["Sucker Punch"], ["Will-O-Wisp", "Taunt", "Thunder Wave"]]
- }
- ]
- },
- "jellicent": {
- "flags": {},
- "sets": [
- {
- "species": "Jellicent",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 252, "atk": 0, "def": 212, "spa": 0, "spd": 0, "spe": 44},
- "nature": "Bold",
- "moves": [["Scald", "Hex"], ["Will-O-Wisp"], ["Recover"], ["Taunt"]]
- }
- ]
- },
- "sigilyph": {
- "flags": {},
- "sets": [
- {
- "species": "Sigilyph",
- "item": "Life Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Air Slash"], ["Heat Wave"], ["Roost"], ["Psychic"]]
- },
- {
- "species": "Sigilyph",
- "item": "Flame Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Roost"], ["Psycho Shift"], ["Air Slash"]]
- }
- ]
- },
- "gastrodon": {
- "flags": {},
- "sets": [
- {
- "species": "Gastrodon",
- "item": "Leftovers",
- "ability": "Storm Drain",
- "evs": {"hp": 252, "atk": 0, "def": 244, "spa": 0, "spd": 0, "spe": 12},
- "nature": "Bold",
- "moves": [["Scald"], ["Recover"], ["Toxic"], ["Earth Power"]]
- }
- ]
- },
- "delphox": {
- "flags": {},
- "sets": [
- {
- "species": "Delphox",
- "item": "Choice Scarf",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Psyshock"], ["Dazzling Gleam"], ["Trick", "Overheat"]]
- },
- {
- "species": "Delphox",
- "item": "Choice Specs",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Flamethrower"]]
- },
- {
- "species": "Delphox",
- "item": "Choice Specs",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Hidden Power Water"]]
- },
- {
- "species": "Delphox",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Grass Knot"]]
- },
- {
- "species": "Delphox",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Fire Blast"], ["Psychic"], ["Hidden Power Water"]]
- },
- {
- "species": "Delphox",
- "item": "Leftovers",
- "ability": "Blaze",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Calm Mind"], ["Flamethrower"], ["Psyshock"]]
- }
- ]
- },
- "clawitzer": {
- "flags": {},
- "sets": [
- {
- "species": "Clawitzer",
- "item": "Life Orb",
- "ability": "Mega Launcher",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Scald"], ["Dark Pulse"], ["Ice Beam"], ["Aura Sphere"]]
- }
- ]
- },
- "rotommow": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom-Mow",
- "item": "Choice Specs",
- "ability": "Levitate",
- "evs": {"hp": 48, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 208},
- "nature": "Timid",
- "moves": [["Leaf Storm"], ["Volt Switch"], ["Thunderbolt"], ["Trick"]]
- }
- ]
- },
- "rotom": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 124, "atk": 0, "def": 0, "spa": 132, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Will-O-Wisp"], ["Discharge"], ["Hex"]]
- }
- ]
- },
- "hitmontop": {
- "flags": {},
- "sets": [
- {
- "species": "Hitmontop",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Impish",
- "moves": [["Rapid Spin"], ["Close Combat"], ["Foresight"], ["Toxic"]]
- }
- ]
- },
- "braviary": {
- "flags": {},
- "sets": [
- {
- "species": "Braviary",
- "item": "Choice Scarf",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["U-turn"]],
- "happiness": 255
- },
- {
- "species": "Braviary",
- "item": "Life Orb",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["Roost"]],
- "happiness": 255
- },
- {
- "species": "Braviary",
- "item": "Leftovers",
- "ability": "Defiant",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 212, "spe": 44},
- "nature": "Careful",
- "moves": [["Substitute"], ["Bulk Up"], ["Roost"], ["Brave Bird"]]
- }
- ]
- },
- "registeel": {
- "flags": {},
- "sets": [
- {
- "species": "Registeel",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Curse"], ["Iron Head"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Registeel",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Seismic Toss"], ["Protect"], ["Thunder Wave", "Toxic"], ["Stealth Rock"]]
- }
- ]
- },
- "omastar": {
- "flags": {},
- "sets": [
- {
- "species": "Omastar",
- "item": "Focus Sash",
- "ability": "Weak Armor",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]]
- },
- {
- "species": "Omastar",
- "item": "Choice Specs",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Scald"], ["Hidden Power Grass"]]
- }
- ]
- },
- "magneton": {
- "flags": {},
- "sets": [
- {
- "species": "Magneton",
- "item": "Eviolite",
- "ability": "Magnet Pull",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Magnet Rise"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Water"]]
- },
- {
- "species": "Magneton",
- "item": "Choice Specs",
- "ability": "Analytic",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Grass"]]
- },
- {
- "species": "Magneton",
- "item": "Eviolite",
- "ability": "Analytic",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Flash Cannon"], ["Hidden Power Grass"]]
- }
- ]
- },
- "jolteon": {
- "flags": {},
- "sets": [
- {
- "species": "Jolteon",
- "item": "Choice Specs",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Choice Specs",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Choice Specs",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Life Orb",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Life Orb",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Life Orb",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Expert Belt",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Ice"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Expert Belt",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Water"], ["Volt Switch"]]
- },
- {
- "species": "Jolteon",
- "item": "Expert Belt",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Shadow Ball"], ["Hidden Power Grass"], ["Volt Switch"]]
- }
- ]
- },
- "golbat": {
- "flags": {},
- "sets": [
- {
- "species": "Golbat",
- "item": "Eviolite",
- "ability": "Infiltrator",
- "evs": {"hp": 248, "atk": 0, "def": 180, "spa": 0, "spd": 0, "spe": 80},
- "nature": "Impish",
- "moves": [["Taunt"], ["Roost"], ["Brave Bird"], ["Super Fang", "Toxic"]]
- }
- ]
- },
- "exploud": {
- "flags": {},
- "sets": [
- {
- "species": "Exploud",
- "item": "Choice Specs",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Boomburst"], ["Fire Blast"], ["Sleep Talk"], ["Focus Blast"]]
- },
- {
- "species": "Exploud",
- "item": "Life Orb",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Boomburst"], ["Fire Blast"], ["Surf"], ["Focus Blast"]]
- }
- ]
- },
- "eelektross": {
- "flags": {},
- "sets": [
- {
- "species": "Eelektross",
- "item": "Assault Vest",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 0},
- "nature": "Modest",
- "moves": [["Volt Switch"], ["Giga Drain"], ["Flamethrower"], ["Knock Off"]]
- }
- ]
- },
- "druddigon": {
- "flags": {},
- "sets": [
- {
- "species": "Druddigon",
- "item": "Rocky Helmet",
- "ability": "Rough Skin",
- "evs": {"hp": 236, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 20},
- "nature": "Impish",
- "moves": [["Dragon Tail"], ["Stealth Rock"], ["Fire Punch"], ["Glare", "Gunk Shot"]]
- },
- {
- "species": "Druddigon",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 236, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 20},
- "nature": "Adamant",
- "moves": [["Outrage", "Dragon Claw"], ["Sucker Punch"], ["Fire Punch"], ["Gunk Shot"]]
- }
- ]
- },
- "accelgor": {
- "flags": {},
- "sets": [
- {
- "species": "Accelgor",
- "item": "Focus Sash",
- "ability": "Sticky Hold",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Spikes"], ["Final Gambit"], ["Encore"], ["Bug Buzz"]]
- },
- {
- "species": "Accelgor",
- "item": "Life Orb",
- "ability": "Sticky Hold",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Sludge Bomb"]]
- },
- {
- "species": "Accelgor",
- "item": "Life Orb",
- "ability": "Sticky Hold",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Bug Buzz"], ["Focus Blast"], ["Spikes"], ["Hidden Power Ice"]]
- }
- ]
- },
- "spiritomb": {
- "flags": {},
- "sets": [
- {
- "species": "Spiritomb",
- "item": "Leftovers",
- "ability": "Infiltrator",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Dark Pulse"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Spiritomb",
- "item": "Leftovers",
- "ability": "Infiltrator",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Impish",
- "moves": [["Will-O-Wisp"], ["Foul Play"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Spiritomb",
- "item": "Black Glasses",
- "ability": "Infiltrator",
- "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
- "nature": "Adamant",
- "moves": [["Sucker Punch"], ["Pursuit"], ["Will-O-Wisp"], ["Foul Play", "Taunt"]]
- }
- ]
- },
- "drapion": {
- "flags": {},
- "sets": [
- {
- "species": "Drapion",
- "item": "Black Sludge",
- "ability": "Battle Armor",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 216, "spe": 44},
- "nature": "Careful",
- "moves": [["Knock Off"], ["Taunt"], ["Toxic Spikes"], ["Poison Jab"]]
- },
- {
- "species": "Drapion",
- "item": "Shuca Berry",
- "ability": "Battle Armor",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Knock Off"], ["Pursuit"], ["Poison Jab"]]
- },
- {
- "species": "Drapion",
- "item": "Shuca Berry",
- "ability": "Battle Armor",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Knock Off"], ["Aqua Tail"], ["Poison Jab"]]
- }
- ]
- },
- "camerupt": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Camerupt",
- "item": "Cameruptite",
- "ability": "Solid Rock",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Fire Blast", "Flamethrower"], ["Earth Power"], ["Hidden Power Ice"], ["Toxic"]]
- }
- ]
- },
- "bronzong": {
- "flags": {},
- "sets": [
- {
- "species": "Bronzong",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Brave",
- "moves": [["Trick Room"], ["Stealth Rock"], ["Earthquake"], ["Explosion"]]
- },
- {
- "species": "Bronzong",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Sassy",
- "moves": [["Hidden Power Fire"], ["Gyro Ball"], ["Earthquake"], ["Toxic"]]
- },
- {
- "species": "Bronzong",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Sassy",
- "moves": [["Stealth Rock"], ["Gyro Ball"], ["Psywave"], ["Toxic"]]
- }
- ]
- },
- "rhyperior": {
- "flags": {},
- "sets": [
- {
- "species": "Rhyperior",
- "item": "Choice Band",
- "ability": "Solid Rock",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Stone Edge"], ["Ice Punch"], ["Megahorn"]]
- },
- {
- "species": "Rhyperior",
- "item": "Life Orb",
- "ability": "Solid Rock",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Rock Polish"], ["Earthquake"], ["Stone Edge"], ["Ice Punch", "Swords Dance"]]
- },
- {
- "species": "Rhyperior",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 248, "atk": 16, "def": 0, "spa": 0, "spd": 244, "spe": 0},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Ice Punch", "Megahorn"]]
- }
- ]
- },
- "hitmonlee": {
- "flags": {},
- "sets": [
- {
- "species": "Hitmonlee",
- "item": "Choice Scarf",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Knock Off"], ["Rapid Spin"], ["Close Combat"]]
- },
- {
- "species": "Hitmonlee",
- "item": "Life Orb",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["High Jump Kick"], ["Knock Off"], ["Mach Punch"], ["Rapid Spin"]]
- },
- {
- "species": "Hitmonlee",
- "item": "Liechi Berry",
- "ability": "Unburden",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Endure"], ["Reversal"], ["Knock Off"], ["Mach Punch"]]
- }
- ]
- },
- "glalie": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Glalie",
- "item": "Glalitite",
- "ability": "Inner Focus",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Spikes"], ["Double-Edge"], ["Explosion"], ["Ice Shard"]]
- },
- {
- "species": "Glalie",
- "item": "Glalitite",
- "ability": "Inner Focus",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Double-Edge"], ["Freeze-Dry"], ["Earthquake"], ["Explosion"]]
- }
- ]
- },
- "fletchinder": {
- "flags": {},
- "sets": [
- {
- "species": "Fletchinder",
- "ability": "Gale Wings",
- "evs": {"hp": 160, "atk": 252, "def": 72, "spa": 0, "spd": 24, "spe": 0},
- "nature": "Adamant",
- "moves": [["Acrobatics"], ["Swords Dance"], ["Will-O-Wisp"], ["Roost"]]
- }
- ]
- },
- "escavalier": {
- "flags": {},
- "sets": [
- {
- "species": "Escavalier",
- "item": "Assault Vest",
- "ability": "Overcoat",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run", "Pursuit"]]
- },
- {
- "species": "Escavalier",
- "item": "Choice Band",
- "ability": "Overcoat",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Megahorn"], ["Iron Head"], ["Knock Off"], ["Drill Run"]]
- }
- ]
- },
- "aromatisse": {
- "flags": {},
- "sets": [
- {
- "species": "Aromatisse",
- "item": "Leftovers",
- "ability": "Aroma Veil",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Wish"], ["Protect"], ["Moonblast"], ["Aromatherapy"]]
- }
- ]
- },
- "meloetta": {
- "flags": {},
- "sets": [
- {
- "species": "Meloetta",
- "item": "Assault Vest",
- "ability": "Serene Grace",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psyshock"], ["Hyper Voice"], ["Focus Blast"], ["Shadow Ball", "Grass Knot", "Dazzling Gleam"]]
- },
- {
- "species": "Meloetta",
- "item": "Choice Scarf",
- "ability": "Serene Grace",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Dazzling Gleam", "Shadow Ball", "Trick", "U-turn"]]
- },
- {
- "species": "Meloetta",
- "item": "Choice Specs",
- "ability": "Serene Grace",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hyper Voice"], ["Psychic"], ["Focus Blast"], ["U-turn", "Dazzling Gleam", "Shadow Ball"]]
- },
- {
- "species": "Meloetta",
- "item": "Life Orb",
- "ability": "Serene Grace",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Relic Song"], ["Return"], ["Close Combat"], ["Knock Off"]],
- "happiness": 255
- },
- {
- "species": "Meloetta",
- "item": "Colbur Berry",
- "ability": "Serene Grace",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Hyper Voice", "Psychic"], ["Shadow Ball"], ["Focus Blast"]]
- },
- {
- "species": "Meloetta",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Perish Song"], ["Knock Off"], ["Heal Bell"], ["Thunder Wave"]]
- },
- {
- "species": "Meloetta",
- "item": "Leftovers",
- "ability": "Serene Grace",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Modest",
- "moves": [["Substitute"], ["Calm Mind"], ["Hyper Voice"], ["Shadow Ball"]]
- }
- ]
- },
- "alomomola": {
- "flags": {},
- "sets": [
- {
- "species": "Alomomola",
- "item": "Leftovers",
- "ability": "Regenerator",
- "evs": {"hp": 120, "atk": 0, "def": 136, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Scald"], ["Wish"], ["Protect"], ["Toxic"]]
- }
- ]
- },
- "emboar": {
- "flags": {},
- "sets": [
- {
- "species": "Emboar",
- "item": "Choice Band",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]]
- },
- {
- "species": "Emboar",
- "item": "Expert Belt",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Sucker Punch"]]
- },
- {
- "species": "Emboar",
- "item": "Choice Scarf",
- "ability": "Reckless",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Toxic"]]
- }
- ]
- },
- "seismitoad": {
- "flags": {},
- "sets": [
- {
- "species": "Seismitoad",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 200, "atk": 0, "def": 252, "spa": 0, "spd": 56, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Stealth Rock"], ["Scald"], ["Earthquake"], ["Knock Off"]]
- },
- {
- "species": "Seismitoad",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Rain Dance"], ["Hydro Pump"], ["Earth Power"], ["Sludge Bomb"]]
- },
- {
- "species": "Seismitoad",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 164, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 92},
- "nature": "Modest",
- "moves": [["Stealth Rock"], ["Hydro Pump"], ["Earth Power"], ["Grass Knot"]]
- }
- ]
- },
- "qwilfish": {
- "flags": {},
- "sets": [
- {
- "species": "Qwilfish",
- "item": "Black Sludge",
- "ability": "Intimidate",
- "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24},
- "nature": "Bold",
- "moves": [["Spikes"], ["Pain Split"], ["Scald"], ["Taunt"]]
- },
- {
- "species": "Qwilfish",
- "item": "Focus Sash",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Spikes"], ["Taunt"], ["Toxic Spikes"], ["Explosion"]]
- }
- ]
- },
- "granbull": {
- "flags": {},
- "sets": [
- {
- "species": "Granbull",
- "item": "Leftovers",
- "ability": "Intimidate",
- "evs": {"hp": 252, "atk": 0, "def": 232, "spa": 0, "spd": 0, "spe": 24},
- "nature": "Impish",
- "moves": [["Play Rough"], ["Earthquake"], ["Heal Bell"], ["Roar"]]
- },
- {
- "species": "Granbull",
- "item": "Choice Band",
- "ability": "Intimidate",
- "evs": {"hp": 212, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 44},
- "nature": "Adamant",
- "moves": [["Play Rough"], ["Fire Punch"], ["Thunder Punch"], ["Close Combat"]]
- }
- ]
- },
- "medicham": {
- "flags": {},
- "sets": [
- {
- "species": "Medicham",
- "item": "Life Orb",
- "ability": "Pure Power",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Thunder Punch"], ["Drain Punch"]]
- },
- {
- "species": "Medicham",
- "item": "Choice Scarf",
- "ability": "Pure Power",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Rock Slide", "Poison Jab"], ["Drain Punch", "Trick"]]
- }
- ]
- },
- "smeargle": {
- "flags": {},
- "sets": [
- {
- "species": "Smeargle",
- "item": "Focus Sash",
- "ability": "Own Tempo",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Spore", "Dark Void"], ["Sticky Web"], ["Stealth Rock"], ["Explosion"]]
- }
- ]
- },
- "absol": {
- "flags": {},
- "sets": [
- {
- "species": "Absol",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Iron Tail", "Pursuit"]]
- },
- {
- "species": "Absol",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["Superpower"], ["Sucker Punch"], ["Swords Dance"]]
- }
- ]
- },
- "aerodactyl": {
- "flags": {},
- "sets": [
- {
- "species": "Aerodactyl",
- "item": "Life Orb",
- "ability": "Unnerve",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stone Edge"], ["Fire Fang", "Earthquake"], ["Aerial Ace"], ["Roost"]]
- }
- ]
- },
- "aggron": {
- "flags": {},
- "sets": [
- {
- "species": "Aggron",
- "item": "Choice Band",
- "ability": "Rock Head",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Head Smash"], ["Heavy Slam"], ["Sleep Talk", "Fire Punch"], ["Low Kick"]]
- }
- ]
- },
- "blastoise": {
- "flags": {},
- "sets": [
- {
- "species": "Blastoise",
- "item": "Leftovers",
- "ability": "Torrent",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Bold",
- "moves": [["Scald"], ["Rapid Spin"], ["Toxic"], ["Foresight", "Refresh"]]
- }
- ]
- },
- "slowking": {
- "flags": {},
- "sets": [
- {
- "species": "Slowking",
- "item": "Leftovers",
- "ability": "Regenerator",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Bold",
- "moves": [["Scald"], ["Psyshock"], ["Calm Mind", "Thunder Wave"], ["Slack Off"]]
- },
- {
- "species": "Slowking",
- "item": "Choice Specs",
- "ability": "Regenerator",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "nature": "Modest",
- "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Trick"]]
- },
- {
- "species": "Slowking",
- "item": "Colbur Berry",
- "ability": "Regenerator",
- "evs": {"hp": 160, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 96},
- "nature": "Bold",
- "moves": [["Scald"], ["Psyshock"], ["Fire Blast"], ["Thunder Wave"]]
- }
- ]
- },
- "abomasnow": {
- "flags": {},
- "sets": [
- {
- "species": "Abomasnow",
- "item": "Life Orb",
- "ability": "Snow Warning",
- "evs": {"hp": 0, "atk": 132, "def": 0, "spa": 252, "spd": 0, "spe": 124},
- "nature": "Mild",
- "moves": [["Blizzard"], ["Giga Drain"], ["Ice Shard"], ["Focus Blast"]]
- }
- ]
- },
- "flygon": {
- "flags": {},
- "sets": [
- {
- "species": "Flygon",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Fire Blast"]]
- },
- {
- "species": "Flygon",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Draco Meteor"], ["Earth Power"], ["Roost"], ["Defog"]]
- },
- {
- "species": "Flygon",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 116, "spa": 0, "spd": 116, "spe": 24},
- "nature": "Careful",
- "moves": [["Defog"], ["Roost"], ["Earthquake"], ["U-turn"]]
- },
- {
- "species": "Flygon",
- "item": "Choice Band",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Outrage"], ["Earthquake"], ["U-turn"], ["Iron Tail"]]
- }
- ]
- },
- "scrafty": {
- "flags": {},
- "sets": [
- {
- "species": "Scrafty",
- "item": "Choice Band",
- "ability": "Intimidate",
- "evs": {"hp": 152, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 104},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["High Jump Kick"], ["Drain Punch"], ["Poison Jab"]]
- },
- {
- "species": "Scrafty",
- "item": "Chople Berry",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["High Jump Kick"], ["Poison Jab", "Iron Head"], ["Dragon Dance"]]
- },
- {
- "species": "Scrafty",
- "item": "Coba Berry",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["High Jump Kick"], ["Head Smash"], ["Dragon Dance"]]
- }
- ]
- },
- "houndoom": {
- "flags": {},
- "sets": [
- {
- "species": "Houndoom",
- "item": "Life Orb",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Fire Blast"], ["Dark Pulse"], ["Sucker Punch"], ["Nasty Plot"]]
- },
- {
- "species": "Houndoom",
- "item": "Life Orb",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 220, "def": 0, "spa": 36, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Fire Blast"], ["Crunch"], ["Sucker Punch"], ["Pursuit"]]
- }
- ]
- },
- "togetic": {
- "flags": {},
- "sets": [
- {
- "species": "Togetic",
- "item": "Eviolite",
- "ability": "Serene Grace",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Bold",
- "moves": [["Dazzling Gleam"], ["Roost"], ["Flamethrower"], ["Thunder Wave"]]
- }
- ]
- },
- "gallade": {
- "flags": {},
- "sets": [
- {
- "species": "Gallade",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Swords Dance"]]
- },
- {
- "species": "Gallade",
- "item": "Choice Band",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Drain Punch"]]
- }
- ]
- },
- "virizion": {
- "flags": {},
- "sets": [
- {
- "species": "Virizion",
- "item": "Lum Berry",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Leaf Blade"], ["Close Combat"], ["Stone Edge", "Zen Headbutt"], ["Swords Dance"]]
- },
- {
- "species": "Virizion",
- "item": "Life Orb",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Giga Drain"], ["Focus Blast"], ["Hidden Power Ice"], ["Calm Mind"]]
- },
- {
- "species": "Virizion",
- "item": "Leftovers",
- "ability": "Justified",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Giga Drain"], ["Focus Blast"], ["Substitute"], ["Calm Mind"]]
- }
- ]
- },
- "uxie": {
- "flags": {},
- "sets": [
- {
- "species": "Uxie",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 64, "spa": 0, "spd": 0, "spe": 192},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Psyshock"], ["Thunder Wave"], ["U-turn"]]
- }
- ]
- },
- "sneasel": {
- "flags": {},
- "sets": [
- {
- "species": "Sneasel",
- "item": "Life Orb",
- "ability": "Pickpocket",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["Icicle Crash"], ["Ice Shard"], ["Low Kick", "Pursuit"]]
- }
- ]
- },
- "samurott": {
- "flags": {},
- "sets": [
- {
- "species": "Samurott",
- "item": "Lum Berry",
- "ability": "Shell Armor",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Waterfall"], ["Megahorn"], ["Aqua Jet"]]
- }
- ]
- },
- "gurdurr": {
- "flags": {},
- "sets": [
- {
- "species": "Gurdurr",
- "item": "Eviolite",
- "ability": "Guts",
- "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Adamant",
- "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Mach Punch"]]
- }
- ]
- },
- "poliwrath": {
- "flags": {},
- "sets": [
- {
- "species": "Poliwrath",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Scald"], ["Circle Throw"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Poliwrath",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "nature": "Modest",
- "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
- },
- {
- "species": "Poliwrath",
- "item": "Life Orb",
- "ability": "Water Absorb",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "nature": "Modest",
- "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
- },
- {
- "species": "Poliwrath",
- "item": "Choice Specs",
- "ability": "Water Absorb",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "nature": "Modest",
- "moves": [["Hydro Pump", "Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
- }
- ]
- },
- "vivillon": {
- "flags": {},
- "sets": [
- {
- "species": "Vivillon",
- "item": "Leftovers",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Substitute"]]
- }
- ]
- },
- "audino": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Audino",
- "item": "Audinite",
- "ability": "Regenerator",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 8},
- "nature": "Modest",
- "moves": [["Dazzling Gleam"], ["Fire Blast"], ["Surf"], ["Healing Wish"]]
- }
- ]
- },
- "mesprit": {
- "flags": {},
- "sets": [
- {
- "species": "Mesprit",
- "item": "Colbur Berry",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Dazzling Gleam", "Ice Beam"], ["Stealth Rock"], ["Healing Wish"]]
- }
- ]
- },
- "archeops": {
- "flags": {},
- "sets": [
- {
- "species": "Archeops",
- "item": "Focus Sash",
- "ability": "Defeatist",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]]
- }
- ]
- },
- "malamar": {
- "flags": {},
- "sets": [
- {
- "species": "Malamar",
- "item": "Leftovers",
- "ability": "Contrary",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 108, "spe": 152},
- "nature": "Jolly",
- "moves": [["Superpower"], ["Knock Off"], ["Rest"], ["Sleep Talk"]]
- }
- ]
- },
- "roselia": {
- "flags": {},
- "sets": [
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 248, "atk": 0, "def": 172, "spa": 0, "spd": 88, "spe": 0},
- "nature": "Calm",
- "moves": [["Spikes"], ["Synthesis"], ["Giga Drain"], ["Sludge Bomb"]]
- }
- ]
- },
- "piloswine": {
- "flags": {},
- "sets": [
- {
- "species": "Piloswine",
- "item": "Eviolite",
- "ability": "Thick Fat",
- "evs": {"hp": 240, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Ice Shard"], ["Earthquake"], ["Icicle Crash"]]
- }
- ]
- },
- "sawk": {
- "flags": {},
- "sets": [
- {
- "species": "Sawk",
- "item": "Choice Band",
- "ability": "Sturdy",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Zen Headbutt"], ["Stone Edge"]]
- },
- {
- "species": "Sawk",
- "item": "Expert Belt",
- "ability": "Mold Breaker",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]]
- },
- {
- "species": "Sawk",
- "item": "Lum Berry",
- "ability": "Mold Breaker",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Stone Edge"]]
- },
- {
- "species": "Sawk",
- "item": "Choice Scarf",
- "ability": "Sturdy",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Stone Edge"], ["Zen Headbutt"]]
- }
- ]
- }
- },
- "NU": {
- "dodrio": {
- "flags": {},
- "sets": [
- {
- "species": "Dodrio",
- "item": "Choice Band",
- "ability": "Early Bird",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack"]],
- "happiness": 255
- }
- ]
- },
- "chatot": {
- "flags": {},
- "sets": [
- {
- "species": "Chatot",
- "item": "Choice Scarf",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]]
- },
- {
- "species": "Chatot",
- "item": "Choice Specs",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["Chatter"], ["U-turn"], ["Hidden Power Grass"]]
- },
- {
- "species": "Chatot",
- "item": "Leftovers",
- "ability": "Tangled Feet",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["Chatter"], ["Nasty Plot"], ["Encore"]]
- }
- ]
- },
- "carracosta": {
- "flags": {},
- "sets": [
- {
- "species": "Carracosta",
- "item": "Life Orb",
- "ability": "Solid Rock",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge"], ["Aqua Jet"]]
- },
- {
- "species": "Carracosta",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Stealth Rock"], ["Scald"], ["Rock Slide"], ["Knock Off", "Toxic"]]
- },
- {
- "species": "Carracosta",
- "item": "Life Orb",
- "ability": "Solid Rock",
- "evs": {"hp": 0, "atk": 28, "def": 0, "spa": 228, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Shell Smash"], ["Hydro Pump"], ["Stone Edge"], ["Ice Beam"]]
- }
- ]
- },
- "beheeyem": {
- "flags": {},
- "sets": [
- {
- "species": "Beheeyem",
- "item": "Life Orb",
- "ability": "Analytic",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 252, "spd": 0, "spe": 0},
- "nature": "Quiet",
- "moves": [["Trick Room"], ["Psychic"], ["Thunderbolt"], ["Hidden Power Fighting"]]
- },
- {
- "species": "Beheeyem",
- "item": "Choice Specs",
- "ability": "Analytic",
- "evs": {"hp": 132, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 124},
- "nature": "Modest",
- "moves": [["Psychic", "Psyshock"], ["Signal Beam"], ["Hidden Power Ground"], ["Trick", "Thunderbolt"]]
- }
- ]
- },
- "basculin": {
- "flags": {},
- "sets": [
- {
- "species": "Basculin",
- "item": "Choice Band",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Waterfall"], ["Aqua Jet"], ["Zen Headbutt"], ["Superpower"]]
- },
- {
- "species": "Basculin",
- "item": "Splash Plate",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Aqua Jet"], ["Double-Edge"], ["Superpower"]]
- }
- ]
- },
- "barbaracle": {
- "flags": {},
- "sets": [
- {
- "species": "Barbaracle",
- "item": "Shuca Berry",
- "ability": "Tough Claws",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Shell Smash"], ["Razor Shell"], ["Return"], ["Earthquake", "Substitute"]],
- "happiness": 255
- }
- ]
- },
- "aurorus": {
- "flags": {},
- "sets": [
- {
- "species": "Aurorus",
- "item": "Choice Specs",
- "ability": "Refrigerate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Hyper Voice"], ["Freeze-Dry"], ["Psychic", "Frost Breath"], ["Earth Power"]]
- },
- {
- "species": "Aurorus",
- "item": "Focus Sash",
- "ability": "Snow Warning",
- "evs": {"hp": 0, "atk": 32, "def": 0, "spa": 224, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Stealth Rock"], ["Blizzard"], ["Freeze-Dry"], ["Rock Tomb"]]
- }
- ]
- },
- "articuno": {
- "flags": {},
- "sets": [
- {
- "species": "Articuno",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Ice Beam"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
- },
- {
- "species": "Articuno",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hidden Power Fire"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
- },
- {
- "species": "Articuno",
- "item": "Leftovers",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]]
- }
- ]
- },
- "zangoose": {
- "flags": {},
- "sets": [
- {
- "species": "Zangoose",
- "item": "Toxic Orb",
- "ability": "Toxic Boost",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Facade"], ["Knock Off"], ["Quick Attack"], ["Close Combat"]]
- }
- ]
- },
- "xatu": {
- "flags": {},
- "sets": [
- {
- "species": "Xatu",
- "item": "Colbur Berry",
- "ability": "Magic Bounce",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Timid",
- "moves": [["Psychic", "Psyshock"], ["Roost"], ["Heat Wave"], ["U-turn", "Thunder Wave"]]
- },
- {
- "species": "Xatu",
- "item": "Leftovers",
- "ability": "Magic Bounce",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Timid",
- "moves": [["Calm Mind"], ["Roost"], ["Psyshock"], ["Heat Wave", "Signal Beam"]]
- },
- {
- "species": "Xatu",
- "item": "Life Orb",
- "ability": "Magic Bounce",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic", "Psyshock"], ["Grass Knot"], ["Heat Wave"], ["Roost"]]
- }
- ]
- },
- "weezing": {
- "flags": {},
- "sets": [
- {
- "species": "Weezing",
- "item": "Black Sludge",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
- "nature": "Bold",
- "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Pain Split"]]
- },
- {
- "species": "Weezing",
- "item": "Black Sludge",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 148, "spa": 0, "spd": 0, "spe": 108},
- "nature": "Bold",
- "moves": [["Will-O-Wisp"], ["Sludge Bomb"], ["Taunt"], ["Toxic Spikes"]]
- }
- ]
- },
- "vivillon": {
- "flags": {},
- "sets": [
- {
- "species": "Vivillon",
- "item": "Leftovers",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Quiver Dance"], ["Sleep Powder"], ["Hurricane"], ["Substitute"]]
- },
- {
- "species": "Vivillon",
- "item": "Focus Sash",
- "ability": "Compound Eyes",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Energy Ball"]]
- }
- ]
- },
- "vileplume": {
- "flags": {},
- "sets": [
- {
- "species": "Vileplume",
- "item": "Black Sludge",
- "ability": "Effect Spore",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Aromatherapy", "Sleep Powder"]]
- },
- {
- "species": "Vileplume",
- "item": "Black Sludge",
- "ability": "Effect Spore",
- "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]]
- },
- {
- "species": "Vileplume",
- "item": "Black Sludge",
- "ability": "Effect Spore",
- "evs": {"hp": 112, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 144},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Ground"], ["Synthesis"]]
- }
- ]
- },
- "swellow": {
- "flags": {},
- "sets": [
- {
- "species": "Swellow",
- "item": "Choice Specs",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Sleep Talk"]]
- },
- {
- "species": "Swellow",
- "item": "Choice Specs",
- "ability": "Scrappy",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Hidden Power Grass"]]
- },
- {
- "species": "Swellow",
- "item": "Toxic Orb",
- "ability": "Guts",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Facade"], ["Brave Bird"], ["U-turn"], ["Quick Attack"]]
- }
- ]
- },
- "sandslash": {
- "flags": {},
- "sets": [
- {
- "species": "Sandslash",
- "item": "Lum Berry",
- "ability": "Sand Rush",
- "evs": {"hp": 172, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 84},
- "nature": "Adamant",
- "moves": [["Rapid Spin"], ["Knock Off"], ["Earthquake"], ["Stealth Rock"]]
- }
- ]
- },
- "samurott": {
- "flags": {},
- "sets": [
- {
- "species": "Samurott",
- "item": "Life Orb",
- "ability": "Torrent",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Rash",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Aqua Jet"], ["Megahorn", "Taunt"]]
- },
- {
- "species": "Samurott",
- "item": "Life Orb",
- "ability": "Torrent",
- "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]]
- },
- {
- "species": "Samurott",
- "item": "Lum Berry",
- "ability": "Torrent",
- "evs": {"hp": 120, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 136},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Waterfall"], ["Aqua Jet"], ["Megahorn"]]
- }
- ]
- },
- "rotomfan": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom-Fan",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Air Slash"], ["Volt Switch"], ["Trick"], ["Thunderbolt"]]
- },
- {
- "species": "Rotom-Fan",
- "item": "Expert Belt",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Water"], ["Will-O-Wisp"]]
- },
- {
- "species": "Rotom-Fan",
- "item": "Expert Belt",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Air Slash"], ["Hidden Power Grass"], ["Will-O-Wisp"]]
- }
- ]
- },
- "rotom": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]]
- },
- {
- "species": "Rotom",
- "item": "Choice Specs",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Shadow Ball"], ["Thunderbolt"], ["Trick"]]
- },
- {
- "species": "Rotom",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 108, "spa": 0, "spd": 0, "spe": 148},
- "nature": "Timid",
- "moves": [["Will-O-Wisp"], ["Shadow Ball"], ["Volt Switch"], ["Pain Split"]]
- },
- {
- "species": "Rotom",
- "item": "Spell Tag",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Will-O-Wisp"], ["Hex"], ["Volt Switch"], ["Discharge", "Shadow Ball"]]
- }
- ]
- },
- "rhydon": {
- "flags": {},
- "sets": [
- {
- "species": "Rhydon",
- "item": "Eviolite",
- "ability": "Lightning Rod",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Rock Polish"]]
- },
- {
- "species": "Rhydon",
- "item": "Eviolite",
- "ability": "Lightning Rod",
- "evs": {"hp": 252, "atk": 16, "def": 0, "spa": 0, "spd": 240, "spe": 0},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Megahorn"]]
- }
- ]
- },
- "regirock": {
- "flags": {},
- "sets": [
- {
- "species": "Regirock",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 44, "def": 16, "spa": 0, "spd": 196, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Stone Edge", "Rock Slide"], ["Thunder Wave", "Toxic"], ["Drain Punch", "Earthquake"]]
- }
- ]
- },
- "pyroar": {
- "flags": {},
- "sets": [
- {
- "species": "Pyroar",
- "item": "Life Orb",
- "ability": "Unnerve",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Will-O-Wisp"]]
- },
- {
- "species": "Pyroar",
- "item": "Choice Specs",
- "ability": "Unnerve",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Flamethrower", "Overheat"]]
- }
- ]
- },
- "primeape": {
- "flags": {},
- "sets": [
- {
- "species": "Primeape",
- "item": "Choice Band",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Earthquake", "Gunk Shot"]]
- },
- {
- "species": "Primeape",
- "item": "Expert Belt",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Close Combat"], ["U-turn"], ["Stone Edge"], ["Encore"]]
- }
- ]
- },
- "pawniard": {
- "flags": {},
- "sets": [
- {
- "species": "Pawniard",
- "item": "Eviolite",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Knock Off"], ["Iron Head"], ["Sucker Punch"]]
- }
- ]
- },
- "musharna": {
- "flags": {},
- "sets": [
- {
- "species": "Musharna",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Psyshock"], ["Heal Bell", "Signal Beam"], ["Moonlight"]]
- },
- {
- "species": "Musharna",
- "item": "Leftovers",
- "ability": "Synchronize",
- "evs": {"hp": 240, "atk": 0, "def": 252, "spa": 0, "spd": 16, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Barrier"], ["Moonlight"], ["Stored Power"]]
- }
- ]
- },
- "muk": {
- "flags": {},
- "sets": [
- {
- "species": "Muk",
- "item": "Assault Vest",
- "ability": "Poison Touch",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Adamant",
- "moves": [["Gunk Shot"], ["Poison Jab"], ["Fire Punch"], ["Ice Punch"]]
- },
- {
- "species": "Muk",
- "item": "Choice Band",
- "ability": "Poison Touch",
- "evs": {"hp": 220, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 36},
- "nature": "Adamant",
- "moves": [["Gunk Shot"], ["Shadow Sneak"], ["Focus Punch"], ["Ice Punch"]]
- }
- ]
- },
- "mismagius": {
- "flags": {},
- "sets": [
- {
- "species": "Mismagius",
- "item": "Colbur Berry",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Destiny Bond"]]
- },
- {
- "species": "Mismagius",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Taunt"], ["Shadow Ball"], ["Dazzling Gleam"], ["Nasty Plot"]]
- },
- {
- "species": "Mismagius",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Taunt"], ["Will-O-Wisp"], ["Hex"], ["Pain Split"]]
- }
- ]
- },
- "miltank": {
- "flags": {},
- "sets": [
- {
- "species": "Miltank",
- "item": "Leftovers",
- "ability": "Scrappy",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Curse"], ["Body Slam"], ["Milk Drink"], ["Heal Bell"]]
- },
- {
- "species": "Miltank",
- "item": "Leftovers",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Impish",
- "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Heal Bell"]]
- },
- {
- "species": "Miltank",
- "item": "Leftovers",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Impish",
- "moves": [["Body Slam"], ["Milk Drink"], ["Toxic", "Thunder Wave"], ["Stealth Rock"]]
- }
- ]
- },
- "mesprit": {
- "flags": {},
- "sets": [
- {
- "species": "Mesprit",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Energy Ball"], ["Healing Wish", "Calm Mind"]]
- },
- {
- "species": "Mesprit",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Psychic", "Psyshock"], ["Signal Beam", "Ice Beam"], ["Hidden Power Ground"], ["Healing Wish", "Calm Mind"]]
- },
- {
- "species": "Mesprit",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Psychic"], ["Ice Beam", "Signal Beam"], ["U-turn"], ["Healing Wish"]]
- },
- {
- "species": "Mesprit",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Psychic"], ["U-turn"], ["Thunder Wave", "Healing Wish"]]
- }
- ]
- },
- "mantine": {
- "flags": {},
- "sets": [
- {
- "species": "Mantine",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 16, "spe": 0},
- "nature": "Calm",
- "moves": [["Defog"], ["Scald"], ["Air Slash"], ["Toxic"]]
- },
- {
- "species": "Mantine",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 32, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 224},
- "nature": "Modest",
- "moves": [["Air Slash"], ["Hydro Pump"], ["Ice Beam"], ["Rain Dance"]]
- }
- ]
- },
- "malamar": {
- "flags": {},
- "sets": [
- {
- "species": "Malamar",
- "item": "Leftovers",
- "ability": "Contrary",
- "evs": {"hp": 252, "atk": 4, "def": 0, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Sleep Talk"], ["Superpower"], ["Knock Off"]]
- },
- {
- "species": "Malamar",
- "item": "Choice Scarf",
- "ability": "Contrary",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Superpower"], ["Knock Off"], ["Psycho Cut"], ["Switcheroo"]]
- }
- ]
- },
- "magmortar": {
- "flags": {},
- "sets": [
- {
- "species": "Magmortar",
- "item": "Assault Vest",
- "ability": "Vital Spirit",
- "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192},
- "nature": "Modest",
- "moves": [["Fire Blast"], ["Thunderbolt"], ["Focus Blast"], ["Flame Charge", "Earthquake"]]
- },
- {
- "species": "Magmortar",
- "item": "Assault Vest",
- "ability": "Vital Spirit",
- "evs": {"hp": 64, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 192},
- "nature": "Modest",
- "moves": [["Fire Blast"], ["Thunderbolt"], ["Hidden Power Grass"], ["Flame Charge", "Earthquake"]]
- },
- {
- "species": "Magmortar",
- "item": "Life Orb",
- "ability": "Vital Spirit",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Mild",
- "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Focus Blast"]]
- },
- {
- "species": "Magmortar",
- "item": "Life Orb",
- "ability": "Vital Spirit",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Mild",
- "moves": [["Fire Blast"], ["Thunderbolt"], ["Earthquake"], ["Hidden Power Grass"]]
- }
- ]
- },
- "ludicolo": {
- "flags": {},
- "sets": [
- {
- "species": "Ludicolo",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Giga Drain"], ["Ice Beam"], ["Rain Dance"]]
- }
- ]
- },
- "lilligant": {
- "flags": {},
- "sets": [
- {
- "species": "Lilligant",
- "item": "Life Orb",
- "ability": "Own Tempo",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Fire"]]
- },
- {
- "species": "Lilligant",
- "item": "Life Orb",
- "ability": "Own Tempo",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Ice"]]
- },
- {
- "species": "Lilligant",
- "item": "Choice Scarf",
- "ability": "Own Tempo",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Sleep Powder"], ["Leaf Storm"], ["Hidden Power Rock"], ["Healing Wish"]]
- }
- ]
- },
- "liepard": {
- "flags": {},
- "sets": [
- {
- "species": "Liepard",
- "item": "Black Glasses",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Dark Pulse"], ["Copycat"], ["Encore"]]
- },
- {
- "species": "Liepard",
- "item": "Black Glasses",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Knock Off"], ["Encore"], ["Sucker Punch"], ["U-turn"]]
- }
- ]
- },
- "lanturn": {
- "flags": {},
- "sets": [
- {
- "species": "Lanturn",
- "item": "Choice Specs",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184},
- "nature": "Modest",
- "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Fire"]]
- },
- {
- "species": "Lanturn",
- "item": "Choice Specs",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 72, "spe": 184},
- "nature": "Modest",
- "moves": [["Hydro Pump", "Scald"], ["Volt Switch"], ["Ice Beam", "Signal Beam"], ["Hidden Power Grass"]]
- },
- {
- "species": "Lanturn",
- "item": "Leftovers",
- "ability": "Volt Absorb",
- "evs": {"hp": 40, "atk": 0, "def": 152, "spa": 0, "spd": 208, "spe": 108},
- "nature": "Calm",
- "moves": [["Scald"], ["Volt Switch"], ["Heal Bell"], ["Toxic", "Thunder Wave", "Protect"]]
- },
- {
- "species": "Lanturn",
- "item": "Assault Vest",
- "ability": "Volt Absorb",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 144, "spe": 112},
- "nature": "Modest",
- "moves": [["Scald"], ["Volt Switch"], ["Ice Beam"], ["Hidden Power Fire"]]
- }
- ]
- },
- "klinklang": {
- "flags": {},
- "sets": [
- {
- "species": "Klinklang",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 92, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 164},
- "nature": "Adamant",
- "moves": [["Shift Gear"], ["Gear Grind"], ["Return"], ["Substitute"]],
- "happiness": 255
- }
- ]
- },
- "kangaskhan": {
- "flags": {},
- "sets": [
- {
- "species": "Kangaskhan",
- "gender": "F",
- "item": "Silk Scarf",
- "ability": "Scrappy",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Fake Out"], ["Double-Edge"], ["Sucker Punch"], ["Earthquake"]]
- }
- ]
- },
- "kabutops": {
- "flags": {},
- "sets": [
- {
- "species": "Kabutops",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Rapid Spin"], ["Stone Edge"], ["Aqua Jet"], ["Waterfall"]]
- },
- {
- "species": "Kabutops",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Stone Edge"], ["Aqua Jet"], ["Superpower", "Waterfall"]]
- }
- ]
- },
- "jynx": {
- "flags": {},
- "sets": [
- {
- "species": "Jynx",
- "item": "Choice Scarf",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Ice Beam"], ["Psychic"], ["Focus Blast"], ["Trick"]]
- },
- {
- "species": "Jynx",
- "item": "Focus Sash",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Lovely Kiss"], ["Ice Beam"], ["Psychic"], ["Focus Blast", "Nasty Plot"]]
- },
- {
- "species": "Jynx",
- "item": "Life Orb",
- "ability": "Dry Skin",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Lovely Kiss"], ["Nasty Plot"], ["Psychic"], ["Ice Beam"]]
- }
- ]
- },
- "hariyama": {
- "flags": {},
- "sets": [
- {
- "species": "Hariyama",
- "item": "Assault Vest",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Bullet Punch"], ["Fake Out", "Earthquake"]]
- },
- {
- "species": "Hariyama",
- "item": "Choice Band",
- "ability": "Guts",
- "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Adamant",
- "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Bullet Punch"]]
- }
- ]
- },
- "golurk": {
- "flags": {},
- "sets": [
- {
- "species": "Golurk",
- "item": "Choice Band",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Shadow Punch"], ["Earthquake"], ["Ice Punch"], ["Zen Headbutt", "Thunder Punch"]]
- },
- {
- "species": "Golurk",
- "item": "Colbur Berry",
- "ability": "No Guard",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Earthquake"], ["Shadow Punch"], ["Dynamic Punch"]]
- },
- {
- "species": "Golurk",
- "item": "Life Orb",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Rock Polish"], ["Earthquake"], ["Shadow Punch"], ["Ice Punch"]]
- }
- ]
- },
- "garbodor": {
- "flags": {},
- "sets": [
- {
- "species": "Garbodor",
- "item": "Rocky Helmet",
- "ability": "Aftermath",
- "evs": {"hp": 252, "atk": 0, "def": 160, "spa": 0, "spd": 0, "spe": 96},
- "nature": "Impish",
- "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Toxic Spikes"]]
- },
- {
- "species": "Garbodor",
- "item": "Rocky Helmet",
- "ability": "Aftermath",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Seed Bomb"]]
- }
- ]
- },
- "ferroseed": {
- "flags": {},
- "sets": [
- {
- "species": "Ferroseed",
- "item": "Eviolite",
- "ability": "Iron Barbs",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Relaxed",
- "moves": [["Spikes"], ["Gyro Ball", "Knock Off"], ["Leech Seed"], ["Protect"]]
- },
- {
- "species": "Ferroseed",
- "item": "Eviolite",
- "ability": "Iron Barbs",
- "evs": {"hp": 252, "atk": 0, "def": 112, "spa": 0, "spd": 144, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Seed Bomb"], ["Leech Seed"], ["Thunder Wave"]]
- }
- ]
- },
- "exeggutor": {
- "flags": {},
- "sets": [
- {
- "species": "Exeggutor",
- "item": "Life Orb",
- "ability": "Chlorophyll",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Psychic"], ["Hidden Power Fire"], ["Sleep Powder"]]
- },
- {
- "species": "Exeggutor",
- "item": "Choice Specs",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Psychic"], ["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"]]
- },
- {
- "species": "Exeggutor",
- "item": "Lum Berry",
- "ability": "Harvest",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 176, "spd": 0, "spe": 84},
- "nature": "Modest",
- "moves": [["Sleep Powder"], ["Giga Drain"], ["Psychic"], ["Rest"]]
- }
- ]
- },
- "electivire": {
- "flags": {},
- "sets": [
- {
- "species": "Electivire",
- "item": "Life Orb",
- "ability": "Motor Drive",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Wild Charge"], ["Earthquake"], ["Ice Punch"], ["Hidden Power Grass"]]
- }
- ]
- },
- "cryogonal": {
- "flags": {},
- "sets": [
- {
- "species": "Cryogonal",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Frost Breath"], ["Recover"]]
- },
- {
- "species": "Cryogonal",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Rapid Spin"], ["Freeze-Dry"], ["Hidden Power Ground"], ["Recover"]]
- }
- ]
- },
- "crustle": {
- "flags": {},
- "sets": [
- {
- "species": "Crustle",
- "item": "Custap Berry",
- "ability": "Sturdy",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Spikes"], ["Rock Blast"], ["Knock Off"]]
- }
- ]
- },
- "cacturne": {
- "flags": {},
- "sets": [
- {
- "species": "Cacturne",
- "item": "Life Orb",
- "ability": "Water Absorb",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Rash",
- "moves": [["Dark Pulse"], ["Giga Drain"], ["Sucker Punch"], ["Destiny Bond"]]
- }
- ]
- },
- "audino": {
- "flags": {
- "megaOnly": 1
- },
- "sets": [
- {
- "species": "Audino",
- "item": "Audinite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Wish"], ["Protect"]]
- },
- {
- "species": "Audino",
- "item": "Audinite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 208, "spa": 48, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Audino",
- "item": "Audinite",
- "ability": "Regenerator",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Calm Mind", "Healing Wish"], ["Dazzling Gleam"], ["Fire Blast"], ["Surf", "Thunder Wave", "Psychic"]]
- },
- {
- "species": "Audino",
- "item": "Audinite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
- "nature": "Calm",
- "moves": [["Wish"], ["Protect"], ["Heal Bell"], ["Dazzling Gleam"]]
- }
- ]
- },
- "archeops": {
- "flags": {},
- "sets": [
- {
- "species": "Archeops",
- "ability": "Defeatist",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Earth Power"]]
- },
- {
- "species": "Archeops",
- "ability": "Defeatist",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Taunt"], ["Roost"], ["Acrobatics"], ["Defog"]]
- },
- {
- "species": "Archeops",
- "ability": "Defeatist",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Defog"], ["Roost"], ["Acrobatics"], ["Earth Power"]]
- },
- {
- "species": "Archeops",
- "item": "Focus Sash",
- "ability": "Defeatist",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Head Smash"]]
- },
- {
- "species": "Archeops",
- "ability": "Defeatist",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Acrobatics"], ["Stone Edge"], ["Earth Power"], ["Roost"]]
- }
- ]
- },
- "claydol": {
- "flags": {},
- "sets": [
- {
- "species": "Claydol",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Rapid Spin"], ["Earth Power"], ["Shadow Ball"], ["Psychic", "Psyshock"]]
- }
- ]
- },
- "tauros": {
- "flags": {},
- "sets": [
- {
- "species": "Tauros",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Rock Climb"], ["Earthquake"], ["Fire Blast"], ["Iron Tail", "Zen Headbutt"]]
- }
- ]
- },
- "mawile": {
- "flags": {},
- "sets": [
- {
- "species": "Mawile",
- "item": "Life Orb",
- "ability": "Sheer Force",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naughty",
- "moves": [["Play Rough"], ["Iron Head"], ["Fire Blast"], ["Sucker Punch"]]
- }
- ]
- },
- "scyther": {
- "flags": {},
- "sets": [
- {
- "species": "Scyther",
- "item": "Eviolite",
- "ability": "Technician",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Aerial Ace"], ["U-turn"], ["Roost"]]
- },
- {
- "species": "Scyther",
- "item": "Choice Band",
- "ability": "Technician",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off", "Pursuit"], ["Quick Attack"]]
- },
- {
- "species": "Scyther",
- "item": "Choice Scarf",
- "ability": "Technician",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["U-turn"], ["Aerial Ace"], ["Knock Off"], ["Bug Bite"]]
- }
- ]
- },
- "torterra": {
- "flags": {},
- "sets": [
- {
- "species": "Torterra",
- "item": "Leftovers",
- "ability": "Overgrow",
- "evs": {"hp": 252, "atk": 128, "def": 128, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Wood Hammer"], ["Earthquake"], ["Stealth Rock"], ["Synthesis"]]
- },
- {
- "species": "Torterra",
- "item": "Soft Sand",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Rock Polish"], ["Wood Hammer"], ["Earthquake"], ["Stone Edge"]]
- }
- ]
- },
- "haunter": {
- "flags": {},
- "sets": [
- {
- "species": "Haunter",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Destiny Bond"], ["Trick"]]
- },
- {
- "species": "Haunter",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Taunt"], ["Destiny Bond", "Will-O-Wisp"]]
- },
- {
- "species": "Haunter",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Substitute"], ["Pain Split"]]
- }
- ]
- },
- "prinplup": {
- "flags": {},
- "sets": [
- {
- "species": "Prinplup",
- "item": "Eviolite",
- "ability": "Torrent",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Defog"], ["Scald"], ["Stealth Rock"], ["Toxic"]]
- }
- ]
- },
- "tangela": {
- "flags": {},
- "sets": [
- {
- "species": "Tangela",
- "item": "Eviolite",
- "ability": "Regenerator",
- "evs": {"hp": 236, "atk": 0, "def": 48, "spa": 224, "spd": 0, "spe": 0},
- "nature": "Modest",
- "moves": [["Leaf Storm"], ["Giga Drain", "Ancient Power"], ["Sleep Powder"], ["Hidden Power Fire"]]
- },
- {
- "species": "Tangela",
- "item": "Eviolite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"], ["Leech Seed"]]
- }
- ]
- },
- "pelipper": {
- "flags": {},
- "sets": [
- {
- "species": "Pelipper",
- "item": "Leftovers",
- "ability": "Keen Eye",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
- "nature": "Bold",
- "moves": [["Defog"], ["Scald"], ["Roost"], ["U-turn", "Hurricane"]]
- }
- ]
- },
- "piloswine": {
- "flags": {},
- "sets": [
- {
- "species": "Piloswine",
- "item": "Eviolite",
- "ability": "Thick Fat",
- "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Stealth Rock"], ["Icicle Crash"], ["Ice Shard"]]
- }
- ]
- },
- "poliwrath": {
- "flags": {},
- "sets": [
- {
- "species": "Poliwrath",
- "item": "Choice Specs",
- "ability": "Water Absorb",
- "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
- },
- {
- "species": "Poliwrath",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 96, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 160},
- "nature": "Modest",
- "moves": [["Scald"], ["Focus Blast"], ["Ice Beam"], ["Vacuum Wave"]]
- }
- ]
- },
- "shiftry": {
- "flags": {},
- "sets": [
- {
- "species": "Shiftry",
- "item": "Life Orb",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Lonely",
- "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Explosion"]]
- },
- {
- "species": "Shiftry",
- "item": "Life Orb",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Lonely",
- "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Defog"]]
- },
- {
- "species": "Shiftry",
- "item": "Black Glasses",
- "ability": "Chlorophyll",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Knock Off"], ["Seed Bomb"], ["Sucker Punch"]]
- }
- ]
- },
- "charizard": {
- "flags": {},
- "sets": [
- {
- "species": "Charizard",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Air Slash"], ["Focus Blast"], ["Roost"]]
- },
- {
- "species": "Charizard",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Fire Blast"], ["Air Slash"], ["Hidden Power Grass"], ["Roost"]]
- },
- {
- "species": "Charizard",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Fire Blast"], ["Air Slash"], ["Earthquake"], ["Roost"]]
- },
- {
- "species": "Charizard",
- "ability": "Blaze",
- "evs": {"hp": 248, "atk": 8, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Acrobatics"], ["Roost"], ["Will-O-Wisp"]]
- }
- ]
- },
- "floatzel": {
- "flags": {},
- "sets": [
- {
- "species": "Floatzel",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Focus Blast"], ["Taunt"]]
- }
- ]
- },
- "abomasnow": {
- "flags": {},
- "sets": [
- {
- "species": "Abomasnow",
- "item": "Life Orb",
- "ability": "Snow Warning",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Blizzard"], ["Giga Drain"], ["Earthquake"], ["Ice Shard"]]
- },
- {
- "species": "Abomasnow",
- "item": "Life Orb",
- "ability": "Snow Warning",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Ice Shard"], ["Seed Bomb"], ["Earthquake"]]
- }
- ]
- },
- "hitmonchan": {
- "flags": {},
- "sets": [
- {
- "species": "Hitmonchan",
- "item": "Life Orb",
- "ability": "Iron Fist",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Drain Punch", "Close Combat"], ["Mach Punch"], ["Ice Punch", "Stone Edge"], ["Rapid Spin"]]
- }
- ]
- },
- "skuntank": {
- "flags": {},
- "sets": [
- {
- "species": "Skuntank",
- "item": "Lum Berry",
- "ability": "Aftermath",
- "evs": {"hp": 0, "atk": 232, "def": 0, "spa": 0, "spd": 132, "spe": 144},
- "nature": "Adamant",
- "moves": [["Sucker Punch"], ["Pursuit"], ["Poison Jab"], ["Taunt"]]
- },
- {
- "species": "Skuntank",
- "item": "Expert Belt",
- "ability": "Aftermath",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Dark Pulse"], ["Fire Blast"], ["Hidden Power Grass"], ["Defog"]]
- }
- ]
- },
- "omastar": {
- "flags": {},
- "sets": [
- {
- "species": "Omastar",
- "item": "White Herb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]]
- },
- {
- "species": "Omastar",
- "item": "Leftovers",
- "ability": "Shell Armor",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Icy Wind"]]
- },
- {
- "species": "Omastar",
- "item": "Leftovers",
- "ability": "Shell Armor",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Spikes"], ["Stealth Rock"], ["Scald"], ["Hidden Power Electric"]]
- },
- {
- "species": "Omastar",
- "item": "Focus Sash",
- "ability": "Weak Armor",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Ice Beam"]]
- }
- ]
- },
- "pinsir": {
- "flags": {},
- "sets": [
- {
- "species": "Pinsir",
- "item": "Life Orb",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["X-Scissor"], ["Earthquake"], ["Stone Edge"]]
- },
- {
- "species": "Pinsir",
- "item": "Choice Band",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["X-Scissor"], ["Earthquake"], ["Stone Edge"], ["Close Combat"]]
- },
- {
- "species": "Pinsir",
- "item": "Focus Sash",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["X-Scissor"], ["Rock Tomb"], ["Earthquake"]]
- }
- ]
- },
- "grumpig": {
- "flags": {},
- "sets": [
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Calm Mind"], ["Psyshock"], ["Focus Blast"], ["Signal Beam"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 160, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic", "Psyshock"], ["Focus Blast"], ["Taunt"], ["Thunder Wave", "Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Psychic"], ["Heal Bell"], ["Thunder Wave"], ["Whirlwind"]]
- }
- ]
- },
- "sliggoo": {
- "flags": {},
- "sets": [
- {
- "species": "Sliggoo",
- "item": "Eviolite",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 0, "def": 168, "spa": 0, "spd": 88, "spe": 0},
- "nature": "Careful",
- "moves": [["Curse"], ["Outrage"], ["Rest"], ["Sleep Talk"]]
- },
- {
- "species": "Sliggoo",
- "item": "Eviolite",
- "ability": "Sap Sipper",
- "evs": {"hp": 92, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 164},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Muddy Water"], ["Thunderbolt"]]
- }
- ]
- },
- "camerupt": {
- "flags": {},
- "sets": [
- {
- "species": "Camerupt",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
- "nature": "Sassy",
- "moves": [["Stealth Rock"], ["Lava Plume"], ["Earthquake"], ["Toxic"]]
- },
- {
- "species": "Camerupt",
- "item": "Choice Specs",
- "ability": "Solid Rock",
- "evs": {"hp": 140, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 116},
- "nature": "Modest",
- "moves": [["Fire Blast"], ["Earth Power"], ["Lava Plume"], ["Hidden Power Electric"]]
- }
- ]
- },
- "ninetales": {
- "flags": {},
- "sets": [
- {
- "species": "Ninetales",
- "item": "Life Orb",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Fire Blast"], ["Psyshock"], ["Energy Ball"]]
- }
- ]
- },
- "manectric": {
- "flags": {},
- "sets": [
- {
- "species": "Manectric",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Grass"], ["Overheat"]]
- }
- ]
- },
- "roselia": {
- "flags": {},
- "sets": [
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Spikes"], ["Giga Drain"], ["Synthesis"], ["Sludge Bomb"]]
- },
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 80, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 176},
- "nature": "Modest",
- "moves": [["Spikes"], ["Leaf Storm"], ["Sludge Bomb"], ["Sleep Powder"]]
- }
- ]
- },
- "misdreavus": {
- "flags": {},
- "sets": [
- {
- "species": "Misdreavus",
- "item": "Eviolite",
- "ability": "Levitate",
- "evs": {"hp": 252, "atk": 0, "def": 240, "spa": 0, "spd": 0, "spe": 16},
- "nature": "Bold",
- "moves": [["Hex"], ["Will-O-Wisp"], ["Taunt"], ["Pain Split"]]
- }
- ]
- },
- "clefairy": {
- "flags": {},
- "sets": [
- {
- "species": "Clefairy",
- "item": "Eviolite",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Healing Wish"]]
- },
- {
- "species": "Clefairy",
- "item": "Eviolite",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Moonblast"], ["Soft-Boiled"], ["Thunder Wave"], ["Stealth Rock"]]
- }
- ]
- }
- },
- "PU": {
- "prinplup": {
- "flags": {},
- "sets": [
- {
- "species": "Prinplup",
- "item": "Eviolite",
- "ability": "Torrent",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Scald"], ["Toxic"], ["Defog"]]
- }
- ]
- },
- "ampharos": {
- "flags": {},
- "sets": [
- {
- "species": "Ampharos",
- "item": "Life Orb",
- "ability": "Static",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Agility"], ["Thunderbolt"], ["Focus Blast"], ["Hidden Power Ice"]]
- }
- ]
- },
- "cryogonal": {
- "flags": {},
- "sets": [
- {
- "species": "Cryogonal",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Freeze-Dry"], ["Hidden Power Fighting"], ["Recover"], ["Rapid Spin"]]
- },
- {
- "species": "Cryogonal",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 156, "spa": 0, "spd": 104, "spe": 0},
- "nature": "Calm",
- "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Recover"], ["Hidden Power Fighting"]]
- }
- ]
- },
- "glalie": {
- "flags": {},
- "sets": [
- {
- "species": "Glalie",
- "item": "Focus Sash",
- "ability": "Inner Focus",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Spikes"], ["Taunt"], ["Ice Beam", "Freeze-Dry"], ["Explosion"]]
- }
- ]
- },
- "camerupt": {
- "flags": {},
- "sets": [
- {
- "species": "Camerupt",
- "item": "Leftovers",
- "ability": "Solid Rock",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
- "nature": "Timid",
- "moves": [["Stealth Rock"], ["Lava Plume", "Fire Blast"], ["Earth Power"], ["Roar", "Toxic"]]
- }
- ]
- },
- "altaria": {
- "flags": {},
- "sets": [
- {
- "species": "Altaria",
- "item": "Leftovers",
- "ability": "Natural Cure",
- "evs": {"hp": 116, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 140},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Dragon Claw"], ["Substitute", "Earthquake"], ["Roost"]]
- },
- {
- "species": "Altaria",
- "item": "Life Orb",
- "ability": "Natural Cure",
- "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Toxic"]]
- },
- {
- "species": "Altaria",
- "item": "Life Orb",
- "ability": "Natural Cure",
- "evs": {"hp": 116, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 140},
- "nature": "Modest",
- "moves": [["Draco Meteor"], ["Roost"], ["Fire Blast"], ["Hidden Power Fighting"]]
- }
- ]
- },
- "audino": {
- "flags": {},
- "sets": [
- {
- "species": "Audino",
- "item": "Leftovers",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Knock Off"], ["Wish"], ["Protect"], ["Encore", "Toxic", "Double-Edge", "Thunder Wave"]]
- }
- ]
- },
- "bouffalant": {
- "flags": {},
- "sets": [
- {
- "species": "Bouffalant",
- "item": "Leftovers",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Adamant",
- "moves": [["Substitute"], ["Swords Dance"], ["Return"], ["Earthquake"]],
- "happiness": 255
- },
- {
- "species": "Bouffalant",
- "item": "Assault Vest",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Adamant",
- "moves": [["Return"], ["Earthquake"], ["Megahorn"], ["Pursuit", "Head Charge"]],
- "happiness": 255
- },
- {
- "species": "Bouffalant",
- "item": "Choice Band",
- "ability": "Sap Sipper",
- "evs": {"hp": 252, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Adamant",
- "moves": [["Head Charge"], ["Earthquake"], ["Megahorn"], ["Pursuit"]]
- }
- ]
- },
- "gorebyss": {
- "flags": {},
- "sets": [
- {
- "species": "Gorebyss",
- "item": "White Herb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]]
- }
- ]
- },
- "pawniard": {
- "flags": {},
- "sets": [
- {
- "species": "Pawniard",
- "item": "Eviolite",
- "ability": "Defiant",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Swords Dance"]]
- }
- ]
- },
- "gothitelle": {
- "flags": {},
- "sets": [
- {
- "species": "Gothitelle",
- "item": "Leftovers",
- "ability": "Competitive",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Mean Look"], ["Rest"], ["Psychic"]]
- }
- ]
- },
- "roselia": {
- "flags": {},
- "sets": [
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
- "nature": "Calm",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Spikes"]]
- },
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 252, "atk": 0, "def": 128, "spa": 0, "spd": 128, "spe": 0},
- "nature": "Calm",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Toxic Spikes"]]
- },
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Sleep Powder"]]
- },
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Spikes"]]
- },
- {
- "species": "Roselia",
- "item": "Eviolite",
- "ability": "Natural Cure",
- "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
- "nature": "Modest",
- "moves": [["Giga Drain"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Toxic Spikes"]]
- }
- ]
- },
- "floatzel": {
- "flags": {},
- "sets": [
- {
- "species": "Floatzel",
- "item": "Choice Specs",
- "ability": "Water Veil",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]]
- },
- {
- "species": "Floatzel",
- "item": "Choice Band",
- "ability": "Water Veil",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Waterfall"], ["Ice Punch"], ["Return"], ["Aqua Jet"]],
- "happiness": 255
- },
- {
- "species": "Floatzel",
- "item": "Life Orb",
- "ability": "Water Veil",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Ice Punch"], ["Hidden Power Electric"]]
- },
- {
- "species": "Floatzel",
- "item": "Choice Scarf",
- "ability": "Water Veil",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Surf", "Switcheroo"]]
- }
- ]
- },
- "stoutland": {
- "flags": {},
- "sets": [
- {
- "species": "Stoutland",
- "item": "Choice Band",
- "ability": "Scrappy",
- "evs": {"hp": 4, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Return"], ["Superpower"], ["Facade"], ["Pursuit", "Crunch"]],
- "happiness": 255
- }
- ]
- },
- "dodrio": {
- "flags": {},
- "sets": [
- {
- "species": "Dodrio",
- "item": "Choice Band",
- "ability": "Early Bird",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Quick Attack", "Pursuit"]],
- "happiness": 255
- },
- {
- "species": "Dodrio",
- "item": "Choice Scarf",
- "ability": "Early Bird",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Return"], ["Knock Off"], ["Pursuit"]],
- "happiness": 255
- }
- ]
- },
- "zebstrika": {
- "flags": {},
- "sets": [
- {
- "species": "Zebstrika",
- "item": "Life Orb",
- "ability": "Sap Sipper",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]]
- },
- {
- "species": "Zebstrika",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat"], ["Hidden Power Ice"]]
- }
- ]
- },
- "jumpluff": {
- "flags": {},
- "sets": [
- {
- "species": "Jumpluff",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Acrobatics"], ["Sleep Powder"], ["U-turn", "Seed Bomb"], ["Memento"]]
- },
- {
- "species": "Jumpluff",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Acrobatics"], ["Sleep Powder"], ["Seed Bomb"], ["Swords Dance"]]
- }
- ]
- },
- "grumpig": {
- "flags": {},
- "sets": [
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Colbur Berry",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Shadow Ball"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Taunt"], ["Thunder Wave"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Thunder Wave"], ["Shadow Ball"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Toxic"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Thunder Wave"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 160, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 96},
- "nature": "Modest",
- "moves": [["Psychic"], ["Focus Blast"], ["Calm Mind"], ["Shadow Ball", "Taunt"]]
- },
- {
- "species": "Grumpig",
- "item": "Leftovers",
- "ability": "Thick Fat",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 4, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Psychic"], ["Thunder Wave", "Toxic"], ["Focus Blast", "Whirlwind"], ["Protect"]]
- }
- ]
- },
- "stunfisk": {
- "flags": {},
- "sets": [
- {
- "species": "Stunfisk",
- "item": "Leftovers",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]]
- },
- {
- "species": "Stunfisk",
- "item": "Leftovers",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
- },
- {
- "species": "Stunfisk",
- "item": "Passho Berry",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Toxic"]]
- },
- {
- "species": "Stunfisk",
- "item": "Passho Berry",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
- },
- {
- "species": "Stunfisk",
- "item": "Leftovers",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Protect"]]
- },
- {
- "species": "Stunfisk",
- "item": "Leftovers",
- "ability": "Static",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Bold",
- "moves": [["Stealth Rock"], ["Discharge"], ["Earth Power"], ["Hidden Power Bug"]]
- }
- ]
- },
- "rapidash": {
- "flags": {},
- "sets": [
- {
- "species": "Rapidash",
- "item": "Leftovers",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]]
- },
- {
- "species": "Rapidash",
- "item": "Charcoal",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Flare Blitz"], ["Wild Charge"], ["Will-O-Wisp"], ["Morning Sun"]]
- }
- ]
- },
- "tangela": {
- "flags": {},
- "sets": [
- {
- "species": "Tangela",
- "item": "Eviolite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Bold",
- "moves": [["Giga Drain"], ["Synthesis"], ["Hidden Power Fire"], ["Sleep Powder", "Knock Off"]]
- },
- {
- "species": "Tangela",
- "item": "Eviolite",
- "ability": "Regenerator",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
- "nature": "Modest",
- "moves": [["Leaf Storm"], ["Giga Drain"], ["Hidden Power Fire"], ["Sleep Powder"]]
- }
- ]
- },
- "simipour": {
- "flags": {},
- "sets": [
- {
- "species": "Simipour",
- "item": "Life Orb",
- "ability": "Torrent",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Knock Off", "Low Kick", "Nasty Plot"]]
- },
- {
- "species": "Simipour",
- "item": "Life Orb",
- "ability": "Torrent",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Knock Off", "Low Kick", "Nasty Plot"]]
- },
- {
- "species": "Simipour",
- "item": "Choice Scarf",
- "ability": "Torrent",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Hasty",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Grass Knot"], ["Superpower", "Knock Off"]]
- },
- {
- "species": "Simipour",
- "item": "Salac Berry",
- "ability": "Torrent",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Hydro Pump"], ["Ice Beam"], ["Substitute"], ["Nasty Plot"]]
- }
- ]
- },
- "kadabra": {
- "flags": {},
- "sets": [
- {
- "species": "Kadabra",
- "item": "Focus Sash",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball", "Signal Beam"], ["Thunder Wave"], ["Encore"]]
- },
- {
- "species": "Kadabra",
- "item": "Focus Sash",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Hidden Power Fighting"], ["Thunder Wave"], ["Encore"]]
- },
- {
- "species": "Kadabra",
- "item": "Focus Sash",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Shadow Ball"], ["Thunder Wave"], ["Encore"]]
- },
- {
- "species": "Kadabra",
- "item": "Life Orb",
- "ability": "Magic Guard",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Psychic"], ["Hidden Power Fighting"], ["Shadow Ball"], ["Substitute", "Encore"]]
- }
- ]
- },
- "raichu": {
- "flags": {},
- "sets": [
- {
- "species": "Raichu",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]]
- },
- {
- "species": "Raichu",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Signal Beam"]]
- },
- {
- "species": "Raichu",
- "item": "Life Orb",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Focus Blast"], ["Hidden Power Ice"]]
- },
- {
- "species": "Raichu",
- "item": "Life Orb",
- "ability": "Static",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam", "Focus Blast"], ["Surf"]]
- },
- {
- "species": "Raichu",
- "item": "Choice Scarf",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 30, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Focus Blast"]]
- },
- {
- "species": "Raichu",
- "item": "Choice Scarf",
- "ability": "Lightning Rod",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"], ["Focus Blast"]]
- }
- ]
- },
- "regice": {
- "flags": {},
- "sets": [
- {
- "species": "Regice",
- "item": "Life Orb",
- "ability": "Clear Body",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Ice Beam"], ["Focus Blast"], ["Thunderbolt"], ["Rock Polish"]]
- },
- {
- "species": "Regice",
- "item": "Leftovers",
- "ability": "Clear Body",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Thunder Wave"], ["Ice Beam"], ["Thunderbolt"], ["Focus Blast"]]
- }
- ]
- },
- "relicanth": {
- "flags": {},
- "sets": [
- {
- "species": "Relicanth",
- "item": "Stone Plate",
- "ability": "Rock Head",
- "evs": {"hp": 104, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 148},
- "nature": "Adamant",
- "moves": [["Rock Polish"], ["Head Smash"], ["Waterfall"], ["Earthquake"]]
- },
- {
- "species": "Relicanth",
- "item": "Leftovers",
- "ability": "Rock Head",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Toxic", "Yawn"]]
- },
- {
- "species": "Relicanth",
- "item": "Leftovers",
- "ability": "Rock Head",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Head Smash"], ["Stealth Rock"], ["Earthquake", "Waterfall"], ["Protect"]]
- },
- {
- "species": "Relicanth",
- "item": "Leftovers",
- "ability": "Rock Head",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Head Smash"], ["Stealth Rock"], ["Protect"], ["Toxic", "Yawn"]]
- },
- {
- "species": "Relicanth",
- "item": "Stone Plate",
- "ability": "Rock Head",
- "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88},
- "nature": "Adamant",
- "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]]
- },
- {
- "species": "Relicanth",
- "item": "Leftovers",
- "ability": "Rock Head",
- "evs": {"hp": 168, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 88},
- "nature": "Adamant",
- "moves": [["Head Smash"], ["Stealth Rock"], ["Waterfall"], ["Toxic", "Earthquake"]]
- }
- ]
- },
- "rotomfrost": {
- "flags": {},
- "sets": [
- {
- "species": "Rotom-Frost",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Trick", "Will-O-Wisp"]]
- },
- {
- "species": "Rotom-Frost",
- "item": "Choice Scarf",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Blizzard"], ["Hidden Power Ice"]]
- },
- {
- "species": "Rotom-Frost",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Will-O-Wisp", "Volt Switch"]]
- },
- {
- "species": "Rotom-Frost",
- "item": "Life Orb",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Thunderbolt"], ["Blizzard"], ["Pain Split", "Will-O-Wisp"]]
- }
- ]
- },
- "simisage": {
- "flags": {},
- "sets": [
- {
- "species": "Simisage",
- "item": "Life Orb",
- "ability": "Overgrow",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Naive",
- "moves": [["Leaf Storm"], ["Superpower"], ["Gunk Shot"], ["Knock Off"]]
- }
- ]
- },
- "chatot": {
- "flags": {},
- "sets": [
- {
- "species": "Chatot",
- "item": "Choice Scarf",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
- },
- {
- "species": "Chatot",
- "item": "Choice Scarf",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Timid",
- "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
- },
- {
- "species": "Chatot",
- "item": "Choice Specs",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Boomburst"], ["Heat Wave"], ["Hidden Power Fighting"], ["U-turn"]]
- }
- ]
- },
- "mrmime": {
- "flags": {},
- "sets": [
- {
- "species": "Mr. Mime",
- "item": "Choice Scarf",
- "ability": "Soundproof",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Healing Wish"]]
- },
- {
- "species": "Mr. Mime",
- "item": "Choice Specs",
- "ability": "Soundproof",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball"]]
- },
- {
- "species": "Mr. Mime",
- "item": "Life Orb",
- "ability": "Soundproof",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Psychic"], ["Dazzling Gleam"], ["Focus Blast"], ["Shadow Ball", "Healing Wish"]]
- }
- ]
- },
- "mightyena": {
- "flags": {},
- "sets": [
- {
- "species": "Mightyena",
- "item": "Life Orb",
- "ability": "Moxie",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Adamant",
- "moves": [["Crunch"], ["Sucker Punch"], ["Play Rough"], ["Iron Tail"]]
- }
- ]
- },
- "fraxure": {
- "flags": {},
- "sets": [
- {
- "species": "Fraxure",
- "item": "Eviolite",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Dragon Dance"], ["Outrage"], ["Low Kick"], ["Dual Chop", "Taunt", "Poison Jab"]]
- }
- ]
- },
- "misdreavus": {
- "flags": {},
- "sets": [
- {
- "species": "Misdreavus",
- "item": "Eviolite",
- "ability": "Levitate",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Nasty Plot"], ["Taunt", "Will-O-Wisp"], ["Shadow Ball"], ["Thunderbolt"]]
- },
- {
- "species": "Misdreavus",
- "item": "Eviolite",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 124, "spa": 0, "spd": 0, "spe": 136},
- "nature": "Timid",
- "moves": [["Will-O-Wisp"], ["Taunt"], ["Foul Play"], ["Pain Split", "Thunder Wave"]]
- }
- ]
- },
- "probopass": {
- "flags": {},
- "sets": [
- {
- "species": "Probopass",
- "item": "Leftovers",
- "ability": "Magnet Pull",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
- "nature": "Modest",
- "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]]
- },
- {
- "species": "Probopass",
- "item": "Passho Berry",
- "ability": "Sturdy",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 0},
- "nature": "Modest",
- "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Thunder Wave"]]
- },
- {
- "species": "Probopass",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Calm",
- "moves": [["Stealth Rock"], ["Flash Cannon"], ["Volt Switch"], ["Earth Power", "Toxic", "Thunder Wave"]]
- }
- ]
- },
- "sawsbuck": {
- "flags": {},
- "sets": [
- {
- "species": "Sawsbuck",
- "item": "Choice Scarf",
- "ability": "Sap Sipper",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Megahorn"]]
- },
- {
- "species": "Sawsbuck",
- "item": "Choice Scarf",
- "ability": "Sap Sipper",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Double-Edge"], ["Horn Leech"], ["Jump Kick"], ["Toxic"]]
- },
- {
- "species": "Sawsbuck",
- "item": "Salac Berry",
- "ability": "Sap Sipper",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Return"], ["Horn Leech"], ["Substitute"], ["Swords Dance"]],
- "happiness": 255
- }
- ]
- },
- "arbok": {
- "flags": {},
- "sets": [
- {
- "species": "Arbok",
- "item": "Black Sludge",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]]
- },
- {
- "species": "Arbok",
- "item": "Shuca Berry",
- "ability": "Intimidate",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Coil"], ["Gunk Shot"], ["Sucker Punch"], ["Earthquake"]]
- },
- {
- "species": "Arbok",
- "item": "Black Sludge",
- "ability": "Shed Skin",
- "evs": {"hp": 252, "atk": 0, "def": 0, "spa": 0, "spd": 236, "spe": 20},
- "nature": "Careful",
- "moves": [["Coil"], ["Gunk Shot"], ["Rest"], ["Earthquake"]]
- }
- ]
- },
- "duosion": {
- "flags": {},
- "sets": [
- {
- "species": "Duosion",
- "item": "Eviolite",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 0, "spd": 4, "spe": 0},
- "nature": "Impish",
- "moves": [["Calm Mind"], ["Recover"], ["Psyshock", "Psychic"], ["Acid Armor", "Signal Beam"]]
- }
- ]
- },
- "ninetales": {
- "flags": {},
- "sets": [
- {
- "species": "Ninetales",
- "item": "Leftovers",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Nasty Plot"], ["Fire Blast"], ["Energy Ball"]]
- },
- {
- "species": "Ninetales",
- "item": "Passho Berry",
- "ability": "Flash Fire",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Fire Blast"], ["Energy Ball"], ["Hidden Power Ground"]]
- }
- ]
- },
- "articuno": {
- "flags": {},
- "sets": [
- {
- "species": "Articuno",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
- "nature": "Modest",
- "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]]
- },
- {
- "species": "Articuno",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 36, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 220},
- "nature": "Modest",
- "moves": [["Agility"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Hidden Power Fighting"]]
- },
- {
- "species": "Articuno",
- "item": "Life Orb",
- "ability": "Pressure",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Substitute"], ["Ice Beam", "Freeze-Dry"], ["Hurricane"], ["Roost"]]
- }
- ]
- },
- "clefairy": {
- "flags": {},
- "sets": [
- {
- "species": "Clefairy",
- "item": "Eviolite",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Healing Wish"], ["Stealth Rock"]]
- },
- {
- "species": "Clefairy",
- "item": "Eviolite",
- "ability": "Magic Guard",
- "evs": {"hp": 252, "atk": 0, "def": 252, "spa": 4, "spd": 0, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Bold",
- "moves": [["Calm Mind"], ["Soft-Boiled"], ["Moonblast"], ["Thunder Wave", "Knock Off", "Encore"]]
- }
- ]
- },
- "golduck": {
- "flags": {},
- "sets": [
- {
- "species": "Golduck",
- "item": "Life Orb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Modest",
- "moves": [["Hydro Pump"], ["Rain Dance"], ["Ice Beam"], ["Psyshock", "Focus Blast"]]
- }
- ]
- },
- "golem": {
- "flags": {},
- "sets": [
- {
- "species": "Golem",
- "item": "Custap Berry",
- "ability": "Sturdy",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Explosion"], ["Stealth Rock"], ["Stone Edge"]]
- },
- {
- "species": "Golem",
- "item": "Weakness Policy",
- "ability": "Sturdy",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Adamant",
- "moves": [["Earthquake"], ["Sucker Punch"], ["Stealth Rock"], ["Stone Edge"]]
- },
- {
- "species": "Golem",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 56, "def": 0, "spa": 0, "spd": 204, "spe": 0},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Stone Edge"], ["Earthquake"], ["Protect"]]
- }
- ]
- },
- "gourgeistsuper": {
- "flags": {},
- "sets": [
- {
- "species": "Gourgeist-Super",
- "item": "Leftovers",
- "ability": "Frisk",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Foul Play"], ["Will-O-Wisp"], ["Synthesis"], ["Seed Bomb"]]
- }
- ]
- },
- "lickilicky": {
- "flags": {},
- "sets": [
- {
- "species": "Lickilicky",
- "item": "Leftovers",
- "ability": "Oblivious",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Wish"], ["Protect"], ["Body Slam", "Knock Off"], ["Dragon Tail", "Heal Bell"]]
- }
- ]
- },
- "monferno": {
- "flags": {},
- "sets": [
- {
- "species": "Monferno",
- "item": "Eviolite",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
- },
- {
- "species": "Monferno",
- "item": "Life Orb",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Swords Dance"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
- },
- {
- "species": "Monferno",
- "item": "Eviolite",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Close Combat"]]
- },
- {
- "species": "Monferno",
- "item": "Eviolite",
- "ability": "Iron Fist",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["U-turn", "Thunder Punch"], ["Mach Punch"], ["Flare Blitz"], ["Stealth Rock"]]
- }
- ]
- },
- "politoed": {
- "flags": {},
- "sets": [
- {
- "species": "Politoed",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 252, "spd": 8, "spe": 0},
- "nature": "Modest",
- "moves": [["Scald"], ["Ice Beam"], ["Hidden Power Electric"], ["Encore", "Toxic"]]
- },
- {
- "species": "Politoed",
- "item": "Leftovers",
- "ability": "Water Absorb",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 252, "spe": 0},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Calm",
- "moves": [["Perish Song"], ["Scald"], ["Toxic"], ["Protect"]]
- }
- ]
- },
- "seaking": {
- "flags": {},
- "sets": [
- {
- "species": "Seaking",
- "item": "Leftovers",
- "ability": "Lightning Rod",
- "evs": {"hp": 104, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 152},
- "nature": "Adamant",
- "moves": [["Waterfall"], ["Knock Off"], ["Megahorn"], ["Haze", "Protect"]]
- }
- ]
- },
- "simisear": {
- "flags": {},
- "sets": [
- {
- "species": "Simisear",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Naive",
- "moves": [["Knock Off"], ["Rock Slide"], ["Superpower", "Low Kick"], ["Overheat", "Fire Blast"]]
- },
- {
- "species": "Simisear",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Naive",
- "moves": [["Fire Blast"], ["Grass Knot"], ["Low Kick"], ["Knock Off"]]
- },
- {
- "species": "Simisear",
- "item": "Life Orb",
- "ability": "Blaze",
- "evs": {"hp": 0, "atk": 0, "def": 4, "spa": 252, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Nasty Plot"], ["Focus Blast"], ["Grass Knot"], ["Fire Blast"]]
- },
- {
- "species": "Simisear",
- "item": "Salac Berry",
- "ability": "Blaze",
- "evs": {"hp": 4, "atk": 0, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "ivs": {"hp": 31, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Substitute"], ["Nasty Plot"], ["Focus Blast"], ["Fire Blast"]]
- }
- ]
- },
- "swanna": {
- "flags": {},
- "sets": [
- {
- "species": "Swanna",
- "item": "Life Orb",
- "ability": "Keen Eye",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "ivs": {"hp": 29, "atk": 0, "def": 31, "spa": 31, "spd": 31, "spe": 31},
- "nature": "Timid",
- "moves": [["Defog"], ["Roost"], ["Scald"], ["Hurricane"]]
- }
- ]
- },
- "vullaby": {
- "flags": {},
- "sets": [
- {
- "species": "Vullaby",
- "item": "Eviolite",
- "ability": "Overcoat",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]]
- },
- {
- "species": "Vullaby",
- "item": "Eviolite",
- "ability": "Overcoat",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Defog"], ["Roost"], ["U-turn", "Whirlwind"], ["Foul Play"]]
- }
- ]
- },
- "basculin": {
- "flags": {},
- "sets": [
- {
- "species": "Basculin",
- "item": "Choice Band",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Waterfall", "Aqua Tail"], ["Aqua Jet"], ["Crunch", "Zen Headbutt"], ["Double-Edge"]]
- },
- {
- "species": "Basculin",
- "item": "Life Orb",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "ivs": {"hp": 29, "atk": 31, "def": 31, "spa": 30, "spd": 31, "spe": 31},
- "nature": "Naive",
- "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Superpower"]]
- },
- {
- "species": "Basculin",
- "item": "Life Orb",
- "ability": "Adaptability",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Waterfall"], ["Aqua Jet"], ["Ice Beam"], ["Hidden Power Electric"]]
- }
- ]
- },
- "gabite": {
- "flags": {},
- "sets": [
- {
- "species": "Gabite",
- "item": "Eviolite",
- "ability": "Rough Skin",
- "evs": {"hp": 248, "atk": 8, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]]
- },
- {
- "species": "Gabite",
- "item": "Eviolite",
- "ability": "Rough Skin",
- "evs": {"hp": 248, "atk": 220, "def": 0, "spa": 0, "spd": 0, "spe": 40},
- "nature": "Adamant",
- "moves": [["Stealth Rock"], ["Toxic", "Roar"], ["Dragon Claw"], ["Earthquake"]]
- },
- {
- "species": "Gabite",
- "item": "Eviolite",
- "ability": "Rough Skin",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Earthquake"], ["Outrage"], ["Stealth Rock"], ["Stone Edge", "Toxic", "Roar"]]
- }
- ]
- },
- "gourgeistsmall": {
- "flags": {},
- "sets": [
- {
- "species": "Gourgeist-Small",
- "item": "Leftovers",
- "ability": "Frisk",
- "evs": {"hp": 152, "atk": 0, "def": 104, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Leech Seed"], ["Substitute"], ["Foul Play", "Seed Bomb"], ["Will-O-Wisp", "Disable"]]
- },
- {
- "species": "Gourgeist-Small",
- "item": "Choice Scarf",
- "ability": "Frisk",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Seed Bomb"], ["Trick"], ["Rock Slide"], ["Explosion", "Destiny Bond"]]
- }
- ]
- },
- "klang": {
- "flags": {},
- "sets": [
- {
- "species": "Klang",
- "item": "Eviolite",
- "ability": "Clear Body",
- "evs": {"hp": 252, "atk": 0, "def": 156, "spa": 0, "spd": 100, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Sleep Talk"], ["Shift Gear"], ["Gear Grind"]]
- }
- ]
- },
- "leafeon": {
- "flags": {},
- "sets": [
- {
- "species": "Leafeon",
- "item": "Choice Band",
- "ability": "Leaf Guard",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Leaf Blade"], ["Bullet Seed"], ["Knock Off"], ["Double-Edge", "Quick Attack"]]
- },
- {
- "species": "Leafeon",
- "item": "Yache Berry",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]]
- },
- {
- "species": "Leafeon",
- "item": "Occa Berry",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Synthesis", "Return"]]
- },
- {
- "species": "Leafeon",
- "item": "Choice Scarf",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Double-Edge", "Return"], ["Leaf Blade"], ["Knock Off"], ["Bullet Seed", "X-Scissor"]]
- }
- ]
- },
- "leavanny": {
- "flags": {},
- "sets": [
- {
- "species": "Leavanny",
- "item": "Focus Sash",
- "ability": "Chlorophyll",
- "evs": {"hp": 0, "atk": 4, "def": 0, "spa": 252, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Leaf Storm"], ["Electroweb", "Magic Coat"], ["Sticky Web"], ["Knock Off"]]
- }
- ]
- },
- "metang": {
- "flags": {},
- "sets": [
- {
- "species": "Metang",
- "item": "Eviolite",
- "ability": "Clear Body",
- "evs": {"hp": 248, "atk": 252, "def": 0, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Adamant",
- "moves": [["Meteor Mash"], ["Stealth Rock"], ["Pursuit", "Bullet Punch"], ["Earthquake", "Zen Headbutt"]]
- },
- {
- "species": "Metang",
- "item": "Eviolite",
- "ability": "Clear Body",
- "evs": {"hp": 248, "atk": 0, "def": 0, "spa": 0, "spd": 252, "spe": 8},
- "nature": "Careful",
- "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Pursuit", "Bullet Punch", "Earthquake", "Zen Headbutt"]]
- },
- {
- "species": "Metang",
- "item": "Eviolite",
- "ability": "Clear Body",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 0, "spe": 8},
- "nature": "Impish",
- "moves": [["Meteor Mash"], ["Stealth Rock"], ["Toxic"], ["Earthquake", "Zen Headbutt", "Pursuit", "Bullet Punch"]]
- }
- ]
- },
- "ninjask": {
- "flags": {},
- "sets": [
- {
- "species": "Ninjask",
- "item": "Choice Band",
- "ability": "Infiltrator",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["U-turn"], ["X-Scissor"], ["Aerial Ace"], ["Toxic"]]
- }
- ]
- },
- "purugly": {
- "flags": {},
- "sets": [
- {
- "species": "Purugly",
- "item": "Life Orb",
- "ability": "Defiant",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Return"], ["Fake Out"], ["Knock Off"], ["U-turn", "Sucker Punch", "Wake-Up Slap"]],
- "happiness": 255
- }
- ]
- },
- "solrock": {
- "flags": {},
- "sets": [
- {
- "species": "Solrock",
- "item": "Leftovers",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Zen Headbutt", "Stone Edge"], ["Morning Sun"]]
- },
- {
- "species": "Solrock",
- "item": "Colbur Berry",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Stone Edge"], ["Morning Sun"]]
- }
- ]
- },
- "venipede": {
- "flags": {},
- "sets": [
- {
- "species": "Venipede",
- "item": "Focus Sash",
- "ability": "Speed Boost",
- "evs": {"hp": 252, "atk": 0, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Timid",
- "moves": [["Protect"], ["Spikes"], ["Toxic Spikes"], ["Endeavor"]]
- }
- ]
- },
- "armaldo": {
- "flags": {},
- "sets": [
- {
- "species": "Armaldo",
- "item": "Leftovers",
- "ability": "Battle Armor",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Toxic"]]
- },
- {
- "species": "Armaldo",
- "item": "Leftovers",
- "ability": "Battle Armor",
- "evs": {"hp": 248, "atk": 0, "def": 252, "spa": 0, "spd": 8, "spe": 0},
- "nature": "Impish",
- "moves": [["Rapid Spin"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]]
- },
- {
- "species": "Armaldo",
- "item": "Leftovers",
- "ability": "Battle Armor",
- "evs": {"hp": 248, "atk": 252, "def": 8, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Stone Edge"], ["Knock Off"], ["Rapid Spin"], ["Earthquake"]]
- }
- ]
- },
- "dusknoir": {
- "flags": {},
- "sets": [
- {
- "species": "Dusknoir",
- "item": "Choice Band",
- "ability": "Frisk",
- "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Trick"]]
- },
- {
- "species": "Dusknoir",
- "item": "Spell Tag",
- "ability": "Frisk",
- "evs": {"hp": 252, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Adamant",
- "moves": [["Shadow Sneak"], ["Thunder Punch"], ["Earthquake"], ["Will-O-Wisp"]]
- }
- ]
- },
- "huntail": {
- "flags": {},
- "sets": [
- {
- "species": "Huntail",
- "item": "White Herb",
- "ability": "Water Veil",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naughty",
- "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Ice Beam"]]
- },
- {
- "species": "Huntail",
- "item": "White Herb",
- "ability": "Swift Swim",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Shell Smash"], ["Sucker Punch"], ["Waterfall"], ["Double-Edge"]]
- }
- ]
- },
- "murkrow": {
- "flags": {},
- "sets": [
- {
- "species": "Murkrow",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Jolly",
- "moves": [["Brave Bird"], ["Sucker Punch"], ["Pursuit"], ["Thunder Wave"]]
- },
- {
- "species": "Murkrow",
- "item": "Life Orb",
- "ability": "Prankster",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 4, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Brave Bird"], ["Sucker Punch"], ["Hidden Power Fighting"], ["Thunder Wave", "Pursuit"]]
- }
- ]
- },
- "vibrava": {
- "flags": {},
- "sets": [
- {
- "species": "Vibrava",
- "item": "Eviolite",
- "ability": "Levitate",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Earthquake"], ["U-turn", "Toxic"], ["Defog"], ["Roost"]]
- }
- ]
- },
- "zweilous": {
- "flags": {},
- "sets": [
- {
- "species": "Zweilous",
- "item": "Eviolite",
- "ability": "Hustle",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Rest"], ["Sleep Talk"], ["Crunch"], ["Dragon Tail", "Roar"]]
- },
- {
- "species": "Zweilous",
- "item": "Choice Band",
- "ability": "Hustle",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Crunch"], ["Outrage"], ["Superpower"], ["Sleep Talk"]]
- }
- ]
- },
- "avalugg": {
- "flags": {},
- "sets": [
- {
- "species": "Avalugg",
- "item": "Leftovers",
- "ability": "Sturdy",
- "evs": {"hp": 248, "atk": 0, "def": 8, "spa": 0, "spd": 252, "spe": 0},
- "nature": "Careful",
- "moves": [["Recover"], ["Rapid Spin"], ["Avalanche"], ["Roar", "Toxic"]]
- }
- ]
- },
- "electrode": {
- "flags": {},
- "sets": [
- {
- "species": "Electrode",
- "item": "Life Orb",
- "ability": "Soundproof",
- "evs": {"hp": 0, "atk": 0, "def": 0, "spa": 252, "spd": 4, "spe": 252},
- "nature": "Modest",
- "moves": [["Thunderbolt"], ["Volt Switch"], ["Signal Beam"], ["Hidden Power Ice"]]
- }
- ]
- },
- "marowak": {
- "flags": {},
- "sets": [
- {
- "species": "Marowak",
- "item": "Thick Club",
- "ability": "Rock Head",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stealth Rock"]]
- },
- {
- "species": "Marowak",
- "item": "Thick Club",
- "ability": "Rock Head",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bonemerang"], ["Knock Off"], ["Double-Edge"], ["Stone Edge"]]
- },
- {
- "species": "Marowak",
- "item": "Thick Club",
- "ability": "Rock Head",
- "evs": {"hp": 0, "atk": 252, "def": 4, "spa": 0, "spd": 0, "spe": 252},
- "nature": "Adamant",
- "moves": [["Bonemerang"], ["Knock Off"], ["Stone Edge"], ["Stealth Rock"]]
- }
- ]
- },
- "quilladin": {
- "flags": {},
- "sets": [
- {
- "species": "Quilladin",
- "item": "Eviolite",
- "ability": "Bulletproof",
- "evs": {"hp": 252, "atk": 4, "def": 252, "spa": 0, "spd": 0, "spe": 0},
- "nature": "Impish",
- "moves": [["Wood Hammer"], ["Spikes"], ["Synthesis"], ["Roar"]]
- },
- {
- "species": "Quilladin",
- "item": "Eviolite",
- "ability": "Bulletproof",
- "evs": {"hp": 0, "atk": 252, "def": 0, "spa": 0, "spd": 4, "spe": 252},
- "nature": "Jolly",
- "moves": [["Wood Hammer"], ["Taunt"], ["Spikes"], ["Zen Headbutt", "Drain Punch"]]
- }
- ]
- },
- "rampardos": {
- "flags": {},
- "sets": [
- {
- "species": "Rampardos",
- "item": "Focus Sash",
- "ability": "Mold Breaker",
- "evs": {"hp": 0, "atk": 144, "def": 0, "spa": 112, "spd": 0, "spe": 252},
- "nature": "Naive",
- "moves": [["Stealth Rock"], ["Superpower"], ["Head Smash"], ["Surf"]]
- }
- ]
- },
- "drifblim": {
- "flags": {},
- "sets": [
- {
- "species": "Drifblim",
- "item": "Liechi Berry",
- "ability": "Unburden",
- "evs": {"hp": 12, "atk": 244, "def": 0, "spa": 0, "spd": 40, "spe": 212},
- "nature": "Adamant",
- "moves": [["Substitute"], ["Acrobatics"], ["Knock Off"], ["Will-O-Wisp"]]
- }
- ]
- }
- }
-}
diff --git a/data/random-battles/gen6megasrevisited/sets.json b/data/random-battles/gen6megasrevisited/sets.json
deleted file mode 100644
index 10fb1f136a..0000000000
--- a/data/random-battles/gen6megasrevisited/sets.json
+++ /dev/null
@@ -1,6301 +0,0 @@
-{
- "venusaur": {
- "level": 83,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
- "abilities": ["Chlorophyll", "Overgrow"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "gigadrain", "sleeppowder", "sludgebomb", "synthesis"],
- "abilities": ["Chlorophyll", "Overgrow"]
- }
- ]
- },
- "venusaurmega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hiddenpowerground", "leafstorm", "sludgebomb", "synthesis"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["gigadrain", "leechseed", "sleeppowder", "sludgebomb", "substitute"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "gigadrain", "leechseed", "sludgebomb"],
- "abilities": ["Chlorophyll"]
- }
- ]
- },
- "charizard": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hurricane", "earthquake", "fireblast", "roost", "willowisp"],
- "abilities": ["Blaze", "Solar Power"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "hurricane", "fireblast", "roost"],
- "abilities": ["Blaze", "Solar Power"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["acrobatics", "earthquake", "flareblitz", "swordsdance"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "charizardmegax": {
- "level": 74,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragonclaw", "dragondance", "earthquake", "flareblitz", "roost"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "charizardmegay": {
- "level": 74,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hurricane", "fireblast", "roost", "focusblast"],
- "abilities": ["Blaze"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "hurricane", "lavaplume", "roost"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "blastoise": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["icebeam", "rapidspin", "roar", "scald", "toxic"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Staller",
- "movepool": ["haze", "icebeam", "protect", "rapidspin", "scald", "toxic"],
- "abilities": ["Torrent"]
- }
- ]
- },
- "blastoisemega": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["moonblast", "rapidspin", "scald", "taunt"],
- "abilities": ["Rain Dish"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["moonblast", "rapidspin", "hydropump", "hiddenpowerfire"],
- "abilities": ["Rain Dish"]
- }
- ]
- },
- "butterfree": {
- "level": 92,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bugbuzz", "psychic", "quiverdance", "sleeppowder"],
- "abilities": ["Tinted Lens"]
- }
- ]
- },
- "beedrill": {
- "level": 94,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["defog", "knockoff", "poisonjab", "toxicspikes", "uturn", "stealthrock"],
- "abilities": ["Swarm"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["poisonjab", "earthquake", "diamondstorm", "swordsdance"],
- "abilities": ["Swarm"]
- }
- ]
- },
- "beedrillmega": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["diamondstorm", "earthquake", "roost", "uturn"],
- "abilities": ["Swarm"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["diamondstorm", "earthquake", "roost", "uturn", "defog", "stealthrock"],
- "abilities": ["Swarm"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["diamondstorm", "earthquake", "roost", "swordsdance"],
- "abilities": ["Swarm"]
- }
- ]
- },
- "pidgeot": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "defog", "heatwave", "return", "roost", "uturn"],
- "abilities": ["Big Pecks"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["bravebird", "focusblast", "return", "workup"],
- "abilities": ["Keen Eye"]
- }
- ]
- },
- "pidgeotmega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "focusblast", "hurricane", "roost", "uturn", "workup"],
- "abilities": ["Big Pecks"]
- }
- ]
- },
- "raticate": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["crunch", "facade", "flamewheel", "protect", "suckerpunch", "swordsdance", "uturn"],
- "abilities": ["Guts"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "fearow": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
- "abilities": ["Sniper"]
- }
- ]
- },
- "arbok": {
- "level": 90,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["coil", "earthquake", "gunkshot", "rest"],
- "abilities": ["Shed Skin"]
- }
- ]
- },
- "pikachu": {
- "level": 91,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["extremespeed", "grassknot", "hiddenpowerice", "knockoff", "surf", "voltswitch", "volttackle"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "raichu": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["encore", "hiddenpowerice", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch"],
- "abilities": ["Lightning Rod"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "sandslash": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"],
- "abilities": ["Sand Rush"]
- }
- ]
- },
- "nidoqueen": {
- "level": 81,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "nidoking": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "clefable": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"],
- "abilities": ["Magic Guard", "Unaware"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"],
- "abilities": ["Magic Guard", "Unaware"]
- }
- ]
- },
- "ninetales": {
- "level": 83,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["fireblast", "hiddenpowerrock", "nastyplot", "solarbeam"],
- "abilities": ["Drought"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"],
- "abilities": ["Drought"],
- "preferredTypes": ["Grass"]
- }
- ]
- },
- "wigglytuff": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["dazzlinggleam", "fireblast", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish"],
- "abilities": ["Competitive"]
- }
- ]
- },
- "vileplume": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["aromatherapy", "gigadrain", "hiddenpowerground", "sleeppowder", "sludgebomb", "synthesis"],
- "abilities": ["Effect Spore"]
- }
- ]
- },
- "parasect": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["aromatherapy", "knockoff", "seedbomb", "spore", "stunspore", "xscissor"],
- "abilities": ["Dry Skin"],
- "preferredTypes": ["Bug"]
- }
- ]
- },
- "venomoth": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"],
- "abilities": ["Tinted Lens"]
- }
- ]
- },
- "dugtrio": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["earthquake", "honeclaws", "stealthrock", "stoneedge", "suckerpunch"],
- "abilities": ["Arena Trap"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "stoneedge", "suckerpunch"],
- "abilities": ["Arena Trap"]
- }
- ]
- },
- "persian": {
- "level": 91,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"],
- "abilities": ["Limber"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"],
- "abilities": ["Technician"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["hiddenpowerfighting", "hypervoice", "nastyplot", "shadowball"],
- "abilities": ["Technician"]
- }
- ]
- },
- "golduck": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
- "abilities": ["Cloud Nine", "Swift Swim"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
- "abilities": ["Cloud Nine", "Swift Swim"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "primeape": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "uturn"],
- "abilities": ["Defiant"]
- }
- ]
- },
- "arcanine": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "poliwrath": {
- "level": 89,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "icepunch", "raindance", "waterfall"],
- "abilities": ["Swift Swim"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["circlethrow", "rest", "scald", "sleeptalk"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "alakazam": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["counter", "focusblast", "psychic", "psyshock", "shadowball"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "encore", "focusblast", "psychic", "psyshock", "shadowball", "substitute"],
- "abilities": ["Magic Guard"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "alakazammega": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "icebeam"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["substitute", "focusblast", "psychic", "psyshock", "icebeam"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "machamp": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
- "abilities": ["No Guard"],
- "preferredTypes": ["Dark"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
- "abilities": ["No Guard"]
- }
- ]
- },
- "victreebel": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerground", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "suckerpunch"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
- "abilities": ["Chlorophyll"]
- }
- ]
- },
- "tentacruel": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["haze", "knockoff", "rapidspin", "scald", "sludgebomb", "toxicspikes"],
- "abilities": ["Clear Body", "Liquid Ooze"]
- }
- ]
- },
- "golem": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "rapidash": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["drillrun", "flareblitz", "morningsun", "wildcharge", "willowisp"],
- "abilities": ["Flame Body", "Flash Fire"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["drillrun", "flareblitz", "megahorn", "morningsun", "wildcharge"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "slowbro": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["fireblast", "icebeam", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["fireblast", "futuresight", "icebeam", "psyshock", "scald"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "slowbromega": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["futuresight", "fireblast", "scald", "slackoff"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "farfetchd": {
- "level": 100,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bravebird", "knockoff", "leafblade", "return", "swordsdance"],
- "abilities": ["Defiant"]
- }
- ]
- },
- "dodrio": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["bravebird", "doubleedge", "knockoff", "quickattack", "return"],
- "abilities": ["Early Bird"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["bravebird", "knockoff", "return", "roost"],
- "abilities": ["Early Bird"]
- }
- ]
- },
- "dewgong": {
- "level": 94,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "surf", "toxic"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["encore", "icebeam", "surf", "toxic"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "muk": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"],
- "abilities": ["Poison Touch"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "cloyster": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["hydropump", "iciclespear", "rockblast", "shellsmash"],
- "abilities": ["Skill Link"]
- }
- ]
- },
- "gengar": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "shadowball", "sludgewave", "substitute", "trick", "willowisp"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "gengarmega": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "shadowball", "sludgewave", "calmmind"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "hex", "sludgebomb", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "hypno": {
- "level": 96,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
- "abilities": ["Insomnia"]
- },
- {
- "role": "Staller",
- "movepool": ["protect", "seismictoss", "toxic", "wish"],
- "abilities": ["Insomnia"]
- }
- ]
- },
- "kingler": {
- "level": 89,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["agility", "crabhammer", "knockoff", "rockslide", "superpower", "swordsdance", "xscissor"],
- "abilities": ["Hyper Cutter", "Sheer Force"]
- }
- ]
- },
- "electrode": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["foulplay", "hiddenpowerice", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
- "abilities": ["Aftermath", "Static"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Fast Support",
- "movepool": ["hiddenpowerice", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
- "abilities": ["Aftermath", "Static"]
- }
- ]
- },
- "exeggutor": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["gigadrain", "hiddenpowerfire", "leechseed", "psychic", "sleeppowder", "substitute"],
- "abilities": ["Harvest"],
- "preferredTypes": ["Psychic"]
- }
- ]
- },
- "marowak": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance"],
- "abilities": ["Battle Armor", "Rock Head"],
- "preferredTypes": ["Rock"]
- }
- ]
- },
- "hitmonlee": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"],
- "abilities": ["Reckless"],
- "preferredTypes": ["Dark"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["bulkup", "closecombat", "knockoff", "poisonjab", "stoneedge"],
- "abilities": ["Unburden"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "hitmonchan": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "stoneedge"],
- "abilities": ["Iron Fist"]
- }
- ]
- },
- "weezing": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rhydon": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "chansey": {
- "level": 86,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "kangaskhan": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["doubleedge", "drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
- "abilities": ["Scrappy"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["drainpunch", "earthquake", "fakeout", "return", "suckerpunch"],
- "abilities": ["Scrappy"]
- }
- ]
- },
- "kangaskhanmega": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["bodyslam", "milkdrink", "earthquake", "suckerpunch"],
- "abilities": ["Scrappy"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["return", "earthquake", "poweruppunch", "suckerpunch"],
- "abilities": ["Scrappy"]
- }
- ]
- },
- "seaking": {
- "level": 93,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"],
- "abilities": ["Lightning Rod"],
- "preferredTypes": ["Dark"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
- "abilities": ["Swift Swim"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "starmie": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["hydropump", "icebeam", "psyshock", "recover", "thunderbolt"],
- "abilities": ["Analytic", "Natural Cure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["psyshock", "rapidspin", "recover", "scald", "thunderwave", "toxic"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "mrmime": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"],
- "abilities": ["Filter"],
- "preferredTypes": ["Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"],
- "abilities": ["Filter"]
- }
- ]
- },
- "scyther": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"],
- "abilities": ["Technician"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"],
- "abilities": ["Technician"]
- }
- ]
- },
- "jynx": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
- "abilities": ["Dry Skin"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
- "abilities": ["Dry Skin"]
- }
- ]
- },
- "pinsir": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
- "abilities": ["Moxie"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "pinsirmega": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["closecombat", "iceshard", "iciclecrash", "swordsdance"],
- "abilities": ["Hyper Cutter"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "iceshard", "iciclecrash", "uturn"],
- "abilities": ["Hyper Cutter"]
- }
- ]
- },
- "tauros": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["bodyslam", "earthquake", "fireblast", "rockslide", "zenheadbutt"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["doubleedge", "earthquake", "stoneedge", "zenheadbutt"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "gyarados": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "stoneedge", "substitute", "waterfall"],
- "abilities": ["Intimidate", "Moxie"]
- }
- ]
- },
- "gyaradosmega": {
- "level": 74,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["doubleedge", "dragondance", "earthquake", "substitute", "waterfall"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "lapras": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["freezedry", "healbell", "hydropump", "icebeam", "toxic"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Staller",
- "movepool": ["freezedry", "hydropump", "protect", "toxic"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "ditto": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["transform"],
- "abilities": ["Imposter"]
- }
- ]
- },
- "vaporeon": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "icebeam", "protect", "scald", "wish"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Staller",
- "movepool": ["protect", "scald", "toxic", "wish"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "jolteon": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerice", "shadowball", "thunderbolt", "voltswitch"],
- "abilities": ["Volt Absorb"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerice", "signalbeam", "thunderbolt", "voltswitch"],
- "abilities": ["Volt Absorb"]
- }
- ]
- },
- "flareon": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["facade", "flamecharge", "flareblitz", "quickattack", "superpower"],
- "abilities": ["Guts"]
- }
- ]
- },
- "omastar": {
- "level": 83,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
- "abilities": ["Shell Armor", "Swift Swim"]
- }
- ]
- },
- "kabutops": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["aquajet", "knockoff", "rapidspin", "stoneedge", "waterfall"],
- "abilities": ["Battle Armor", "Swift Swim"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["aquajet", "knockoff", "stoneedge", "swordsdance", "waterfall"],
- "abilities": ["Weak Armor"]
- }
- ]
- },
- "aerodactyl": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
- "abilities": ["Unnerve"]
- },
- {
- "role": "Fast Support",
- "movepool": ["aerialace", "aquatail", "defog", "earthquake", "roost", "stealthrock", "stoneedge"],
- "abilities": ["Unnerve"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "aerodactylmega": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hurricane", "earthquake", "honeclaws", "roost", "stoneedge"],
- "abilities": ["Unnerve"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "snorlax": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "sleeptalk"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "articuno": {
- "level": 84,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["freezedry", "roost", "substitute", "toxic"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "zapdos": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["defog", "discharge", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn"],
- "abilities": ["Static"]
- }
- ]
- },
- "moltres": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"],
- "abilities": ["Flame Body"]
- }
- ]
- },
- "dragonite": {
- "level": 73,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "ironhead", "outrage", "roost"],
- "abilities": ["Multiscale"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "mewtwo": {
- "level": 70,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
- "abilities": ["Unnerve"]
- }
- ]
- },
- "mewtwomegax": {
- "level": 69,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bulkup", "drainpunch", "stoneedge", "taunt", "zenheadbutt"],
- "abilities": ["Unnerve"]
- }
- ]
- },
- "mewtwomegay": {
- "level": 69,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
- "abilities": ["Unnerve"]
- }
- ]
- },
- "mew": {
- "level": 80,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["defog", "knockoff", "psychic", "roost", "stealthrock", "taunt", "uturn", "willowisp"],
- "abilities": ["Synchronize"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["aurasphere", "earthpower", "fireblast", "nastyplot", "psychic", "psyshock", "roost"],
- "abilities": ["Synchronize"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["drainpunch", "knockoff", "swordsdance", "zenheadbutt"],
- "abilities": ["Synchronize"]
- }
- ]
- },
- "meganium": {
- "level": 92,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["aromatherapy", "dragontail", "earthquake", "energyball", "leechseed", "synthesis", "toxic"],
- "abilities": ["Overgrow"]
- }
- ]
- },
- "typhlosion": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["eruption", "fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerrock"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "feraligatr": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["crunch", "dragondance", "earthquake", "icepunch", "waterfall"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "furret": {
- "level": 93,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["aquatail", "doubleedge", "firepunch", "knockoff", "trick", "uturn"],
- "abilities": ["Frisk"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "noctowl": {
- "level": 95,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["airslash", "defog", "hypervoice", "roost", "toxic"],
- "abilities": ["Tinted Lens"],
- "preferredTypes": ["Normal"]
- }
- ]
- },
- "ledian": {
- "level": 100,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["encore", "focusblast", "knockoff", "roost", "toxic"],
- "abilities": ["Early Bird"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "ariados": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["megahorn", "poisonjab", "stickyweb", "suckerpunch", "toxicspikes"],
- "abilities": ["Insomnia", "Swarm"]
- }
- ]
- },
- "crobat": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "defog", "roost", "superfang", "taunt", "toxic", "uturn"],
- "abilities": ["Infiltrator"]
- }
- ]
- },
- "lanturn": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["healbell", "icebeam", "scald", "thunderbolt", "toxic", "voltswitch"],
- "abilities": ["Volt Absorb"]
- }
- ]
- },
- "xatu": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "heatwave", "psychic", "roost"],
- "abilities": ["Magic Bounce"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["heatwave", "psychic", "roost", "thunderwave", "toxic", "uturn"],
- "abilities": ["Magic Bounce"]
- }
- ]
- },
- "ampharos": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["focusblast", "healbell", "slackoff", "thunderbolt", "toxic", "voltswitch", "defog"],
- "abilities": ["Static"]
- }
- ]
- },
- "ampharosmega": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["agility", "dragonpulse", "aurasphere", "thunderbolt", "voltswitch"],
- "abilities": ["Static"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["dragonpulse", "aurasphere", "slackoff", "voltswitch", "thunderbolt", "defog"],
- "abilities": ["Static"]
- }
- ]
- },
- "bellossom": {
- "level": 96,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["gigadrain", "hiddenpowerground", "leechseed", "moonblast", "sleeppowder", "sludgebomb", "synthesis", "toxic"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["drainpunch", "leafblade", "return", "swordsdance"],
- "abilities": ["Chlorophyll"]
- }
- ]
- },
- "azumarill": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["aquajet", "bellydrum", "knockoff", "playrough", "superpower", "waterfall"],
- "abilities": ["Huge Power"]
- }
- ]
- },
- "sudowoodo": {
- "level": 94,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "stealthrock", "stoneedge", "suckerpunch", "toxic", "woodhammer"],
- "abilities": ["Rock Head"],
- "preferredTypes": ["Grass"]
- }
- ]
- },
- "politoed": {
- "level": 86,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["encore", "icebeam", "protect", "scald", "toxic"],
- "abilities": ["Drizzle"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["encore", "icebeam", "rest", "scald", "toxic"],
- "abilities": ["Drizzle"]
- }
- ]
- },
- "jumpluff": {
- "level": 90,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["acrobatics", "leechseed", "protect", "substitute"],
- "abilities": ["Infiltrator"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["acrobatics", "encore", "sleeppowder", "toxic", "uturn"],
- "abilities": ["Infiltrator"]
- }
- ]
- },
- "sunflora": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthpower", "hiddenpowerfire", "hiddenpowerice", "hiddenpowerrock", "leafstorm", "sludgebomb"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthpower", "hiddenpowerfire", "solarbeam", "sunnyday"],
- "abilities": ["Chlorophyll"]
- }
- ]
- },
- "quagsire": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "icebeam", "recover", "scald", "toxic"],
- "abilities": ["Unaware"]
- }
- ]
- },
- "espeon": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "dazzlinggleam", "morningsun", "psychic", "psyshock", "shadowball", "trick"],
- "abilities": ["Magic Bounce"],
- "preferredTypes": ["Fairy"]
- }
- ]
- },
- "umbreon": {
- "level": 83,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["foulplay", "protect", "toxic", "wish"],
- "abilities": ["Synchronize"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["foulplay", "healbell", "moonlight", "toxic"],
- "abilities": ["Synchronize"]
- }
- ]
- },
- "murkrow": {
- "level": 90,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["bravebird", "defog", "foulplay", "haze", "roost", "thunderwave"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "slowking": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["fireblast", "icebeam", "nastyplot", "psyshock", "scald", "slackoff", "thunderwave", "toxic"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["dragontail", "fireblast", "futuresight", "icebeam", "psyshock", "scald"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "unown": {
- "level": 100,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerfighting", "hiddenpowerpsychic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "wobbuffet": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["counter", "destinybond", "encore", "mirrorcoat"],
- "abilities": ["Shadow Tag"]
- }
- ]
- },
- "girafarig": {
- "level": 93,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dazzlinggleam", "hypervoice", "nastyplot", "psychic", "psyshock", "substitute", "thunderbolt"],
- "abilities": ["Sap Sipper"],
- "preferredTypes": ["Psychic"]
- }
- ]
- },
- "forretress": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["gyroball", "rapidspin", "spikes", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["gyroball", "rapidspin", "stealthrock", "toxicspikes", "voltswitch"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "dunsparce": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "glare", "headbutt", "roost"],
- "abilities": ["Serene Grace"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["bodyslam", "coil", "earthquake", "roost"],
- "abilities": ["Serene Grace"]
- }
- ]
- },
- "gligar": {
- "level": 82,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "toxic", "uturn"],
- "abilities": ["Immunity"]
- }
- ]
- },
- "steelix": {
- "level": 83,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthquake", "ironhead", "roar", "rockslide", "stealthrock", "toxic"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Steel"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "heavyslam", "protect", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "toxic", "rapidspin"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "steelixmega": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["heatcrash", "earthquake", "heavyslam", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "heavyslam", "rest", "sleeptalk"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "granbull": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "healbell", "playrough", "thunderwave", "toxic"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "qwilfish": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["destinybond", "poisonjab", "spikes", "taunt", "thunderwave", "toxicspikes", "waterfall"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "scizor": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
- "abilities": ["Technician"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
- "abilities": ["Technician"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["bulletpunch", "knockoff", "pursuit", "superpower", "uturn"],
- "abilities": ["Technician"]
- }
- ]
- },
- "scizormega": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["bugbite", "bulletpunch", "knockoff", "roost", "superpower", "swordsdance"],
- "abilities": ["Light Metal"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["bulletpunch", "defog", "knockoff", "roost", "superpower", "uturn"],
- "abilities": ["Light Metal"]
- }
- ]
- },
- "shuckle": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["encore", "knockoff", "stealthrock", "stickyweb", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "heracross": {
- "level": 79,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["closecombat", "facade", "knockoff", "megahorn", "icepunch"],
- "abilities": ["Guts"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "knockoff", "megahorn", "stoneedge", "icepunch"],
- "abilities": ["Moxie"]
- }
- ]
- },
- "heracrossmega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["closecombat", "earthquake", "knockoff", "megahorn", "healorder", "icepunch", "swordsdance"],
- "abilities": ["Moxie"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["circlethrow", "spikes", "knockoff", "healorder"],
- "abilities": ["Moxie"]
- }
- ]
- },
- "ursaring": {
- "level": 85,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["closecombat", "crunch", "facade", "protect"],
- "abilities": ["Guts"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["closecombat", "crunch", "facade", "swordsdance"],
- "abilities": ["Quick Feet"]
- }
- ]
- },
- "magcargo": {
- "level": 98,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["ancientpower", "lavaplume", "recover", "stealthrock", "toxic"],
- "abilities": ["Flame Body"]
- }
- ]
- },
- "corsola": {
- "level": 99,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["powergem", "recover", "scald", "stealthrock", "toxic"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "octillery": {
- "level": 93,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["energyball", "fireblast", "gunkshot", "hydropump", "icebeam", "scald"],
- "abilities": ["Sniper"],
- "preferredTypes": ["Poison"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["energyball", "fireblast", "gunkshot", "icebeam", "scald", "thunderwave"],
- "abilities": ["Sniper"],
- "preferredTypes": ["Poison"]
- }
- ]
- },
- "delibird": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["destinybond", "freezedry", "rapidspin", "spikes"],
- "abilities": ["Insomnia", "Vital Spirit"]
- }
- ]
- },
- "mantine": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["airslash", "defog", "haze", "rest", "scald", "toxic"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Staller",
- "movepool": ["rest", "scald", "sleeptalk", "toxic"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "skarmory": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bravebird", "roost", "spikes", "stealthrock", "whirlwind"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "roost", "spikes", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "houndoom": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "suckerpunch", "toxicspikes"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "houndoommega": {
- "level": 80,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["darkpulse", "fireblast", "nastyplot", "sludgebomb", "taunt"],
- "abilities": ["Flash Fire"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["darkpulse", "fireblast", "toxicspikes", "sludgebomb"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "kingdra": {
- "level": 84,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dracometeor", "hydropump", "icebeam", "raindance", "waterfall"],
- "abilities": ["Swift Swim"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["dragondance", "ironhead", "outrage", "waterfall"],
- "abilities": ["Sniper", "Swift Swim"]
- }
- ]
- },
- "donphan": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "porygon2": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["discharge", "icebeam", "recover", "toxic", "triattack"],
- "abilities": ["Download", "Trace"]
- }
- ]
- },
- "stantler": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "jumpkick", "megahorn", "suckerpunch", "thunderwave"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "smeargle": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["nuzzle", "spikes", "spore", "stealthrock", "stickyweb", "whirlwind"],
- "abilities": ["Own Tempo"]
- }
- ]
- },
- "hitmontop": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["closecombat", "earthquake", "rapidspin", "stoneedge", "suckerpunch", "toxic"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "miltank": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bodyslam", "curse", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
- "abilities": ["Sap Sipper", "Thick Fat"]
- }
- ]
- },
- "blissey": {
- "level": 84,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["protect", "seismictoss", "toxic", "wish"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "raikou": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aurasphere", "hiddenpowerice", "thunderbolt", "voltswitch"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["aurasphere", "calmmind", "hiddenpowerice", "substitute", "thunderbolt"],
- "abilities": ["Pressure"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "entei": {
- "level": 77,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["bulldoze", "extremespeed", "flareblitz", "sacredfire"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["extremespeed", "flareblitz", "sacredfire", "stoneedge"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "suicune": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "icebeam", "rest", "scald", "substitute"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Staller",
- "movepool": ["calmmind", "protect", "scald", "substitute"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "tyranitar": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["crunch", "earthquake", "fireblast", "icebeam", "pursuit", "stealthrock", "stoneedge"],
- "abilities": ["Sand Stream"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["crunch", "dragondance", "earthquake", "firepunch", "icepunch", "stoneedge"],
- "abilities": ["Sand Stream"]
- }
- ]
- },
- "tyranitarmega": {
- "level": 75,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "superpower", "icepunch", "wildcharge"],
- "abilities": ["Sand Stream"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["stealthrock", "earthquake", "icepunch", "wildcharge"],
- "abilities": ["Sand Stream"]
- }
- ]
- },
- "lugia": {
- "level": 71,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["aeroblast", "defog", "earthquake", "roost", "substitute", "toxic", "whirlwind"],
- "abilities": ["Multiscale"]
- }
- ]
- },
- "hooh": {
- "level": 69,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "defog", "earthquake", "roost", "sacredfire", "substitute", "toxic"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "celebi": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthpower", "gigadrain", "leafstorm", "nastyplot", "psychic", "uturn"],
- "abilities": ["Natural Cure"],
- "preferredTypes": ["Psychic"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["leafstorm", "psychic", "recover", "stealthrock", "thunderwave", "uturn"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["leafstorm", "nastyplot", "psychic", "recover"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "sceptile": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "leafstorm", "rockslide"],
- "abilities": ["Overgrow"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "calmmind"],
- "abilities": ["Unburden"]
- },
- {
- "role": "Staller",
- "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "substitute"],
- "abilities": ["Overgrow"]
- }
- ]
- },
- "sceptilemega": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "leafstorm", "dragonpulse", "sludgewave"],
- "abilities": ["Overgrow"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "gigadrain", "dragonpulse", "calmmind"],
- "abilities": ["Overgrow"]
- }
- ]
- },
- "combusken": {
- "level": 93,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["flareblitz", "focusblast", "hiddenpowerelectric", "protect", "hiddenpowerice"],
- "abilities": ["Speed Boost"]
- }
- ]
- },
- "blaziken": {
- "level": 85,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "blazikenmega": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["flareblitz", "closecombat", "knockoff", "stoneedge", "swordsdance"],
- "abilities": ["Blaze"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["flareblitz", "closecombat", "knockoff", "spikes", "uturn"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "swampert": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "icebeam", "roar", "scald", "stealthrock", "toxic", "toxicspikes"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "protect", "scald", "toxic"],
- "abilities": ["Torrent"]
- }
- ]
- },
- "swampertmega": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "poisonjab", "substitute", "superpower", "waterfall", "toxicspikes"],
- "abilities": ["Damp"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["bulkup", "gunkshot", "earthquake", "waterfall"],
- "abilities": ["Damp"]
- }
- ]
- },
- "mightyena": {
- "level": 93,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["crunch", "irontail", "playrough", "suckerpunch", "toxic"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Fairy"]
- }
- ]
- },
- "linoone": {
- "level": 84,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"],
- "abilities": ["Quick Feet"]
- }
- ]
- },
- "beautifly": {
- "level": 99,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["aircutter", "bugbuzz", "hiddenpowerground", "quiverdance"],
- "abilities": ["Swarm"]
- }
- ]
- },
- "dustox": {
- "level": 96,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["bugbuzz", "hiddenpowerground", "quiverdance", "roost", "sludgebomb"],
- "abilities": ["Shield Dust"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["bugbuzz", "defog", "roost", "toxic", "uturn"],
- "abilities": ["Shield Dust"]
- }
- ]
- },
- "ludicolo": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["gigadrain", "hydropump", "icebeam", "raindance"],
- "abilities": ["Swift Swim"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["energyball", "hydropump", "icebeam", "scald"],
- "abilities": ["Swift Swim"]
- }
- ]
- },
- "shiftry": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["defog", "knockoff", "leafstorm", "lowkick", "suckerpunch"],
- "abilities": ["Chlorophyll", "Pickpocket"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["knockoff", "leafblade", "lowkick", "suckerpunch", "swordsdance"],
- "abilities": ["Chlorophyll", "Pickpocket"]
- }
- ]
- },
- "swellow": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bravebird", "facade", "protect", "uturn"],
- "abilities": ["Guts"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["bravebird", "facade", "quickattack", "uturn"],
- "abilities": ["Guts"]
- }
- ]
- },
- "pelipper": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "hurricane", "knockoff", "roost", "scald", "toxic", "uturn"],
- "abilities": ["Rain Dish"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["defog", "knockoff", "roost", "scald", "toxic", "uturn"],
- "abilities": ["Rain Dish"]
- }
- ]
- },
- "gardevoir": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "focusblast", "healingwish", "moonblast", "psychic", "shadowball", "thunderbolt", "trick"],
- "abilities": ["Trace"],
- "preferredTypes": ["Fighting"]
- },
- {
- "role": "Fast Support",
- "movepool": ["willowisp", "healingwish", "rapidspin", "psychic", "moonblast"],
- "abilities": ["Trace"],
- "preferredTypes": ["Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "focusblast", "moonblast", "psyshock", "substitute", "willowisp"],
- "abilities": ["Trace"]
- }
- ]
- },
- "gardevoirmega": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "encore", "focusblast", "hypervoice", "psyshock", "taunt", "willowisp", "mysticalfire"],
- "abilities": ["Trace"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "hypervoice", "psyshock", "substitute", "taunt", "willowisp", "rapidspin"],
- "abilities": ["Trace"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "masquerain": {
- "level": 90,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["airslash", "bugbuzz", "hydropump", "quiverdance"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Fast Support",
- "movepool": ["airslash", "bugbuzz", "roost", "scald", "stickyweb", "stunspore", "uturn"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "breloom": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bulletseed", "machpunch", "rocktomb", "spore", "swordsdance"],
- "abilities": ["Technician"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["bulletseed", "machpunch", "rocktomb", "swordsdance"],
- "abilities": ["Technician"]
- }
- ]
- },
- "vigoroth": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["bodyslam", "bulkup", "earthquake", "return", "shadowclaw", "slackoff"],
- "abilities": ["Vital Spirit"]
- }
- ]
- },
- "slaking": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "gigaimpact", "nightslash", "retaliate"],
- "abilities": ["Truant"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "gigaimpact", "pursuit"],
- "abilities": ["Truant"]
- }
- ]
- },
- "ninjask": {
- "level": 93,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aerialace", "nightslash", "swordsdance", "uturn", "xscissor"],
- "abilities": ["Infiltrator"]
- }
- ]
- },
- "shedinja": {
- "level": 95,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["shadowclaw", "shadowsneak", "swordsdance", "willowisp", "xscissor"],
- "abilities": ["Wonder Guard"]
- }
- ]
- },
- "exploud": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["boomburst", "fireblast", "focusblast", "surf"],
- "abilities": ["Scrappy"]
- }
- ]
- },
- "hariyama": {
- "level": 86,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["bulletpunch", "closecombat", "heavyslam", "knockoff", "stoneedge"],
- "abilities": ["Guts", "Thick Fat"],
- "preferredTypes": ["Dark"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["bulletpunch", "closecombat", "facade", "fakeout", "knockoff"],
- "abilities": ["Guts"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "delcatty": {
- "level": 100,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["doubleedge", "fakeout", "healbell", "suckerpunch", "thunderwave", "toxic"],
- "abilities": ["Wonder Skin"]
- }
- ]
- },
- "sableye": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["foulplay", "knockoff", "recover", "taunt", "willowisp"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "sableyemega": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "darkpulse", "recover", "willowisp"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "mawile": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"],
- "abilities": ["Intimidate", "Sheer Force"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "playrough", "stealthrock", "slackoff"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "mawilemega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["ironhead", "knockoff", "playrough", "stealthrock", "suckerpunch", "swordsdance", "slackoff", "rockslide"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["ironhead", "knockoff", "playrough", "firepunch", "suckerpunch", "swordsdance", "rockslide"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "aggron": {
- "level": 86,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "headsmash", "heavyslam", "rockpolish"],
- "abilities": ["Rock Head"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "voltswitch"],
- "abilities": ["Rock Head"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["aquatail", "earthquake", "headsmash", "heavyslam", "stealthrock"],
- "abilities": ["Rock Head"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "aggronmega": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "heavyslam", "roar", "stealthrock", "stoneedge", "thunderwave", "toxic"],
- "abilities": ["Sturdy"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["voltswitch", "earthquake", "stoneedge", "heavyslam", "stealthrock", "toxic", "protect"],
- "abilities": ["Rock Head"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "medicham": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bulletpunch", "closecombat", "icepunch", "gunkshot", "zenheadbutt", "healingwish"],
- "abilities": ["Pure Power"]
- }
- ]
- },
- "medichammega": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "psychic", "psyshock", "thunderbolt", "shadowball", "vacuumwave"],
- "abilities": ["Telepathy"],
- "preferredTypes": ["Ghost"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "psychic", "recover", "vacuumwave"],
- "abilities": ["Telepathy"]
- }
- ]
- },
- "manectric": {
- "level": 84,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["flamethrower", "hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "manectricmega": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "plusle": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
- "abilities": ["Lightning Rod"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "minun": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["encore", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
- "abilities": ["Volt Absorb"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["grassknot", "hiddenpowerice", "nastyplot", "thunderbolt"],
- "abilities": ["Volt Absorb"]
- }
- ]
- },
- "volbeat": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["encore", "roost", "thunderwave", "uturn"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "illumise": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bugbuzz", "encore", "roost", "thunderwave"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "swalot": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "encore", "icebeam", "painsplit", "sludgebomb", "toxic", "yawn"],
- "abilities": ["Liquid Ooze"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "protect", "sludgebomb", "toxic"],
- "abilities": ["Liquid Ooze"]
- }
- ]
- },
- "sharpedo": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["crunch", "destinybond", "earthquake", "icebeam", "protect", "waterfall"],
- "abilities": ["Speed Boost"]
- }
- ]
- },
- "sharpedomega": {
- "level": 78,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["thunder", "blizzard", "protect", "hydropump"],
- "abilities": ["Speed Boost"]
- }
- ]
- },
- "wailord": {
- "level": 93,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "waterspout"],
- "abilities": ["Water Veil"]
- }
- ]
- },
- "camerupt": {
- "level": 89,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "fireblast", "rockpolish", "stoneedge"],
- "abilities": ["Solid Rock"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "lavaplume", "morningsun", "roar", "stealthrock", "toxic"],
- "abilities": ["Solid Rock"]
- }
- ]
- },
- "cameruptmega": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["morningsun", "earthpower", "fireblast", "stealthrock", "toxic", "willowisp"],
- "abilities": ["Solid Rock"]
- }
- ]
- },
- "torkoal": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "lavaplume", "rapidspin", "stealthrock", "yawn"],
- "abilities": ["Shell Armor"]
- }
- ]
- },
- "grumpig": {
- "level": 92,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["focusblast", "healbell", "psychic", "thunderwave", "toxic", "whirlwind"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "spinda": {
- "level": 97,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["rest", "return", "sleeptalk", "suckerpunch", "superpower", "thief"],
- "abilities": ["Contrary"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "flygon": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "outrage", "stoneedge", "uturn"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["defog", "dracometeor", "earthquake", "roost", "uturn"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "cacturne": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["darkpulse", "gigadrain", "spikes", "suckerpunch", "superpower"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["drainpunch", "seedbomb", "suckerpunch", "swordsdance"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "altaria": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["dragondance", "earthquake", "outrage", "roost"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["dracometeor", "earthquake", "fireblast", "healbell", "roost", "toxic"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "altariamega": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["moonblast", "hydropump", "fireblast", "roost"],
- "abilities": ["Natural Cure"]
- }
- ]
- },
- "zangoose": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "facade", "knockoff", "quickattack", "swordsdance"],
- "abilities": ["Toxic Boost"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "seviper": {
- "level": 91,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "flamethrower", "gigadrain", "glare", "knockoff", "sludgewave", "suckerpunch", "switcheroo"],
- "abilities": ["Infiltrator"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "lunatone": {
- "level": 96,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthpower", "icebeam", "moonblast", "moonlight", "psychic", "rockpolish"],
- "abilities": ["Levitate"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthpower", "moonlight", "psychic", "stealthrock", "toxic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "solrock": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "morningsun", "stealthrock", "stoneedge", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "whiscash": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "stoneedge", "waterfall"],
- "abilities": ["Hydration", "Oblivious"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "protect", "scald", "toxic"],
- "abilities": ["Hydration", "Oblivious"]
- }
- ]
- },
- "crawdaunt": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aquajet", "crabhammer", "dragondance", "knockoff", "superpower"],
- "abilities": ["Adaptability"]
- }
- ]
- },
- "claydol": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "icebeam", "psychic", "rapidspin", "stealthrock", "toxic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "cradily": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["curse", "earthquake", "recover", "seedbomb", "stoneedge", "swordsdance"],
- "abilities": ["Storm Drain"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["earthpower", "gigadrain", "recover", "stealthrock", "stoneedge", "toxic"],
- "abilities": ["Storm Drain"],
- "preferredTypes": ["Grass"]
- }
- ]
- },
- "armaldo": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "toxic", "xscissor"],
- "abilities": ["Battle Armor", "Swift Swim"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["aquajet", "earthquake", "knockoff", "stoneedge", "swordsdance", "xscissor"],
- "abilities": ["Battle Armor", "Swift Swim"]
- }
- ]
- },
- "milotic": {
- "level": 83,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["dragontail", "haze", "icebeam", "recover", "scald", "toxic"],
- "abilities": ["Competitive", "Marvel Scale"]
- }
- ]
- },
- "castform": {
- "level": 97,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["fireblast", "icebeam", "return", "scald", "thunderbolt", "thunderwave"],
- "abilities": ["Forecast"],
- "preferredTypes": ["Water"]
- }
- ]
- },
- "kecleon": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["drainpunch", "fakeout", "knockoff", "recover", "shadowsneak", "stealthrock", "suckerpunch"],
- "abilities": ["Protean"],
- "preferredTypes": ["Fighting"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["drainpunch", "knockoff", "recover", "stealthrock", "thunderwave", "toxic"],
- "abilities": ["Protean"]
- }
- ]
- },
- "banette": {
- "level": 90,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["gunkshot", "knockoff", "shadowclaw", "shadowsneak", "thunderwave", "willowisp"],
- "abilities": ["Cursed Body", "Frisk", "Insomnia"]
- }
- ]
- },
- "banettemega": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["powder", "knockoff", "ironhead", "taunt", "willowisp", "stealthrock", "defog"],
- "abilities": ["Frisk"]
- }
- ]
- },
- "tropius": {
- "level": 94,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["airslash", "leechseed", "protect", "substitute"],
- "abilities": ["Harvest"]
- }
- ]
- },
- "chimecho": {
- "level": 97,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["healbell", "knockoff", "psychic", "recover", "toxic"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "psychic", "psyshock", "recover", "signalbeam"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "absol": {
- "level": 84,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"],
- "abilities": ["Justified"],
- "preferredTypes": ["Fairy"]
- }
- ]
- },
- "absolmega": {
- "level": 80,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["irontail", "knockoff", "playrough", "pursuit", "suckerpunch", "closecombat", "swordsdance"],
- "abilities": ["Justified"],
- "preferredTypes": ["Fairy"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["knockoff", "moonblast", "suckerpunch", "closecombat", "fireblast"],
- "abilities": ["Justified"]
- }
- ]
- },
- "glalie": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
- "abilities": ["Inner Focus"]
- }
- ]
- },
- "glaliemega": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "explosion", "freezedry", "iceshard", "doubleedge", "spikes"],
- "abilities": ["Inner Focus"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["earthquake", "iceshard", "boomburst", "doubleedge"],
- "abilities": ["Inner Focus"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "walrein": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["icebeam", "roar", "superfang", "surf", "toxic"],
- "abilities": ["Thick Fat"]
- },
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "surf", "toxic"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "huntail": {
- "level": 84,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["icebeam", "return", "shellsmash", "suckerpunch", "waterfall"],
- "abilities": ["Swift Swim", "Water Veil"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "gorebyss": {
- "level": 83,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["hiddenpowergrass", "hydropump", "icebeam", "shellsmash"],
- "abilities": ["Swift Swim"]
- }
- ]
- },
- "relicanth": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "headsmash", "stealthrock", "toxic", "waterfall"],
- "abilities": ["Rock Head"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["doubleedge", "earthquake", "headsmash", "waterfall"],
- "abilities": ["Rock Head"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["earthquake", "headsmash", "rockpolish", "waterfall"],
- "abilities": ["Rock Head"]
- }
- ]
- },
- "luvdisc": {
- "level": 100,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "scald", "substitute", "toxic"],
- "abilities": ["Hydration"]
- }
- ]
- },
- "salamence": {
- "level": 75,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "outrage", "roost", "ironhead"],
- "abilities": ["Intimidate", "Moxie"]
- }
- ]
- },
- "salamencemega": {
- "level": 74,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["outrage", "dragondance", "earthquake", "hurricane", "roost"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["hurricane", "fireblast", "dracometeor", "roost"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "metagross": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["agility", "earthquake", "icepunch", "meteormash", "thunderpunch", "zenheadbutt"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["bulletpunch", "earthquake", "explosion", "icepunch", "meteormash", "stealthrock", "thunderpunch", "zenheadbutt"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "metagrossmega": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["agility", "earthquake", "hammerarm", "meteormash", "zenheadbutt"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Psychic"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "hammerarm", "honeclaws", "meteormash", "zenheadbutt"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Psychic"]
- }
- ]
- },
- "regirock": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["curse", "drainpunch", "rest", "stoneedge"],
- "abilities": ["Sturdy"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["drainpunch", "earthquake", "stealthrock", "stoneedge", "thunderwave", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "regice": {
- "level": 87,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "thunderbolt", "toxic"],
- "abilities": ["Clear Body"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["focusblast", "icebeam", "rest", "sleeptalk", "thunderbolt", "thunderwave"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Electric"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["focusblast", "icebeam", "rockpolish", "thunderbolt"],
- "abilities": ["Clear Body"]
- }
- ]
- },
- "registeel": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["curse", "ironhead", "rest", "sleeptalk"],
- "abilities": ["Clear Body"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["rest", "seismictoss", "sleeptalk", "toxic"],
- "abilities": ["Clear Body"]
- },
- {
- "role": "Staller",
- "movepool": ["protect", "seismictoss", "stealthrock", "thunderwave", "toxic"],
- "abilities": ["Clear Body"]
- }
- ]
- },
- "latias": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "latiasmega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "latios": {
- "level": 72,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "latiosmega": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "dracometeor", "psyshock", "roost"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "zenheadbutt", "dracometeor", "earthquake"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["defog", "dracometeor", "psyshock", "roost", "icebeam"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "kyogre": {
- "level": 67,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["icebeam", "originpulse", "scald", "thunder", "waterspout"],
- "abilities": ["Drizzle"]
- }
- ]
- },
- "kyogreprimal": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "rest", "scald", "sleeptalk"],
- "abilities": ["Drizzle"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "icebeam", "originpulse", "thunder"],
- "abilities": ["Drizzle"]
- }
- ]
- },
- "groudon": {
- "level": 74,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "stoneedge", "thunderwave"],
- "abilities": ["Drought"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["firepunch", "precipiceblades", "rockpolish", "stoneedge", "swordsdance"],
- "abilities": ["Drought"]
- }
- ]
- },
- "groudonprimal": {
- "level": 64,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["dragontail", "lavaplume", "precipiceblades", "stealthrock", "thunderwave"],
- "abilities": ["Drought"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["firepunch", "precipiceblades", "rockpolish", "swordsdance"],
- "abilities": ["Drought"]
- }
- ]
- },
- "rayquaza": {
- "level": 72,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["dracometeor", "earthquake", "extremespeed", "outrage", "vcreate"],
- "abilities": ["Air Lock"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "extremespeed", "outrage", "vcreate", "coil"],
- "abilities": ["Air Lock"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "extremespeed", "outrage", "swordsdance", "vcreate"],
- "abilities": ["Air Lock"],
- "preferredTypes": ["Normal"]
- }
- ]
- },
- "rayquazamega": {
- "level": 65,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dragonascent", "dragondance", "earthquake", "extremespeed", "vcreate", "coil"],
- "abilities": ["Air Lock"]
- }
- ]
- },
- "jirachi": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bodyslam", "firepunch", "healingwish", "ironhead", "protect", "stealthrock", "toxic", "uturn", "wish"],
- "abilities": ["Serene Grace"]
- }
- ]
- },
- "deoxys": {
- "level": 74,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "deoxysattack": {
- "level": 72,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["extremespeed", "knockoff", "psychoboost", "superpower"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["icebeam", "knockoff", "psychoboost", "superpower"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "deoxysdefense": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "recover", "seismictoss", "spikes", "stealthrock", "taunt", "toxic"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "recover", "signalbeam"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "deoxysspeed": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["knockoff", "psychoboost", "spikes", "stealthrock", "superpower", "taunt"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["darkpulse", "focusblast", "nastyplot", "psychoboost"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "torterra": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "stealthrock", "stoneedge", "synthesis", "woodhammer"],
- "abilities": ["Overgrow"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "rockpolish", "stoneedge", "woodhammer"],
- "abilities": ["Overgrow"]
- }
- ]
- },
- "infernape": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "grassknot", "machpunch", "overheat", "stealthrock"],
- "abilities": ["Blaze", "Iron Fist"]
- },
- {
- "role": "Fast Support",
- "movepool": ["closecombat", "flareblitz", "machpunch", "stoneedge", "swordsdance", "uturn"],
- "abilities": ["Blaze", "Iron Fist"]
- }
- ]
- },
- "empoleon": {
- "level": 82,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["defog", "knockoff", "protect", "scald", "stealthrock", "toxic"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["defog", "icebeam", "knockoff", "roar", "scald", "toxic"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["flashcannon", "grassknot", "hydropump", "icebeam", "knockoff", "scald"],
- "abilities": ["Torrent"]
- }
- ]
- },
- "staraptor": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bravebird", "closecombat", "doubleedge", "quickattack", "uturn"],
- "abilities": ["Reckless"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "bibarel": {
- "level": 95,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["quickattack", "return", "waterfall", "workup"],
- "abilities": ["Simple"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["curse", "quickattack", "return", "waterfall"],
- "abilities": ["Simple"]
- }
- ]
- },
- "kricketune": {
- "level": 98,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["bugbite", "knockoff", "stickyweb", "taunt", "toxic"],
- "abilities": ["Technician"]
- }
- ]
- },
- "luxray": {
- "level": 88,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["crunch", "facade", "superpower", "wildcharge"],
- "abilities": ["Guts"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["crunch", "icefang", "superpower", "voltswitch", "wildcharge"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "roserade": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["gigadrain", "hiddenpowerground", "leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
- "abilities": ["Natural Cure", "Technician"]
- }
- ]
- },
- "rampardos": {
- "level": 87,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "firepunch", "rockpolish", "rockslide", "zenheadbutt"],
- "abilities": ["Sheer Force"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "firepunch", "headsmash", "rockslide"],
- "abilities": ["Sheer Force"]
- }
- ]
- },
- "bastiodon": {
- "level": 95,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["metalburst", "protect", "roar", "rockslide", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "wormadam": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "signalbeam", "synthesis", "toxic"],
- "abilities": ["Anticipation", "Overcoat"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerground", "hiddenpowerrock", "leafstorm", "psychic", "signalbeam"],
- "abilities": ["Anticipation", "Overcoat"]
- },
- {
- "role": "Staller",
- "movepool": ["gigadrain", "hiddenpowerground", "protect", "toxic"],
- "abilities": ["Anticipation", "Overcoat"]
- }
- ]
- },
- "wormadamsandy": {
- "level": 90,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["earthquake", "infestation", "protect", "stealthrock", "toxic"],
- "abilities": ["Overcoat"]
- }
- ]
- },
- "wormadamtrash": {
- "level": 88,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["flashcannon", "infestation", "protect", "stealthrock", "toxic"],
- "abilities": ["Overcoat"]
- }
- ]
- },
- "mothim": {
- "level": 94,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["airslash", "bugbuzz", "energyball", "quiverdance"],
- "abilities": ["Tinted Lens"]
- }
- ]
- },
- "vespiquen": {
- "level": 100,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["airslash", "defog", "roost", "toxic", "uturn"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "pachirisu": {
- "level": 95,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["nuzzle", "superfang", "thunderbolt", "toxic", "uturn"],
- "abilities": ["Volt Absorb"]
- }
- ]
- },
- "floatzel": {
- "level": 86,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bulkup", "icepunch", "lowkick", "substitute", "waterfall"],
- "abilities": ["Water Veil"],
- "preferredTypes": ["Ice"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["aquajet", "crunch", "icepunch", "lowkick", "waterfall"],
- "abilities": ["Water Veil"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "cherrim": {
- "level": 97,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["dazzlinggleam", "energyball", "healingwish", "hiddenpowerfire", "hiddenpowerground", "hiddenpowerrock", "morningsun"],
- "abilities": ["Flower Gift"]
- },
- {
- "role": "Staller",
- "movepool": ["aromatherapy", "energyball", "hiddenpowerground", "leechseed", "morningsun", "toxic"],
- "abilities": ["Flower Gift"]
- }
- ]
- },
- "gastrodon": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["clearsmog", "earthquake", "icebeam", "recover", "scald", "toxic"],
- "abilities": ["Storm Drain"]
- }
- ]
- },
- "ambipom": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["fakeout", "knockoff", "lowkick", "return", "uturn"],
- "abilities": ["Technician"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "drifblim": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["acrobatics", "defog", "destinybond", "shadowball", "substitute", "willowisp"],
- "abilities": ["Unburden"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["acrobatics", "hex", "substitute", "willowisp"],
- "abilities": ["Unburden"]
- }
- ]
- },
- "lopunny": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["healingwish", "highjumpkick", "icepunch", "return", "switcheroo"],
- "abilities": ["Limber"]
- }
- ]
- },
- "lopunnymega": {
- "level": 76,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["encore", "fakeout", "highjumpkick", "poweruppunch", "return", "substitute"],
- "abilities": ["Limber"]
- }
- ]
- },
- "mismagius": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dazzlinggleam", "destinybond", "painsplit", "shadowball", "taunt", "willowisp"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["dazzlinggleam", "nastyplot", "shadowball", "thunderbolt", "trick"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "honchkrow": {
- "level": 82,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["bravebird", "heatwave", "pursuit", "roost", "suckerpunch", "superpower"],
- "abilities": ["Moxie"]
- }
- ]
- },
- "purugly": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["fakeout", "knockoff", "return", "uturn", "wakeupslap"],
- "abilities": ["Defiant", "Thick Fat"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "skuntank": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["crunch", "defog", "fireblast", "poisonjab", "pursuit", "suckerpunch", "taunt"],
- "abilities": ["Aftermath"]
- }
- ]
- },
- "bronzong": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "ironhead", "psychic", "stealthrock", "toxic"],
- "abilities": ["Levitate"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "ironhead", "protect", "psychic", "toxic"],
- "abilities": ["Levitate"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "chatot": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["boomburst", "chatter", "heatwave", "hiddenpowerground", "uturn"],
- "abilities": ["Tangled Feet"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["boomburst", "chatter", "heatwave", "nastyplot", "substitute"],
- "abilities": ["Tangled Feet"]
- }
- ]
- },
- "spiritomb": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "darkpulse", "rest", "sleeptalk"],
- "abilities": ["Infiltrator"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["foulplay", "painsplit", "pursuit", "suckerpunch", "toxic", "willowisp"],
- "abilities": ["Infiltrator"]
- }
- ]
- },
- "garchomp": {
- "level": 75,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["dragonclaw", "earthquake", "fireblast", "outrage", "stealthrock", "stoneedge", "toxic"],
- "abilities": ["Rough Skin"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
- "abilities": ["Rough Skin"]
- }
- ]
- },
- "garchompmega": {
- "level": 76,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["dracometeor", "earthquake", "fireblast", "stealthrock", "stoneedge"],
- "abilities": ["Rough Skin"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "firefang", "outrage", "stoneedge", "swordsdance"],
- "abilities": ["Rough Skin"]
- }
- ]
- },
- "lucario": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bulletpunch", "closecombat", "crunch", "extremespeed", "stoneedge", "swordsdance"],
- "abilities": ["Justified"],
- "preferredTypes": ["Normal"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["aurasphere", "flashcannon", "nastyplot", "vacuumwave"],
- "abilities": ["Inner Focus"]
- }
- ]
- },
- "lucariomega": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["bulletpunch", "closecombat", "meteormash", "swordsdance"],
- "abilities": ["Justified"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "flashcannon", "nastyplot", "vacuumwave"],
- "abilities": ["Justified"]
- }
- ]
- },
- "hippowdon": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "slackoff", "stealthrock", "stoneedge", "toxic", "whirlwind"],
- "abilities": ["Sand Stream"]
- }
- ]
- },
- "drapion": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["aquatail", "earthquake", "knockoff", "poisonjab", "pursuit", "swordsdance"],
- "abilities": ["Battle Armor"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "knockoff", "poisonjab", "taunt", "toxicspikes", "whirlwind"],
- "abilities": ["Battle Armor"]
- }
- ]
- },
- "toxicroak": {
- "level": 83,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["drainpunch", "earthquake", "gunkshot", "knockoff", "substitute", "suckerpunch", "swordsdance"],
- "abilities": ["Dry Skin"]
- }
- ]
- },
- "carnivine": {
- "level": 100,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "powerwhip", "sleeppowder", "swordsdance", "synthesis", "toxic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "lumineon": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["defog", "icebeam", "scald", "toxic", "uturn"],
- "abilities": ["Storm Drain"]
- }
- ]
- },
- "abomasnow": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["blizzard", "earthquake", "gigadrain", "iceshard", "woodhammer"],
- "abilities": ["Snow Warning"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "abomasnowmega": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["icebeam", "earthquake", "gigadrain", "iceshard", "woodhammer"],
- "abilities": ["Snow Warning"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["icebeam", "gigadrain", "leechseed", "earthquake"],
- "abilities": ["Snow Warning"]
- }
- ]
- },
- "weavile": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["iceshard", "iciclecrash", "knockoff", "lowkick", "pursuit", "swordsdance"],
- "abilities": ["Pickpocket"]
- }
- ]
- },
- "magnezone": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["flashcannon", "hiddenpowerground", "thunderbolt", "voltswitch"],
- "abilities": ["Analytic", "Magnet Pull"]
- },
- {
- "role": "Staller",
- "movepool": ["flashcannon", "protect", "thunderbolt", "toxic"],
- "abilities": ["Analytic"]
- }
- ]
- },
- "lickilicky": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bodyslam", "knockoff", "protect", "wish"],
- "abilities": ["Cloud Nine", "Oblivious"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["bodyslam", "dragontail", "earthquake", "explosion", "knockoff", "powerwhip"],
- "abilities": ["Cloud Nine", "Own Tempo"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["bodyslam", "earthquake", "explosion", "knockoff", "powerwhip", "return", "swordsdance"],
- "abilities": ["Cloud Nine", "Oblivious"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "rhyperior": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dragontail", "earthquake", "icepunch", "megahorn", "stoneedge"],
- "abilities": ["Solid Rock"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["earthquake", "icepunch", "megahorn", "rockpolish", "stoneedge"],
- "abilities": ["Solid Rock"]
- }
- ]
- },
- "tangrowth": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "knockoff", "leafstorm", "leechseed", "morningsun", "powerwhip", "rockslide", "sleeppowder", "sludgebomb"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["earthquake", "gigadrain", "knockoff", "powerwhip", "rockslide", "sludgebomb"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "electivire": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
- "abilities": ["Motor Drive"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "magmortar": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "fireblast", "focusblast", "hiddenpowerice", "taunt", "thunderbolt"],
- "abilities": ["Flame Body"],
- "preferredTypes": ["Electric"]
- }
- ]
- },
- "togekiss": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["airslash", "aurasphere", "nastyplot", "roost", "thunderwave"],
- "abilities": ["Serene Grace"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["airslash", "defog", "healbell", "roost", "thunderwave"],
- "abilities": ["Serene Grace"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["airslash", "aurasphere", "dazzlinggleam", "trick"],
- "abilities": ["Serene Grace"]
- }
- ]
- },
- "yanmega": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["airslash", "bugbuzz", "hiddenpowerground", "protect"],
- "abilities": ["Speed Boost"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["airslash", "bugbuzz", "gigadrain", "uturn"],
- "abilities": ["Tinted Lens"]
- }
- ]
- },
- "leafeon": {
- "level": 87,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["doubleedge", "knockoff", "leafblade", "substitute", "swordsdance", "synthesis"],
- "abilities": ["Chlorophyll"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "glaceon": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "hiddenpowerground", "icebeam", "protect", "wish"],
- "abilities": ["Ice Body"]
- },
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "toxic", "wish"],
- "abilities": ["Ice Body"]
- }
- ]
- },
- "gliscor": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "protect", "substitute", "toxic"],
- "abilities": ["Poison Heal"]
- },
- {
- "role": "Staller",
- "movepool": ["defog", "earthquake", "knockoff", "roost", "stealthrock", "taunt", "toxic", "uturn"],
- "abilities": ["Poison Heal"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "facade", "roost", "swordsdance"],
- "abilities": ["Poison Heal"]
- }
- ]
- },
- "mamoswine": {
- "level": 78,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthquake", "iceshard", "iciclecrash", "knockoff", "stealthrock"],
- "abilities": ["Thick Fat"]
- }
- ]
- },
- "porygonz": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["icebeam", "nastyplot", "shadowball", "thunderbolt", "triattack", "trick"],
- "abilities": ["Adaptability", "Download"]
- }
- ]
- },
- "gallade": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "icepunch", "knockoff", "shadowsneak", "swordsdance", "zenheadbutt", "machpunch"],
- "abilities": ["Justified"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "gallademega": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["sacredsword", "knockoff", "swordsdance", "psychocut"],
- "abilities": ["Justified"]
- }
- ]
- },
- "probopass": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthpower", "flashcannon", "stealthrock", "thunderwave", "toxic", "voltswitch"],
- "abilities": ["Magnet Pull"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthpower", "powergem", "stealthrock", "thunderwave", "toxic", "voltswitch"],
- "abilities": ["Magnet Pull"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "dusknoir": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "painsplit", "shadowsneak", "toxic", "willowisp"],
- "abilities": ["Frisk", "Pressure"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "icepunch", "painsplit", "toxic", "willowisp"],
- "abilities": ["Frisk", "Pressure"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "protect", "shadowsneak", "toxic"],
- "abilities": ["Frisk", "Pressure"]
- }
- ]
- },
- "froslass": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["destinybond", "icebeam", "shadowball", "spikes", "taunt", "thunderwave"],
- "abilities": ["Cursed Body"]
- }
- ]
- },
- "rotom": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["hiddenpowerice", "painsplit", "shadowball", "thunderbolt", "trick", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rotomheat": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hiddenpowerice", "overheat", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rotomwash": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hydropump", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rotomfrost": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["blizzard", "painsplit", "thunderbolt", "trick", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rotomfan": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["airslash", "painsplit", "thunderbolt", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "rotommow": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["hiddenpowerice", "leafstorm", "thunderbolt", "trick", "voltswitch", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "uxie": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn", "yawn"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "mesprit": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "healingwish", "hiddenpowerfire", "psychic", "psyshock", "signalbeam", "thunderbolt", "uturn"],
- "abilities": ["Levitate"],
- "preferredTypes": ["Bug"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "psychic", "stealthrock", "thunderwave", "toxic", "uturn"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "azelf": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dazzlinggleam", "fireblast", "nastyplot", "psychic", "psyshock", "uturn"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Fast Support",
- "movepool": ["explosion", "fireblast", "knockoff", "psychic", "stealthrock", "taunt", "uturn"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "dialga": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dracometeor", "dragontail", "fireblast", "flashcannon", "stealthrock", "thunderbolt", "toxic"],
- "abilities": ["Pressure"],
- "preferredTypes": ["Fire"]
- }
- ]
- },
- "palkia": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dracometeor", "fireblast", "hydropump", "spacialrend", "thunderwave"],
- "abilities": ["Pressure"],
- "preferredTypes": ["Fire"]
- }
- ]
- },
- "heatran": {
- "level": 78,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthpower", "flashcannon", "lavaplume", "magmastorm", "stealthrock", "taunt", "toxic"],
- "abilities": ["Flash Fire"]
- },
- {
- "role": "Staller",
- "movepool": ["earthpower", "magmastorm", "protect", "toxic"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "regigigas": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["drainpunch", "knockoff", "return", "thunderwave"],
- "abilities": ["Slow Start"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "return", "substitute", "thunderwave"],
- "abilities": ["Slow Start"]
- }
- ]
- },
- "giratinaorigin": {
- "level": 70,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dracometeor", "hex", "shadowsneak", "thunderwave", "willowisp"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["defog", "dracometeor", "earthquake", "outrage", "shadowball", "shadowsneak", "willowisp"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "giratina": {
- "level": 73,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["dragontail", "rest", "shadowball", "sleeptalk", "willowisp"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "dragonpulse", "rest", "sleeptalk"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["defog", "dragontail", "rest", "shadowball", "willowisp"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "cresselia": {
- "level": 80,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "moonblast", "moonlight", "psyshock"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["moonblast", "moonlight", "psychic", "thunderwave", "toxic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "phione": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "icebeam", "knockoff", "scald", "toxic", "uturn"],
- "abilities": ["Hydration"]
- }
- ]
- },
- "manaphy": {
- "level": 76,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["energyball", "icebeam", "surf", "tailglow"],
- "abilities": ["Hydration"]
- }
- ]
- },
- "darkrai": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["darkpulse", "darkvoid", "nastyplot", "sludgebomb"],
- "abilities": ["Bad Dreams"],
- "preferredTypes": ["Poison"]
- }
- ]
- },
- "shaymin": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["airslash", "earthpower", "leechseed", "seedflare", "substitute", "synthesis"],
- "abilities": ["Natural Cure"],
- "preferredTypes": ["Flying"]
- }
- ]
- },
- "shayminsky": {
- "level": 73,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["airslash", "earthpower", "hiddenpowerice", "leechseed", "seedflare", "substitute"],
- "abilities": ["Serene Grace"]
- }
- ]
- },
- "arceus": {
- "level": 71,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "extremespeed", "recover", "shadowclaw", "swordsdance"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusbug": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusdark": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "defog", "fireblast", "judgment", "recover", "sludgebomb", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusdragon": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "willowisp"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "extremespeed", "outrage", "recover", "swordsdance"],
- "abilities": ["Multitype"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "arceuselectric": {
- "level": 71,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "icebeam", "judgment", "recover"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusfairy": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "judgment", "recover"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusfighting": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "icebeam", "judgment", "recover", "shadowball"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusfire": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "energyball", "judgment", "recover"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusflying": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "judgment", "recover"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusghost": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "defog", "focusblast", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["brickbreak", "extremespeed", "shadowforce", "swordsdance"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusgrass": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "fireblast", "judgment", "recover"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "earthpower", "icebeam", "judgment"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusground": {
- "level": 71,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
- "abilities": ["Multitype"],
- "preferredTypes": ["Rock"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusice": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "judgment", "recover", "thunderbolt"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceuspoison": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "icebeam", "recover", "sludgebomb"],
- "abilities": ["Multitype"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "earthpower", "icebeam", "recover", "sludgebomb"],
- "abilities": ["Multitype"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "arceuspsychic": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "fireblast", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "earthpower", "fireblast", "judgment", "recover"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceusrock": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "extremespeed", "recover", "stoneedge", "swordsdance"],
- "abilities": ["Multitype"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "arceussteel": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["defog", "earthquake", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "arceuswater": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "icebeam", "judgment", "recover", "toxic", "willowisp"],
- "abilities": ["Multitype"]
- }
- ]
- },
- "victini": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["boltstrike", "uturn", "vcreate", "zenheadbutt"],
- "abilities": ["Victory Star"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["boltstrike", "energyball", "focusblast", "glaciate", "psychic", "uturn", "vcreate"],
- "abilities": ["Victory Star"],
- "preferredTypes": ["Electric"]
- }
- ]
- },
- "serperior": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dragonpulse", "glare", "hiddenpowerfire", "leafstorm", "leechseed", "substitute"],
- "abilities": ["Contrary"]
- }
- ]
- },
- "emboar": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["flareblitz", "headsmash", "suckerpunch", "superpower", "wildcharge"],
- "abilities": ["Reckless"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["flareblitz", "grassknot", "suckerpunch", "superpower", "wildcharge"],
- "abilities": ["Reckless"]
- }
- ]
- },
- "samurott": {
- "level": 87,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["aquajet", "grassknot", "hydropump", "icebeam", "knockoff", "megahorn", "scald", "superpower"],
- "abilities": ["Torrent"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["aquajet", "knockoff", "megahorn", "superpower", "swordsdance", "waterfall"],
- "abilities": ["Torrent"]
- }
- ]
- },
- "watchog": {
- "level": 94,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["hypnosis", "knockoff", "return", "superfang"],
- "abilities": ["Analytic"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["hypnosis", "knockoff", "return", "substitute", "swordsdance"],
- "abilities": ["Analytic"]
- }
- ]
- },
- "stoutland": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["crunch", "facade", "return", "superpower"],
- "abilities": ["Scrappy"]
- }
- ]
- },
- "liepard": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["copycat", "encore", "knockoff", "substitute", "thunderwave", "uturn"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "simisage": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["gunkshot", "hiddenpowerice", "knockoff", "leafstorm", "rockslide", "superpower"],
- "abilities": ["Overgrow"],
- "preferredTypes": ["Fighting"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "gigadrain", "hiddenpowerice", "nastyplot", "substitute"],
- "abilities": ["Overgrow"]
- }
- ]
- },
- "simisear": {
- "level": 88,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["fireblast", "focusblast", "grassknot", "hiddenpowerrock", "nastyplot", "substitute"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "simipour": {
- "level": 86,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["grassknot", "hydropump", "icebeam", "nastyplot", "substitute"],
- "abilities": ["Torrent"],
- "preferredTypes": ["Ice"]
- }
- ]
- },
- "musharna": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "hiddenpowerfighting", "moonlight", "psyshock", "signalbeam"],
- "abilities": ["Synchronize"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "moonlight", "psychic", "signalbeam", "thunderwave", "toxic"],
- "abilities": ["Synchronize"]
- }
- ]
- },
- "unfezant": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["nightslash", "pluck", "return", "roost", "toxic", "uturn"],
- "abilities": ["Super Luck"]
- }
- ]
- },
- "zebstrika": {
- "level": 87,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerice", "overheat", "voltswitch", "wildcharge"],
- "abilities": ["Sap Sipper"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerice", "overheat", "thunderbolt", "voltswitch"],
- "abilities": ["Lightning Rod"]
- }
- ]
- },
- "gigalith": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "superpower", "toxic"],
- "abilities": ["Sturdy"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "swoobat": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "heatwave", "roost", "storedpower"],
- "abilities": ["Simple"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["airslash", "calmmind", "heatwave", "roost", "storedpower"],
- "abilities": ["Simple"]
- }
- ]
- },
- "excadrill": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "ironhead", "rapidspin", "rockslide", "swordsdance"],
- "abilities": ["Mold Breaker", "Sand Rush"]
- }
- ]
- },
- "audino": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "protect", "toxic", "wish", "voltswitch"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "audinomega": {
- "level": 82,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["icebeam", "protect", "voltswitch", "wish", "toxic"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["thunderwave", "icebeam", "knockoff", "voltswitch", "toxic"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "conkeldurr": {
- "level": 81,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["drainpunch", "facade", "knockoff", "machpunch"],
- "abilities": ["Guts"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["bulkup", "drainpunch", "knockoff", "machpunch"],
- "abilities": ["Iron Fist"]
- }
- ]
- },
- "seismitoad": {
- "level": 84,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "hydropump", "knockoff", "raindance", "sludgewave"],
- "abilities": ["Swift Swim"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "knockoff", "scald", "stealthrock", "toxic"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "protect", "scald", "toxic"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "throh": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bulkup", "circlethrow", "knockoff", "rest", "sleeptalk"],
- "abilities": ["Guts"]
- }
- ]
- },
- "sawk": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bulkup", "closecombat", "earthquake", "knockoff", "poisonjab", "stoneedge"],
- "abilities": ["Mold Breaker", "Sturdy"],
- "preferredTypes": ["Dark"]
- }
- ]
- },
- "leavanny": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["knockoff", "leafblade", "stickyweb", "toxic", "xscissor"],
- "abilities": ["Chlorophyll", "Swarm"]
- }
- ]
- },
- "scolipede": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["earthquake", "megahorn", "poisonjab", "spikes", "toxicspikes"],
- "abilities": ["Speed Boost"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "megahorn", "poisonjab", "swordsdance"],
- "abilities": ["Speed Boost"]
- }
- ]
- },
- "whimsicott": {
- "level": 85,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["encore", "energyball", "moonblast", "stunspore", "taunt", "toxic", "uturn"],
- "abilities": ["Prankster"]
- },
- {
- "role": "Staller",
- "movepool": ["encore", "leechseed", "moonblast", "substitute"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "lilligant": {
- "level": 86,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "sleeppowder"],
- "abilities": ["Chlorophyll"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerfire", "hiddenpowerrock", "petaldance", "quiverdance", "sleeppowder"],
- "abilities": ["Own Tempo"]
- }
- ]
- },
- "basculin": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["aquajet", "crunch", "superpower", "waterfall", "zenheadbutt"],
- "abilities": ["Adaptability"]
- }
- ]
- },
- "krookodile": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "knockoff", "pursuit", "stealthrock", "stoneedge", "superpower"],
- "abilities": ["Intimidate"]
- }
- ]
- },
- "darmanitan": {
- "level": 80,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthquake", "flareblitz", "rockslide", "superpower", "uturn"],
- "abilities": ["Sheer Force"]
- }
- ]
- },
- "maractus": {
- "level": 98,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["gigadrain", "hiddenpowerfire", "knockoff", "spikes", "synthesis", "toxic"],
- "abilities": ["Storm Drain", "Water Absorb"]
- },
- {
- "role": "Staller",
- "movepool": ["gigadrain", "hiddenpowerfire", "hiddenpowerice", "leechseed", "spikyshield"],
- "abilities": ["Storm Drain", "Water Absorb"]
- }
- ]
- },
- "crustle": {
- "level": 82,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "knockoff", "shellsmash", "stoneedge", "xscissor"],
- "abilities": ["Sturdy"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "scrafty": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dragondance", "drainpunch", "ironhead", "knockoff"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["bulkup", "drainpunch", "knockoff", "rest"],
- "abilities": ["Shed Skin"]
- }
- ]
- },
- "sigilyph": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["airslash", "calmmind", "heatwave", "psyshock", "roost"],
- "abilities": ["Magic Guard"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["airslash", "energyball", "heatwave", "icebeam", "psychic", "psyshock"],
- "abilities": ["Tinted Lens"],
- "preferredTypes": ["Psychic"]
- },
- {
- "role": "Staller",
- "movepool": ["cosmicpower", "psychoshift", "roost", "storedpower"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "cofagrigus": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["haze", "painsplit", "shadowball", "toxicspikes", "willowisp"],
- "abilities": ["Mummy"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["hiddenpowerfighting", "nastyplot", "shadowball", "trickroom"],
- "abilities": ["Mummy"]
- }
- ]
- },
- "carracosta": {
- "level": 87,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["aquajet", "earthquake", "icebeam", "shellsmash", "stoneedge", "waterfall"],
- "abilities": ["Solid Rock", "Sturdy", "Swift Swim"]
- }
- ]
- },
- "archeops": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["acrobatics", "defog", "earthquake", "knockoff", "roost", "stealthrock", "stoneedge", "uturn"],
- "abilities": ["Defeatist"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "garbodor": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["drainpunch", "gunkshot", "haze", "painsplit", "spikes", "toxic", "toxicspikes"],
- "abilities": ["Aftermath"]
- }
- ]
- },
- "zoroark": {
- "level": 81,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["darkpulse", "flamethrower", "focusblast", "nastyplot", "sludgebomb", "trick", "uturn"],
- "abilities": ["Illusion"],
- "preferredTypes": ["Poison"]
- }
- ]
- },
- "cinccino": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["bulletseed", "knockoff", "rockblast", "tailslap", "uturn"],
- "abilities": ["Skill Link"],
- "preferredTypes": ["Grass"]
- }
- ]
- },
- "gothitelle": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["calmmind", "hiddenpowerfighting", "psychic", "shadowball", "signalbeam", "thunderbolt", "trick"],
- "abilities": ["Shadow Tag"]
- }
- ]
- },
- "reuniclus": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "focusblast", "psychic", "psyshock", "recover"],
- "abilities": ["Magic Guard"]
- }
- ]
- },
- "swanna": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "defog", "roost", "scald", "toxic"],
- "abilities": ["Hydration"]
- }
- ]
- },
- "vanilluxe": {
- "level": 88,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["autotomize", "explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam", "toxic"],
- "abilities": ["Weak Armor"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["explosion", "flashcannon", "freezedry", "hiddenpowerground", "icebeam"],
- "abilities": ["Weak Armor"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "sawsbuck": {
- "level": 86,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["hornleech", "jumpkick", "return", "substitute", "swordsdance"],
- "abilities": ["Sap Sipper"],
- "preferredTypes": ["Normal"]
- }
- ]
- },
- "emolga": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["acrobatics", "encore", "knockoff", "nuzzle", "roost", "thunderbolt", "toxic", "uturn"],
- "abilities": ["Motor Drive"]
- }
- ]
- },
- "escavalier": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["drillrun", "ironhead", "knockoff", "megahorn", "swordsdance"],
- "abilities": ["Overcoat", "Swarm"]
- }
- ]
- },
- "amoonguss": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["clearsmog", "foulplay", "gigadrain", "hiddenpowerground", "sludgebomb", "spore"],
- "abilities": ["Regenerator"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["gigadrain", "sludgebomb", "spore", "synthesis"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "jellicent": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["icebeam", "recover", "scald", "shadowball", "taunt"],
- "abilities": ["Water Absorb"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["hex", "recover", "scald", "toxic", "willowisp"],
- "abilities": ["Water Absorb"]
- }
- ]
- },
- "alomomola": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "protect", "scald", "toxic", "wish"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "galvantula": {
- "level": 79,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["bugbuzz", "energyball", "stickyweb", "thunder", "voltswitch"],
- "abilities": ["Compound Eyes"],
- "preferredTypes": ["Bug"]
- }
- ]
- },
- "ferrothorn": {
- "level": 71,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["gyroball", "leechseed", "powerwhip", "spikes", "stealthrock"],
- "abilities": ["Iron Barbs"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "powerwhip", "spikes", "stealthrock", "thunderwave", "toxic"],
- "abilities": ["Iron Barbs"]
- }
- ]
- },
- "klinklang": {
- "level": 87,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["geargrind", "return", "shiftgear", "substitute", "wildcharge"],
- "abilities": ["Clear Body"]
- }
- ]
- },
- "eelektross": {
- "level": 85,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["discharge", "flamethrower", "gigadrain", "hiddenpowerice", "knockoff", "superpower", "uturn"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "beheeyem": {
- "level": 92,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["hiddenpowerfighting", "psychic", "psyshock", "recover", "signalbeam", "thunderbolt", "trick", "trickroom"],
- "abilities": ["Analytic"],
- "preferredTypes": ["Bug"]
- }
- ]
- },
- "chandelure": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["energyball", "fireblast", "shadowball", "trick"],
- "abilities": ["Flash Fire"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "energyball", "fireblast", "shadowball", "substitute"],
- "abilities": ["Flame Body", "Flash Fire"]
- }
- ]
- },
- "haxorus": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "outrage", "poisonjab", "taunt"],
- "abilities": ["Mold Breaker"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "beartic": {
- "level": 94,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["aquajet", "iciclecrash", "stoneedge", "superpower", "swordsdance"],
- "abilities": ["Swift Swim"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "cryogonal": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["freezedry", "haze", "hiddenpowerground", "rapidspin", "recover", "toxic"],
- "abilities": ["Levitate"]
- }
- ]
- },
- "accelgor": {
- "level": 89,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["bugbuzz", "encore", "focusblast", "hiddenpowerground", "hiddenpowerrock", "spikes", "uturn"],
- "abilities": ["Hydration", "Sticky Hold"]
- }
- ]
- },
- "stunfisk": {
- "level": 88,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["discharge", "earthpower", "scald", "stealthrock", "toxic"],
- "abilities": ["Static"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["discharge", "earthpower", "protect", "rest", "sleeptalk", "toxic"],
- "abilities": ["Static"]
- }
- ]
- },
- "mienshao": {
- "level": 81,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["highjumpkick", "knockoff", "poisonjab", "stoneedge", "swordsdance", "uturn"],
- "abilities": ["Reckless"],
- "preferredTypes": ["Dark"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["fakeout", "highjumpkick", "knockoff", "uturn"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "druddigon": {
- "level": 86,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["firepunch", "glare", "gunkshot", "outrage", "suckerpunch"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Poison"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["dragontail", "earthquake", "glare", "gunkshot", "outrage", "stealthrock", "suckerpunch"],
- "abilities": ["Rough Skin"]
- }
- ]
- },
- "golurk": {
- "level": 83,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["dynamicpunch", "earthquake", "icepunch", "rockpolish", "stealthrock", "stoneedge"],
- "abilities": ["No Guard"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "bisharp": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["ironhead", "knockoff", "pursuit", "suckerpunch", "swordsdance"],
- "abilities": ["Defiant"]
- }
- ]
- },
- "bouffalant": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthquake", "headcharge", "stoneedge", "superpower", "swordsdance"],
- "abilities": ["Reckless", "Sap Sipper"]
- }
- ]
- },
- "braviary": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "bulkup", "roost", "superpower"],
- "abilities": ["Defiant"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["bravebird", "return", "superpower", "uturn"],
- "abilities": ["Defiant"]
- }
- ]
- },
- "mandibuzz": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "defog", "foulplay", "knockoff", "roost", "taunt", "toxic", "uturn"],
- "abilities": ["Overcoat"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["defog", "foulplay", "roost", "taunt", "toxic", "uturn"],
- "abilities": ["Overcoat"]
- }
- ]
- },
- "heatmor": {
- "level": 92,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["fireblast", "gigadrain", "knockoff", "suckerpunch", "superpower"],
- "abilities": ["Flash Fire"]
- }
- ]
- },
- "durant": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["honeclaws", "ironhead", "rockslide", "superpower", "xscissor"],
- "abilities": ["Hustle"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "hydreigon": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["darkpulse", "dracometeor", "earthpower", "fireblast", "flashcannon", "roost", "uturn"],
- "abilities": ["Levitate"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["darkpulse", "dracometeor", "fireblast", "roost", "toxic", "uturn"],
- "abilities": ["Levitate"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["darkpulse", "dracometeor", "flashcannon", "superpower", "uturn"],
- "abilities": ["Levitate"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "volcarona": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bugbuzz", "fierydance", "fireblast", "gigadrain", "hiddenpowerrock", "quiverdance", "roost"],
- "abilities": ["Flame Body", "Swarm"]
- }
- ]
- },
- "cobalion": {
- "level": 77,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["closecombat", "ironhead", "stealthrock", "stoneedge", "swordsdance"],
- "abilities": ["Justified"]
- }
- ]
- },
- "terrakion": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "earthquake", "quickattack", "stealthrock", "stoneedge", "swordsdance"],
- "abilities": ["Justified"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "virizion": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["closecombat", "leafblade", "stoneedge", "swordsdance"],
- "abilities": ["Justified"]
- }
- ]
- },
- "tornadus": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
- "abilities": ["Defiant", "Prankster"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["acrobatics", "bulkup", "knockoff", "superpower", "taunt"],
- "abilities": ["Defiant"],
- "preferredTypes": ["Fighting"]
- }
- ]
- },
- "tornadustherian": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Support",
- "movepool": ["heatwave", "hurricane", "knockoff", "superpower", "taunt", "uturn"],
- "abilities": ["Regenerator"]
- }
- ]
- },
- "thundurus": {
- "level": 78,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "substitute", "thunderbolt"],
- "abilities": ["Prankster"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerflying", "hiddenpowerice", "knockoff", "superpower", "taunt", "thunderbolt", "thunderwave"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "thundurustherian": {
- "level": 78,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "hiddenpowerflying", "hiddenpowerice", "nastyplot", "thunderbolt", "voltswitch"],
- "abilities": ["Volt Absorb"]
- }
- ]
- },
- "reshiram": {
- "level": 73,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["blueflare", "dracometeor", "roost", "toxic"],
- "abilities": ["Turboblaze"]
- }
- ]
- },
- "zekrom": {
- "level": 74,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["boltstrike", "honeclaws", "outrage", "roost", "substitute"],
- "abilities": ["Teravolt"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["boltstrike", "dracometeor", "outrage", "voltswitch"],
- "abilities": ["Teravolt"]
- }
- ]
- },
- "landorus": {
- "level": 76,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["earthpower", "focusblast", "knockoff", "psychic", "rockpolish", "rockslide", "sludgewave", "stealthrock"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Rock"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "earthpower", "focusblast", "psychic", "rockpolish", "sludgewave"],
- "abilities": ["Sheer Force"],
- "preferredTypes": ["Poison"]
- }
- ]
- },
- "landorustherian": {
- "level": 76,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["earthquake", "knockoff", "stealthrock", "stoneedge", "toxic", "uturn"],
- "abilities": ["Intimidate"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "knockoff", "rockpolish", "stoneedge", "superpower", "swordsdance"],
- "abilities": ["Intimidate"],
- "preferredTypes": ["Rock"]
- }
- ]
- },
- "kyurem": {
- "level": 78,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["earthpower", "icebeam", "roost", "substitute"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["dracometeor", "earthpower", "icebeam", "outrage", "roost", "substitute"],
- "abilities": ["Pressure"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["dracometeor", "earthpower", "focusblast", "icebeam", "outrage"],
- "abilities": ["Pressure"]
- }
- ]
- },
- "kyuremblack": {
- "level": 76,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthpower", "fusionbolt", "icebeam", "outrage", "roost", "substitute"],
- "abilities": ["Teravolt"]
- }
- ]
- },
- "kyuremwhite": {
- "level": 74,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dracometeor", "earthpower", "fusionflare", "icebeam", "roost"],
- "abilities": ["Turboblaze"]
- }
- ]
- },
- "keldeo": {
- "level": 79,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["calmmind", "hiddenpowerelectric", "hiddenpowerflying", "hydropump", "icywind", "scald", "secretsword"],
- "abilities": ["Justified"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "scald", "secretsword", "substitute"],
- "abilities": ["Justified"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "hydropump", "scald", "secretsword"],
- "abilities": ["Justified"]
- }
- ]
- },
- "meloetta": {
- "level": 82,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "focusblast", "hypervoice", "psyshock", "uturn"],
- "abilities": ["Serene Grace"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["closecombat", "knockoff", "relicsong", "return"],
- "abilities": ["Serene Grace"]
- }
- ]
- },
- "genesect": {
- "level": 72,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["blazekick", "ironhead", "shiftgear", "thunderbolt", "xscissor"],
- "abilities": ["Download"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["blazekick", "extremespeed", "ironhead", "uturn"],
- "abilities": ["Download"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["bugbuzz", "flamethrower", "flashcannon", "icebeam", "thunderbolt", "uturn"],
- "abilities": ["Download"],
- "preferredTypes": ["Bug"]
- }
- ]
- },
- "chesnaught": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["bulkup", "drainpunch", "spikes", "synthesis", "toxic", "woodhammer"],
- "abilities": ["Bulletproof"]
- },
- {
- "role": "Staller",
- "movepool": ["drainpunch", "leechseed", "spikyshield", "woodhammer"],
- "abilities": ["Bulletproof"]
- }
- ]
- },
- "delphox": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "dazzlinggleam", "fireblast", "grassknot", "psyshock", "switcheroo"],
- "abilities": ["Blaze"]
- }
- ]
- },
- "greninja": {
- "level": 79,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["grassknot", "gunkshot", "hydropump", "icebeam", "spikes", "taunt", "toxicspikes", "uturn"],
- "abilities": ["Protean"],
- "preferredTypes": ["Poison"]
- }
- ]
- },
- "diggersby": {
- "level": 81,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["agility", "earthquake", "knockoff", "quickattack", "return", "swordsdance"],
- "abilities": ["Huge Power"],
- "preferredTypes": ["Normal"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["earthquake", "foulplay", "quickattack", "return", "uturn"],
- "abilities": ["Huge Power"],
- "preferredTypes": ["Normal"]
- }
- ]
- },
- "talonflame": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bravebird", "overheat", "roost", "uturn", "willowisp"],
- "abilities": ["Gale Wings"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["bravebird", "flareblitz", "roost", "swordsdance"],
- "abilities": ["Gale Wings"]
- }
- ]
- },
- "vivillon": {
- "level": 83,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["energyball", "hurricane", "quiverdance", "sleeppowder"],
- "abilities": ["Compound Eyes"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["bugbuzz", "hurricane", "quiverdance", "sleeppowder"],
- "abilities": ["Compound Eyes"]
- }
- ]
- },
- "pyroar": {
- "level": 86,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["fireblast", "hiddenpowergrass", "hypervoice", "solarbeam", "sunnyday", "willowisp", "workup"],
- "abilities": ["Unnerve"],
- "preferredTypes": ["Normal"]
- }
- ]
- },
- "floetteeternal": {
- "level": 81,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["hiddenpowerfire", "hiddenpowerground", "lightofruin", "moonblast", "psychic"],
- "abilities": ["Flower Veil"]
- }
- ]
- },
- "florges": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["aromatherapy", "moonblast", "synthesis", "toxic"],
- "abilities": ["Flower Veil"]
- },
- {
- "role": "Staller",
- "movepool": ["moonblast", "protect", "toxic", "wish"],
- "abilities": ["Flower Veil"]
- },
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "hiddenpowerground", "moonblast", "synthesis"],
- "abilities": ["Flower Veil"]
- }
- ]
- },
- "gogoat": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["bulkup", "earthquake", "hornleech", "milkdrink", "toxic"],
- "abilities": ["Sap Sipper"]
- }
- ]
- },
- "pangoro": {
- "level": 84,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["drainpunch", "gunkshot", "icepunch", "knockoff", "superpower"],
- "abilities": ["Iron Fist"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["drainpunch", "gunkshot", "knockoff", "swordsdance"],
- "abilities": ["Iron Fist"]
- }
- ]
- },
- "furfrou": {
- "level": 85,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["rest", "return", "thunderwave", "toxic", "uturn"],
- "abilities": ["Fur Coat"]
- },
- {
- "role": "Staller",
- "movepool": ["cottonguard", "rest", "return", "substitute", "toxic"],
- "abilities": ["Fur Coat"]
- }
- ]
- },
- "meowstic": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["healbell", "lightscreen", "psychic", "reflect", "signalbeam", "thunderwave", "toxic", "yawn"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "meowsticf": {
- "level": 90,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "darkpulse", "psychic", "psyshock", "signalbeam", "thunderbolt"],
- "abilities": ["Competitive"],
- "preferredTypes": ["Bug"]
- }
- ]
- },
- "doublade": {
- "level": 82,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["ironhead", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
- "abilities": ["No Guard"]
- }
- ]
- },
- "aegislash": {
- "level": 78,
- "sets": [
- {
- "role": "Staller",
- "movepool": ["ironhead", "kingsshield", "shadowball", "substitute", "toxic"],
- "abilities": ["Stance Change"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["ironhead", "kingsshield", "sacredsword", "shadowclaw", "shadowsneak", "swordsdance"],
- "abilities": ["Stance Change"],
- "preferredTypes": ["Steel"]
- }
- ]
- },
- "aromatisse": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["calmmind", "moonblast", "protect", "toxic", "wish"],
- "abilities": ["Aroma Veil"]
- }
- ]
- },
- "slurpuff": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["bellydrum", "drainpunch", "playrough", "return"],
- "abilities": ["Unburden"]
- }
- ]
- },
- "malamar": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["knockoff", "rest", "sleeptalk", "superpower"],
- "abilities": ["Contrary"]
- },
- {
- "role": "Fast Attacker",
- "movepool": ["knockoff", "psychocut", "rest", "superpower"],
- "abilities": ["Contrary"]
- }
- ]
- },
- "barbaracle": {
- "level": 82,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["earthquake", "lowkick", "razorshell", "shellsmash", "stoneedge"],
- "abilities": ["Tough Claws"]
- }
- ]
- },
- "dragalge": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["dracometeor", "dragontail", "focusblast", "sludgewave", "toxicspikes"],
- "abilities": ["Adaptability"]
- },
- {
- "role": "Wallbreaker",
- "movepool": ["dracometeor", "dragonpulse", "focusblast", "sludgewave"],
- "abilities": ["Adaptability"]
- }
- ]
- },
- "clawitzer": {
- "level": 85,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn", "waterpulse"],
- "abilities": ["Mega Launcher"]
- },
- {
- "role": "AV Pivot",
- "movepool": ["aurasphere", "darkpulse", "icebeam", "scald", "uturn"],
- "abilities": ["Mega Launcher"]
- }
- ]
- },
- "heliolisk": {
- "level": 83,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["darkpulse", "glare", "hypervoice", "surf", "thunderbolt", "voltswitch"],
- "abilities": ["Dry Skin"],
- "preferredTypes": ["Normal"]
- },
- {
- "role": "Setup Sweeper",
- "movepool": ["hypervoice", "raindance", "surf", "thunder"],
- "abilities": ["Dry Skin"]
- }
- ]
- },
- "tyrantrum": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["dragondance", "earthquake", "headsmash", "outrage", "superpower"],
- "abilities": ["Rock Head"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "aurorus": {
- "level": 86,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["ancientpower", "blizzard", "earthpower", "freezedry", "haze", "stealthrock", "thunderwave"],
- "abilities": ["Snow Warning"],
- "preferredTypes": ["Ground"]
- },
- {
- "role": "Bulky Support",
- "movepool": ["ancientpower", "earthpower", "freezedry", "haze", "hypervoice", "stealthrock", "thunderwave"],
- "abilities": ["Refrigerate"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "sylveon": {
- "level": 84,
- "sets": [
- {
- "role": "Bulky Setup",
- "movepool": ["calmmind", "hypervoice", "protect", "wish"],
- "abilities": ["Pixilate"]
- }
- ]
- },
- "hawlucha": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["acrobatics", "highjumpkick", "skyattack", "substitute", "swordsdance"],
- "abilities": ["Unburden"]
- }
- ]
- },
- "dedenne": {
- "level": 89,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["protect", "recycle", "thunderbolt", "toxic"],
- "abilities": ["Cheek Pouch"]
- },
- {
- "role": "Staller",
- "movepool": ["recycle", "substitute", "superfang", "thunderbolt", "toxic", "uturn"],
- "abilities": ["Cheek Pouch"]
- }
- ]
- },
- "carbink": {
- "level": 91,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["lightscreen", "moonblast", "powergem", "reflect", "stealthrock", "toxic"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "goodra": {
- "level": 85,
- "sets": [
- {
- "role": "AV Pivot",
- "movepool": ["dracometeor", "dragontail", "earthquake", "fireblast", "powerwhip", "sludgebomb"],
- "abilities": ["Sap Sipper"]
- }
- ]
- },
- "klefki": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["dazzlinggleam", "foulplay", "spikes", "thunderwave"],
- "abilities": ["Prankster"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["magnetrise", "playrough", "spikes", "thunderwave"],
- "abilities": ["Prankster"]
- }
- ]
- },
- "trevenant": {
- "level": 91,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["drainpunch", "earthquake", "hornleech", "rockslide", "shadowclaw", "trickroom", "woodhammer"],
- "abilities": ["Natural Cure"]
- },
- {
- "role": "Staller",
- "movepool": ["earthquake", "hornleech", "protect", "toxic"],
- "abilities": ["Harvest"]
- }
- ]
- },
- "gourgeistsmall": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
- "abilities": ["Frisk"]
- }
- ]
- },
- "gourgeistlarge": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
- "abilities": ["Frisk"]
- }
- ]
- },
- "gourgeist": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
- "abilities": ["Frisk"]
- }
- ]
- },
- "gourgeistsuper": {
- "level": 87,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["seedbomb", "shadowsneak", "synthesis", "willowisp"],
- "abilities": ["Frisk"]
- }
- ]
- },
- "avalugg": {
- "level": 90,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["avalanche", "curse", "earthquake", "rapidspin", "recover"],
- "abilities": ["Sturdy"]
- }
- ]
- },
- "noivern": {
- "level": 80,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["boomburst", "dracometeor", "flamethrower", "hurricane", "roost", "switcheroo", "uturn"],
- "abilities": ["Infiltrator"]
- }
- ]
- },
- "xerneas": {
- "level": 64,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["focusblast", "geomancy", "moonblast", "psyshock"],
- "abilities": ["Fairy Aura"]
- }
- ]
- },
- "yveltal": {
- "level": 69,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["knockoff", "oblivionwing", "roost", "suckerpunch", "taunt", "toxic", "uturn"],
- "abilities": ["Dark Aura"]
- }
- ]
- },
- "zygarde": {
- "level": 77,
- "sets": [
- {
- "role": "Setup Sweeper",
- "movepool": ["dragondance", "earthquake", "extremespeed", "glare", "outrage", "stoneedge", "substitute"],
- "abilities": ["Aura Break"]
- }
- ]
- },
- "diancie": {
- "level": 81,
- "sets": [
- {
- "role": "Bulky Support",
- "movepool": ["diamondstorm", "earthpower", "healbell", "moonblast", "stealthrock", "toxic"],
- "abilities": ["Clear Body"]
- }
- ]
- },
- "dianciemega": {
- "level": 77,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["calmmind", "diamondstorm", "earthpower", "moonblast", "spikyshield"],
- "abilities": ["Clear Body"],
- "preferredTypes": ["Ground"]
- }
- ]
- },
- "hoopa": {
- "level": 84,
- "sets": [
- {
- "role": "Fast Attacker",
- "movepool": ["focusblast", "nastyplot", "psychic", "psyshock", "shadowball", "trick"],
- "abilities": ["Magician"]
- }
- ]
- },
- "hoopaunbound": {
- "level": 79,
- "sets": [
- {
- "role": "Wallbreaker",
- "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "trick", "zenheadbutt"],
- "abilities": ["Magician"],
- "preferredTypes": ["Psychic"]
- },
- {
- "role": "Bulky Attacker",
- "movepool": ["drainpunch", "gunkshot", "hyperspacefury", "psychic", "trick"],
- "abilities": ["Magician"],
- "preferredTypes": ["Psychic"]
- }
- ]
- },
- "volcanion": {
- "level": 79,
- "sets": [
- {
- "role": "Bulky Attacker",
- "movepool": ["earthpower", "fireblast", "sludgebomb", "steameruption", "superpower", "toxic"],
- "abilities": ["Water Absorb"]
- }
- ]
- }
-}
diff --git a/data/random-battles/gen6megasrevisited/teams.ts b/data/random-battles/gen6megasrevisited/teams.ts
deleted file mode 100644
index e494fb7299..0000000000
--- a/data/random-battles/gen6megasrevisited/teams.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import RandomGen6Teams from '../gen6/teams';
-
-export class RandomMRTeams extends RandomGen6Teams {
- override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./sets.json');
-}
-
-export default RandomMRTeams;
diff --git a/data/random-battles/gen9regeneration/random-sets.json b/data/random-battles/gen9regeneration/random-sets.json
new file mode 100644
index 0000000000..65e38f561d
--- /dev/null
+++ b/data/random-battles/gen9regeneration/random-sets.json
@@ -0,0 +1,1093 @@
+{
+ "venusaur": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["gigadrain", "leechseed", "sleeppowder", "dazzlinggleam", "substitute"],
+ "abilities": ["Misty Surge"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["psychic", "energyball", "knockoff", "sleeppowder", "dazzlinggleam", "synthesis"],
+ "abilities": ["Misty Surge"]
+ }
+ ]
+ },
+ "charizard": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["suckerpunch", "smokytorment", "earthquake", "flareblitz", "swordsdance"],
+ "abilities": ["Levitate"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["ceaselessedge", "flareblitz", "earthquake", "roost", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "blastoise": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["hiddenpower", "rapidspin", "roar", "powerwash", "toxic", "thunderbolt", "thunderwave"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["haze", "hiddenpower", "protect", "powerwash", "scald", "toxic"],
+ "abilities": ["Motor Drive"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "butterfree": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["airslash", "powdergale", "quiverdance", "sleeppowder", "hiddenpower", "strengthsap"],
+ "abilities": ["Tinted Lens", "Multiscale"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "beedrill": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["stickyweb", "knockoff", "poisonjab", "toxicspikes", "uturn"],
+ "abilities": ["Speed Boost"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["swords dance", "knockoff", "poisonjab", "xscissor", "closecombat", "protect"],
+ "abilities": ["Speed Boost"]
+ }
+ ]
+ },
+ "pidgeot": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bravebird", "closecombat", "roost", "uturn"],
+ "abilities": ["wingsofvictory"]
+ }
+ ]
+ },
+ "raticate": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["crunch", "facade", "gunkshot", "pestspread", "protect", "closecombat", "uturn"],
+ "abilities": ["Guts"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["crunch", "doubleedge", "gunkshot", "pestspread", "closecombat", "uturn"],
+ "abilities": ["Hustle", "Poison Touch"]
+ }
+ ]
+ },
+ "fearow": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "drillpeck", "drillrun", "return", "uturn"],
+ "abilities": ["Sniper"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillpeck", "drillrun", "focusenergy", "return"],
+ "abilities": ["Sniper"]
+ }
+ ]
+ },
+ "arbok": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquatail", "coil", "earthquake", "gunkshot", "suckerpunch", "trailblaze"],
+ "abilities": ["Intimidate"]
+
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["coil", "earthquake", "gunkshot", "rest"],
+ "abilities": ["Shed Skin"]
+ }
+ ]
+ },
+ "pikachu": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["extremespeed", "grassknot", "hiddenpower", "knockoff", "surf", "voltswitch", "volttackle"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "raichu": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["encore", "hiddenpower", "knockoff", "nastyplot", "nuzzle", "thunderbolt", "voltswitch", "alluringvoice"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Ice"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "grassknot", "nastyplot", "surf", "thunderbolt", "voltswitch", "alluringvoice"],
+ "abilities": ["Lightning Rod"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "sandslash": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "knockoff", "rapidspin", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Sand Rush"]
+ }
+ ]
+ },
+ "nidoqueen": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "stealthrock", "toxicspikes"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "poisonjab", "stealthrock", "toxicspikes", "moonlight"],
+ "abilities": ["Sheer Force", "Natural Cure", "Poison Point"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "nidoking": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthpower", "fireblast", "icebeam", "poisonjab", "sludgewave", "substitute", "throatchop"],
+ "abilities": ["Sheer Force"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["poisonjab", "earthquake", "headsmash", "superpower", "barbbarrage"],
+ "abilities": ["patriarch"]
+ }
+ ]
+ },
+ "clefable": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "knockoff", "moonblast", "softboiled", "stealthrock", "thunderwave"],
+ "abilities": ["Magic Guard", "Unaware"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "fireblast", "moonblast", "softboiled"],
+ "abilities": ["Magic Guard", "Unaware"]
+ }
+ ]
+ },
+ "ninetales": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["fireblast", "hiddenpower", "nastyplot", "solarbeam"],
+ "abilities": ["Drought"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["fireblast", "nastyplot", "solarbeam", "substitute", "willowisp"],
+ "abilities": ["Drought"],
+ "preferredTypes": ["Grass"]
+ }
+ ]
+ },
+ "wigglytuff": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["dazzlinggleam", "rapid spin", "healbell", "knockoff", "protect", "stealthrock", "thunderwave", "wish", "encore"],
+ "abilities": ["Ballooning"]
+ }
+ ]
+ },
+ "vileplume": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["aromatherapy", "gigadrain", "hiddenpower", "sleeppowder", "sludgebomb", "strengthsap"],
+ "abilities": ["Effect Spore"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ },
+ "parasect": {
+ "level": 99,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["aromatherapy", "knockoff", "leechlife", "seedbomb", "spore", "stunspore", "swordsdance"],
+ "abilities": ["Dry Skin"],
+ "preferredTypes": ["Bug"]
+ }
+ ]
+ },
+ "venomoth": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bugbuzz", "quiverdance", "sleeppowder", "sludgebomb"],
+ "abilities": ["Tinted Lens"]
+ }
+ ]
+ },
+ "dugtrio": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["earthquake", "honeclaws", "stealthrock", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "earthquake", "stoneedge", "suckerpunch"],
+ "abilities": ["Arena Trap"]
+ }
+ ]
+ },
+ "persian": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "knockoff", "return", "seedbomb", "uturn"],
+ "abilities": ["Limber"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["doubleedge", "fakeout", "knockoff", "return", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpower", "hypervoice", "nastyplot", "shadowball"],
+ "abilities": ["Technician"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "golduck": {
+ "level": 93,
+ "sets": [
+ {
+ "role": "Bulky Setup",
+ "movepool": ["calmmind", "encore", "focusblast", "icebeam", "scald", "substitute"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
+ "abilities": ["Cloud Nine", "Swift Swim"],
+ "preferredTypes": ["Ice"]
+ }
+ ]
+ },
+ "primeape": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "stoneedge", "throatchop", "uturn"],
+ "abilities": ["Defiant"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "earthquake", "gunkshot", "honeclaws", "stoneedge", "throatchop"],
+ "abilities": ["Defiant"],
+ "preferredTypes": ["Rock"]
+ }
+ ]
+ },
+ "arcanine": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "roar", "toxic", "wildcharge", "willowisp"],
+ "abilities": ["Intimidate"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "extremespeed", "flareblitz", "morningsun", "wildcharge"],
+ "abilities": ["Intimidate"],
+ "preferredTypes": ["Fighting"]
+ }
+ ]
+ },
+ "poliwrath": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Liquidation", "Rain Dance"],
+ "abilities": ["Swift Swim"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Circle Throw", "Close Combat", "Knock Off", "Liquidation"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Ice Punch", "Knock Off", "Liquidation", "Poison Jab"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "alakazam": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzling gleam", "psychic", "psyshock", "shadowball"],
+ "abilities": ["Galaxy Brain", "Trace"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["calmmind", "encore", "dazzling gleam", "psychic", "psyshock", "brainwave", "shadowball", "substitute"],
+ "abilities": ["Galaxy Brain", "Trace"]
+ }
+ ]
+ },
+ "machamp": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["bulkup", "bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["bulletpunch", "dynamicpunch", "knockoff", "stoneedge"],
+ "abilities": ["No Guard"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bulletpunch", "closecombat", "facade", "knockoff"],
+ "abilities": ["Guts"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "victreebel": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["poisonjab", "powerwhip", "suckerpunch", "swordsdance"],
+ "abilities": ["Chlorophyll"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hiddenpower", "knockoff", "powerwhip", "sleeppowder", "sludgebomb", "strengthsap", "suckerpunch"],
+ "abilities": ["Chlorophyll"],
+ "teraTypes": ["Ground"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["powerwhip", "sludgebomb", "sunnyday", "weatherball"],
+ "abilities": ["Chlorophyll"]
+ }
+ ]
+ },
+ "tentacruel": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["haze", "knockoff", "rapidspin", "sludgebomb", "toxicspikes", "flip turn", "protect"],
+ "abilities": ["Tropical Current"]
+ }
+ ]
+ },
+ "golem": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "explosion", "stealthrock", "stoneedge", "suckerpunch", "toxic"],
+ "abilities": ["Sturdy"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["earthquake", "explosion", "rockpolish", "stoneedge", "suckerpunch"],
+ "abilities": ["Sturdy"]
+ }
+ ]
+ },
+ "rapidash": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["flareblitz", "highhorsepower", "morningsun", "wildcharge", "willowisp"],
+ "abilities": ["Flame Body", "Flash Fire"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["flareblitz", "highhorsepower", "megahorn", "morningsun", "wildcharge"],
+ "abilities": ["Flash Fire"]
+ }
+ ]
+ },
+ "slowbro": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Calm Mind", "Psychic Noise", "Psyshock", "Scald", "Slack Off", "Thunder Wave"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Body Press", "Fire Blast", "Future Sight", "Ice Beam", "Psychic Noise", "Scald", "Teleport"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Body Press", "Iron Defense", "Scald", "Slack Off"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "farfetchd": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["knockoff", "closecombat", "return", "swordsdance", "uturn"],
+ "abilities": ["Hustle", "Scrappy"]
+ }
+ ]
+ },
+ "dodrio": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["bravebird", "highjumpkick", "knockoff", "earthquake", "swordsdance", "uturn"],
+ "abilities": ["ofafeather"],
+ "preferredTypes": ["Flying"]
+ }
+ ]
+ },
+ "dewgong": {
+ "level": 96,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["icebeam", "protect", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["encore", "icebeam", "surf", "toxic"],
+ "abilities": ["Thick Fat"]
+ }
+ ]
+ },
+ "muk": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["brickbreak", "curse", "gunkshot", "haze", "icepunch", "poisonjab", "shadowsneak"],
+ "abilities": ["Poison Touch"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["Drain Punch", "Gunk Shot", "Ice Punch", "Knock Off", "Poison Jab", "Shadow Sneak"],
+ "abilities": ["Poison Touch"]
+ }
+
+ ]
+ },
+ "cloyster": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["curse", "splashback", "bulletpunch", "iciclecrash", "drillrun"],
+ "abilities": ["Regenerator"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["splashback", "bulletpunch", "rapidspin", "toxic", "spikes", "toxicspikes", "teleport"],
+ "abilities": ["Regenerator"]
+ }
+ ]
+ },
+ "gengar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["shadowball", "icebeam", "illwind", "dazzlinggleam", "hiddenpower"],
+ "abilities": ["blackout"],
+ "teraTypes": ["Fighting"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["willowisp", "thunderwave", "hex", "illwind", "encore", "taunt", "destinybond"],
+ "abilities": ["blackout"]
+ }
+ ]
+ },
+ "hypno": {
+ "level": 97,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["focusblast", "foulplay", "protect", "psychic", "thunderwave", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ },
+ {
+ "role": "Staller",
+ "movepool": ["protect", "seismictoss", "toxic", "wish"],
+ "abilities": ["Insomnia"]
+ }
+ ]
+ },
+ "kingler": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["agility", "knockoff", "liquidation", "rockslide", "superpower", "swordsdance", "xscissor"],
+ "abilities": ["Sheer Force"]
+ }
+ ]
+ },
+ "electrode": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["foulplay", "hiddenpower", "signalbeam", "taunt", "thunderbolt", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "preferredTypes": ["Ice"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["hiddenpower", "lightscreen", "reflect", "thunderbolt", "thunderwave", "toxic", "voltswitch"],
+ "abilities": ["Aftermath", "Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "exeggutor": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Leech Seed", "Psychic", "Psychic Noise", "Sleep Powder", "Sludge Bomb", "Substitute"],
+ "abilities": ["Harvest"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Leech Seed", "Protect", "Psychic Noise", "Substitute"],
+ "abilities": ["Harvest"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Calm Mind", "Giga Drain", "Psychic", "Psyshock", "Sleep Powder", "hiddenpower", "Substitute"],
+ "abilities": ["Harvest"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "marowak": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["earthquake", "knockoff", "closecombat", "swordsdance", "vengefulbone", "stealthrock", "stoneedge"],
+ "abilities": ["Justified"]
+ }
+ ]
+ },
+ "hitmonlee": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["highjumpkick", "knockoff", "machpunch", "poisonjab", "rapidspin", "stoneedge"],
+ "abilities": ["Reckless"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["closecombat", "curse", "knockoff", "poisonjab", "stoneedge"],
+ "abilities": ["Unburden"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "hitmonchan": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Drain Punch", "Ice Punch", "Knock Off", "Mach Punch", "Rapid Spin", "Swords Dance"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["Bulk Up", "Drain Punch", "Knock Off", "Poison Jab", "Rapid Spin"],
+ "abilities": ["Iron Fist"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["Drain Punch", "Encore", "Knock Off", "Poison Jab", "Rapid Spin", "Taunt"],
+ "abilities": ["Iron Fist"]
+ }
+ ]
+ },
+ "weezing": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["fireblast", "painsplit", "sludgebomb", "toxicspikes", "willowisp"],
+ "abilities": ["Levitate"]
+ }
+ ]
+ },
+ "rhydon": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["earthquake", "megahorn", "stealthrock", "stoneedge", "swordsdance", "toxic"],
+ "abilities": ["Lightning Rod"]
+ }
+ ]
+ },
+ "chansey": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["aromatherapy", "seismictoss", "softboiled", "stealthrock", "thunderwave", "toxic", "wish"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "kangaskhan": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["familyonslaught", "drainpunch", "earthquake", "u-turn", "suckerpunch", "dragonclaw"],
+ "abilities": ["Skill Link"]
+ },
+ {
+ "role": "AV Pivot",
+ "movepool": ["familyonslaught", "drainpunch", "earthquake", "u-turn", "suckerpunch", "dragonclaw"],
+ "abilities": ["Skill Link"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "familyonslaught", "drainpunch", "earthquake", "dragonclaw"],
+ "abilities": ["Skill Link"]
+ }
+ ]
+ },
+ "seaking": {
+ "level": 95,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "waterfall"],
+ "abilities": ["Lightning Rod"],
+ "preferredTypes": ["Dark"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["drillrun", "icebeam", "knockoff", "megahorn", "raindance", "waterfall"],
+ "abilities": ["Swift Swim"],
+ "preferredTypes": ["Dark"]
+ }
+ ]
+ },
+ "starmie": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "icebeam", "psyshock", "flipturn", "thunderbolt"],
+ "abilities": ["Analytic", "Natural Cure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["psyshock", "rapidspin", "recover", "scald", "flipturn", "thunderwave", "toxic"],
+ "abilities": ["Natural Cure"]
+ }
+ ]
+ },
+ "mrmime": {
+ "level": 90,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "healingwish", "psychic", "psyshock", "shadowball", "thunderbolt"],
+ "abilities": ["Filter"],
+ "preferredTypes": ["Fighting"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dazzlinggleam", "encore", "focusblast", "nastyplot", "psychic", "psyshock"],
+ "abilities": ["Filter"]
+ }
+ ]
+ },
+ "scyther": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aerialace", "brickbreak", "knockoff", "pursuit", "uturn"],
+ "abilities": ["Technician"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aerialace", "brickbreak", "bugbite", "knockoff", "roost", "swordsdance"],
+ "abilities": ["Technician"]
+ }
+ ]
+ },
+ "jynx": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "psychic", "psyshock", "trick"],
+ "abilities": ["Dry Skin"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["focusblast", "icebeam", "lovelykiss", "nastyplot", "psyshock"],
+ "abilities": ["Dry Skin"]
+ }
+ ]
+ },
+ "pinsir": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["closecombat", "earthquake", "knockoff", "stealthrock", "stoneedge", "swordsdance", "xscissor"],
+ "abilities": ["Moxie"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "tauros": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["bodyslam", "headlongrush", "throatchop", "rockslide", "zenheadbutt", "escort"],
+ "abilities": ["Sheer Force"]
+ },
+ {
+ "role": "Fast Attacker",
+ "movepool": ["doubleedge", "headlongrush", "stoneedge", "zenheadbutt", "escort"],
+ "abilities": ["Intimidate"]
+ }
+ ]
+ },
+ "gyarados": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["dragondance", "crunch", "substitute", "liquidation"],
+ "abilities": ["Violent Abandon"]
+ }
+ ]
+ },
+ "lapras": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["Freeze-Dry", "Hydro Pump", "Ice Beam", "Sparkling Aria", "escort"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["Freeze-Dry", "Wish", "Protect", "Sparkling Aria", "escort"],
+ "abilities": ["Water Absorb"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Dragon Dance", "Earthquake", "Icicle Spear", "Waterfall"],
+ "abilities": ["Water Absorb"]
+ }
+ ]
+ },
+ "ditto": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["transform"],
+ "abilities": ["Imposter"]
+ }
+ ]
+ },
+ "vaporeon": {
+ "level": 86,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["healbell", "icebeam", "protect", "scald", "wish", "slipwaway"],
+ "abilities": ["trace"]
+ },
+ {
+ "role": "Wallbreaker",
+ "movepool": ["hydropump", "slipaway", "icebeam", "hiddenpower", "alluringvoice"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "jolteon": {
+ "level": 81,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["hiddenpower", "shadowball", "thunderbolt", "voltswitch", "alluring voice"],
+ "abilities": ["Protean"],
+ "teraTypes": ["Ice"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpower", "signalbeam", "thunderbolt", "voltswitch", "calmmind", "substitute"],
+ "abilities": ["Trace"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "flareon": {
+ "level": 88,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["superpower", "doubleedge", "suckerpunch", "flareblitz", "flareout"],
+ "abilities": ["Protean"]
+ }
+ ]
+ },
+ "omastar": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["hiddenpower", "hydropump", "icebeam", "shellsmash"],
+ "abilities": ["Shell Armor", "Swift Swim"],
+ "teraTypes": ["Grass"]
+ }
+ ]
+ },
+ "kabutops": {
+ "level": 87,
+ "sets": [
+ {
+ "role": "Fast Support",
+ "movepool": ["aquajet", "knockoff", "liquidation", "rapidspin", "stoneedge"],
+ "abilities": ["Battle Armor", "Swift Swim"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["aquajet", "knockoff", "liquidation", "stoneedge", "swordsdance"],
+ "abilities": ["Weak Armor"]
+ }
+ ]
+ },
+ "aerodactyl": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "earthquake", "roost", "stealthrock", "stoneedge", "taunt", "toxic"],
+ "abilities": ["Unnerve"]
+ },
+ {
+ "role": "Fast Support",
+ "movepool": ["aerialace", "aquatail", "defog", "earthquake", "roost", "stealthrock", "stoneedge"],
+ "abilities": ["Unnerve"],
+ "preferredTypes": ["Ground"]
+ }
+ ]
+ },
+ "snorlax": {
+ "level": 83,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "rest", "return", "sleeptalk"],
+ "abilities": ["Thick Fat"]
+ },
+ {
+ "role": "Bulky Setup",
+ "movepool": ["bodyslam", "crunch", "curse", "earthquake", "recycle", "return"],
+ "abilities": ["Gluttony"]
+ }
+ ]
+ },
+ "articuno": {
+ "level": 85,
+ "sets": [
+ {
+ "role": "Staller",
+ "movepool": ["freezedry", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ },
+ {
+ "role": "Bulky Support",
+ "movepool": ["freezedry", "hurricane", "roost", "substitute", "toxic"],
+ "abilities": ["Pressure"]
+ }
+ ]
+ },
+ "zapdos": {
+ "level": 79,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["defog", "discharge", "heatwave", "hiddenpower", "roost", "toxic", "uturn"],
+ "abilities": ["Static"],
+ "teraTypes": ["Ice"]
+ }
+ ]
+ },
+ "moltres": {
+ "level": 82,
+ "sets": [
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["defog", "fireblast", "hurricane", "roost", "toxic", "uturn", "willowisp"],
+ "abilities": ["Flame Body"]
+ }
+ ]
+ },
+ "dragonite": {
+ "level": 84,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Earthquake", "icespinner", "extremespeed", "uturn"],
+ "abilities": ["Lifeguard"]
+ },
+ {
+ "role": "Bulky Attacker",
+ "movepool": ["dracometeor", "hurricane", "fireblast", "roost" , "uturn", "thunderbolt"],
+ "abilities": ["Lifeguard"]
+ }
+
+ ]
+ },
+ "mewtwo": {
+ "level": 72,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["aurasphere", "calmmind", "fireblast", "psystrike", "recover", "signalbeam"],
+ "abilities": ["Unnerve"]
+ }
+ ]
+ },
+ "mew": {
+ "level": 80,
+ "sets": [
+ {
+ "role": "Bulky Support",
+ "movepool": ["Encore", "Knock Off", "Psychic", "Psychic Noise", "Stealth Rock", "Toxic Spikes", "U-turn", "Will-O-Wisp", "roost"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Setup Sweeper",
+ "movepool": ["Close Combat", "Knock Off", "Leech Life", "Psychic Fangs", "Swords Dance"],
+ "abilities": ["Synchronize"]
+ },
+ {
+ "role": "Fast Bulky Setup",
+ "movepool": ["Aura Sphere", "Bug Buzz", "Dark Pulse", "Earth Power", "Fire Blast", "Hydro Pump", "Nasty Plot", "Psychic", "Psyshock"],
+ "abilities": ["Synchronize"]
+ }
+ ]
+ },
+ "porygon": {
+ "level": 100,
+ "sets": [
+ {
+ "role": "Wallbreaker",
+ "movepool": ["triattack", "shadowball", "hiddenpower", "hyperbeam", "trick"],
+ "abilities": ["Download"],
+ "teraTypes": ["Fighting"]
+ }
+ ]
+ },
+ "magneton": {
+ "level": 89,
+ "sets": [
+ {
+ "role": "Fast Attacker",
+ "movepool": ["Flash Cannon", "Thunderbolt", "Volt Switch", "hiddenpower"],
+ "abilities": ["Analytic", "Magnet Pull"],
+ "teraTypes": ["Ground"]
+ }
+ ]
+ }
+}
diff --git a/data/random-battles/gen9regeneration/teams.ts b/data/random-battles/gen9regeneration/teams.ts
new file mode 100644
index 0000000000..fa44c2544f
--- /dev/null
+++ b/data/random-battles/gen9regeneration/teams.ts
@@ -0,0 +1,1149 @@
+import { RandomTeams, type MoveCounter } from "../gen9/teams";
+
+// Moves that restore HP:
+const RECOVERY_MOVES = [
+ 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'shoreup', 'slackoff', 'softboiled', 'strengthsap', 'synthesis',
+];
+// Moves that boost Attack:
+const PHYSICAL_SETUP = [
+ 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'meditate', 'poweruppunch', 'swordsdance', 'tidyup', 'victorydance',
+ 'filletaway',
+];
+// Moves which boost Special Attack:
+const SPECIAL_SETUP = [
+ 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', 'takeheart', 'torchsong', 'filletaway',
+];
+// Some moves that only boost Speed:
+const SPEED_SETUP = [
+ 'agility', 'autotomize', 'flamecharge', 'rockpolish', 'trailblaze',
+];
+// Conglomerate for ease of access
+const SETUP = [
+ 'acidarmor', 'agility', 'autotomize', 'bellydrum', 'bulkup', 'calmmind', 'clangoroussoul', 'coil', 'cosmicpower', 'curse', 'dragondance',
+ 'filletaway', 'flamecharge', 'growth', 'honeclaws', 'howl', 'irondefense', 'meditate', 'nastyplot', 'noretreat', 'poweruppunch', 'quiverdance',
+ 'rockpolish', 'shellsmash', 'shiftgear', 'swordsdance', 'tailglow', 'takeheart', 'tidyup', 'trailblaze', 'trickroom', 'workup', 'victorydance',
+];
+const SPEED_CONTROL = [
+ 'electroweb', 'glare', 'icywind', 'lowsweep', 'quash', 'stringshot', 'tailwind', 'thunderwave', 'trickroom',
+];
+// Hazard-setting moves
+const HAZARDS = [
+ 'spikes', 'stealthrock', 'stickyweb', 'toxicspikes',
+];
+// Protect and its variants
+const PROTECT_MOVES = [
+ 'banefulbunker', 'burningbulwark', 'protect', 'silktrap', 'spikyshield',
+];
+// Moves that switch the user out
+const PIVOT_MOVES = [
+ 'chillyreception', 'flipturn', 'partingshot', 'shedtail', 'teleport', 'uturn', 'voltswitch',
+];
+
+// Moves that should be paired together when possible
+const MOVE_PAIRS = [
+ ['lightscreen', 'reflect'],
+ ['sleeptalk', 'rest'],
+ ['protect', 'wish'],
+ ['leechseed', 'protect'],
+ ['leechseed', 'substitute'],
+ ['leechseed', 'burningbulwark'],
+];
+
+/** Pokemon who always want priority STAB, and are fine with it as its only STAB move of that type */
+const PRIORITY_POKEMON = [
+ 'breloom', 'brutebonnet', 'cacturne', 'honchkrow', 'mimikyu', 'ragingbolt', 'scizor',
+];
+
+/** Pokemon who should never be in the lead slot */
+const NO_LEAD_POKEMON = [
+ 'Zacian', 'Zamazenta',
+];
+const DOUBLES_NO_LEAD_POKEMON = [
+ 'Basculegion', 'Houndstone', 'Iron Bundle', 'Roaring Moon', 'Zacian', 'Zamazenta',
+];
+export class RandomRGTeams extends RandomTeams {
+ override cullMovePool(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ movePool: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): void {
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ // If we have two unfilled moves and only one unpaired move, cull the unpaired move.
+ if (moves.size === this.maxMoveCount - 2) {
+ const unpairedMoves = [...movePool];
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[0]));
+ this.fastPop(unpairedMoves, unpairedMoves.indexOf(pair[1]));
+ }
+ }
+ if (unpairedMoves.length === 1) {
+ this.fastPop(movePool, movePool.indexOf(unpairedMoves[0]));
+ }
+ }
+
+ // These moves are paired, and shouldn't appear if there is not room for them both.
+ if (moves.size === this.maxMoveCount - 1) {
+ for (const pair of MOVE_PAIRS) {
+ if (movePool.includes(pair[0]) && movePool.includes(pair[1])) {
+ this.fastPop(movePool, movePool.indexOf(pair[0]));
+ this.fastPop(movePool, movePool.indexOf(pair[1]));
+ }
+ }
+ }
+
+ // Develop additional move lists
+ const statusMoves = this.cachedStatusMoves;
+
+ // Team-based move culls
+ if (teamDetails.screens && movePool.length >= this.maxMoveCount + 2) {
+ if (movePool.includes('reflect')) this.fastPop(movePool, movePool.indexOf('reflect'));
+ if (movePool.includes('lightscreen')) this.fastPop(movePool, movePool.indexOf('lightscreen'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stickyWeb) {
+ if (movePool.includes('stickyweb')) this.fastPop(movePool, movePool.indexOf('stickyweb'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.stealthRock) {
+ if (movePool.includes('stealthrock')) this.fastPop(movePool, movePool.indexOf('stealthrock'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.defog || teamDetails.rapidSpin) {
+ if (movePool.includes('defog')) this.fastPop(movePool, movePool.indexOf('defog'));
+ if (movePool.includes('rapidspin')) this.fastPop(movePool, movePool.indexOf('rapidspin'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.toxicSpikes) {
+ if (movePool.includes('toxicspikes')) this.fastPop(movePool, movePool.indexOf('toxicspikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.spikes && teamDetails.spikes >= 2) {
+ if (movePool.includes('spikes')) this.fastPop(movePool, movePool.indexOf('spikes'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+ if (teamDetails.statusCure) {
+ if (movePool.includes('healbell')) this.fastPop(movePool, movePool.indexOf('healbell'));
+ if (moves.size + movePool.length <= this.maxMoveCount) return;
+ }
+
+ if (isDoubles) {
+ const doublesIncompatiblePairs = [
+ // In order of decreasing generalizability
+ [SPEED_CONTROL, SPEED_CONTROL],
+ [HAZARDS, HAZARDS],
+ [PROTECT_MOVES, PROTECT_MOVES],
+ ['rockslide', 'stoneedge'],
+ [SETUP, ['fakeout', 'helpinghand']],
+ [PROTECT_MOVES, 'wideguard'],
+ [['fierydance', 'fireblast'], 'heatwave'],
+ ['dazzlinggleam', ['fleurcannon', 'moonblast']],
+ ['poisongas', ['toxicspikes', 'willowisp']],
+ [RECOVERY_MOVES, 'healpulse'],
+ ['lifedew', 'healpulse'],
+ ['haze', 'icywind'],
+ [['hydropump', 'muddywater'], ['muddywater', 'scald']],
+ ['disable', 'encore'],
+ ['freezedry', 'icebeam'],
+ ['energyball', 'leafstorm'],
+ ['wildcharge', 'thunderbolt'],
+ ['earthpower', 'sandsearstorm'],
+ ['coaching', ['helpinghand', 'howl']],
+ ];
+
+ for (const pair of doublesIncompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (role !== 'Offensive Protect') this.incompatibleMoves(moves, movePool, PROTECT_MOVES, ['flipturn', 'uturn']);
+ }
+
+ // General incompatibilities
+ const incompatiblePairs = [
+ // These moves don't mesh well with other aspects of the set
+ [statusMoves, ['healingwish', 'switcheroo', 'trick']],
+ [SETUP, PIVOT_MOVES],
+ [SETUP, HAZARDS],
+ [SETUP, ['defog', 'nuzzle', 'toxic', 'yawn', 'haze']],
+ [PHYSICAL_SETUP, PHYSICAL_SETUP],
+ [SPECIAL_SETUP, 'thunderwave'],
+ ['substitute', PIVOT_MOVES],
+ [SPEED_SETUP, ['aquajet', 'rest', 'trickroom']],
+ ['curse', ['irondefense', 'rapidspin']],
+ ['dragondance', 'dracometeor'],
+
+ // These attacks are redundant with each other
+ ['surf', 'hydropump'],
+ ['liquidation', 'wavecrash'],
+ ['aquajet', 'flipturn'],
+ ['gigadrain', 'leafstorm'],
+ ['powerwhip', 'hornleech'],
+ [['airslash', 'bravebird', 'hurricane'], ['airslash', 'bravebird', 'hurricane']],
+ ['knockoff', 'foulplay'],
+ ['throatchop', ['crunch', 'lashout']],
+ ['doubleedge', ['bodyslam', 'headbutt']],
+ ['fireblast', ['fierydance', 'flamethrower']],
+ ['lavaplume', 'magmastorm'],
+ ['thunderpunch', 'wildcharge'],
+ [['thunderbolt', 'discharge', 'thunder'], ['thunderbolt', 'discharge', 'thunder']],
+ ['gunkshot', ['direclaw', 'poisonjab', 'sludgebomb']],
+ ['aurasphere', 'focusblast'],
+ ['closecombat', 'drainpunch'],
+ ['bugbite', 'pounce'],
+ [['dragonpulse', 'spacialrend'], 'dracometeor'],
+ ['heavyslam', 'flashcannon'],
+ ['alluringvoice', 'dazzlinggleam'],
+
+ // These status moves are redundant with each other
+ ['taunt', 'disable'],
+ [['thunderwave', 'toxic'], ['thunderwave', 'willowisp']],
+ [['thunderwave', 'toxic', 'willowisp'], 'toxicspikes'],
+ ];
+
+ for (const pair of incompatiblePairs) this.incompatibleMoves(moves, movePool, pair[0], pair[1]);
+
+ if (!types.includes('Ice')) this.incompatibleMoves(moves, movePool, 'icebeam', 'icywind');
+
+ if (!isDoubles) this.incompatibleMoves(moves, movePool, ['taunt', 'strengthsap'], 'encore');
+
+ if (!types.includes('Dark') && teraType !== 'Dark') this.incompatibleMoves(moves, movePool, 'knockoff', 'suckerpunch');
+
+ if (!abilities.includes('Prankster')) this.incompatibleMoves(moves, movePool, 'thunderwave', 'yawn');
+
+ // This space reserved for assorted hardcodes that otherwise make little sense out of context
+ }
+
+ override randomMoveset(
+ types: string[],
+ abilities: string[],
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ movePool: string[],
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): Set {
+ const moves = new Set();
+ let counter = this.queryMoves(moves, species, teraType, abilities);
+ this.cullMovePool(types, moves, abilities, counter, movePool, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // If there are only four moves, add all moves and return early
+ if (movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ return moves;
+ }
+
+ const runEnforcementChecker = (checkerName: string) => {
+ if (!this.moveEnforcementCheckers[checkerName]) return false;
+ return this.moveEnforcementCheckers[checkerName](
+ movePool, moves, abilities, types, counter, species, teamDetails, isLead, isDoubles, teraType, role
+ );
+ };
+
+ if (role === 'Tera Blast user') {
+ counter = this.addMove('terablast', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Add required move (e.g. Relic Song for Meloetta-P)
+ if (species.requiredMove) {
+ const move = this.dex.moves.get(species.requiredMove).id;
+ counter = this.addMove(move, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Add other moves you really want to have, e.g. STAB, recovery, setup.
+
+ // PMCM hardcodes (reserve these to when absolutely necessary, let the script do most of the work)
+ // forces Splash on Chi-Yu's moveset, since it uses Z-Splash
+ if (species.id === 'chiyu') {
+ if (movePool.includes('splash')) {
+ counter = this.addMove('splash', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ // enforces both primary stabs on Infernape
+ if (species.id === 'infernape' && movePool.includes('mindblown')) {
+ counter = this.addMove('mindblown', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ counter = this.addMove('alloutassault', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Facade if Guts is a possible ability
+ if (movePool.includes('facade') && abilities.includes('Guts')) {
+ counter = this.addMove('facade', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Night Shade, Revelation Dance, Revival Blessing, and Sticky Web
+ for (const moveid of ['nightshade', 'revelationdance', 'revivalblessing', 'stickyweb']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Trick Room on Doubles Wallbreaker
+ if (movePool.includes('trickroom') && role === 'Doubles Wallbreaker') {
+ counter = this.addMove('trickroom', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce hazard removal on Bulky Support if the team doesn't already have it
+ if (role === 'Bulky Support' && !teamDetails.defog && !teamDetails.rapidSpin) {
+ if (movePool.includes('rapidspin')) {
+ counter = this.addMove('rapidspin', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (movePool.includes('defog')) {
+ counter = this.addMove('defog', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Knock Off on pure Normal- and Fighting-types in singles
+ if (!isDoubles && types.length === 1 && (types.includes('Normal') || types.includes('Fighting'))) {
+ if (movePool.includes('knockoff')) {
+ counter = this.addMove('knockoff', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Flip Turn on pure Water-type Wallbreakers
+ if (types.length === 1 && types.includes('Water') &&
+ role === 'Wallbreaker' && movePool.includes('flipturn')) {
+ counter = this.addMove('flipturn', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+
+ // Enforce Spore on Smeargle
+ if (species.id === 'smeargle') {
+ if (movePool.includes('spore')) {
+ counter = this.addMove('spore', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce moves in doubles
+ if (isDoubles) {
+ const doublesEnforcedMoves = ['auroraveil', 'mortalspin', 'spore'];
+ for (const moveid of doublesEnforcedMoves) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ // Enforce Fake Out on slow Pokemon
+ if (movePool.includes('fakeout') && species.baseStats.spe <= 50) {
+ counter = this.addMove('fakeout', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Tailwind on Prankster and Gale Wings users
+ if (movePool.includes('tailwind') && (abilities.includes('Prankster') || abilities.includes('Gale Wings'))) {
+ counter = this.addMove('tailwind', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ // Enforce Thunder Wave on Prankster users as well
+ if (movePool.includes('thunderwave') && abilities.includes('Prankster')) {
+ counter = this.addMove('thunderwave', moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB priority
+ if (
+ ['Bulky Attacker', 'Bulky Setup', 'Wallbreaker', 'Doubles Wallbreaker'].includes(role) ||
+ PRIORITY_POKEMON.includes(species.id)
+ ) {
+ const priorityMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (
+ types.includes(moveType) && (move.priority > 0 || (moveid === 'grassyglide' && abilities.includes('Grassy Surge'))) &&
+ (move.basePower || move.basePowerCallback)
+ ) {
+ priorityMoves.push(moveid);
+ }
+ }
+ if (priorityMoves.length) {
+ const moveid = this.sample(priorityMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce a single STAB for Moltres
+ if (species.id === 'moltres') {
+ const typeToEnforce = this.randomChance(1, 2) ? 'Fire' : 'Flying';
+
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && typeToEnforce === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(typeToEnforce)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce STAB
+ for (const type of types) {
+ // Moltres already has STAB, so ignore this block
+ if (species.id === 'moltres') break;
+ // prevents Meowscarada from being enforced stab moves
+ if (species.id === 'meowscarada') break;
+ // Check if a STAB move of that type should be required
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && type === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ while (runEnforcementChecker(type)) {
+ if (!stabMoves.length) break;
+ const moveid = this.sampleNoReplace(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce Tera STAB
+ // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
+ if (!counter.get('stabtera') && !['Bulky Support', 'Doubles Support'].includes(role) &&
+ !abilities.includes('Protean')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && teraType === moveType) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // If no STAB move was added, add a STAB move
+ // prevents Meowscarada from being enforced stab moves (since it has Protean and doesn't care)
+ if (!counter.get('stab') && !abilities.includes('Protean')) {
+ const stabMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback) && types.includes(moveType)) {
+ stabMoves.push(moveid);
+ }
+ }
+ if (stabMoves.length) {
+ const moveid = this.sample(stabMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce recovery
+ if (['Bulky Support', 'Bulky Attacker', 'Bulky Setup'].includes(role)) {
+ const recoveryMoves = movePool.filter(moveid => RECOVERY_MOVES.includes(moveid));
+ if (recoveryMoves.length) {
+ const moveid = this.sample(recoveryMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce setup
+ if (role.includes('Setup') || role === 'Tera Blast user') {
+ // First, try to add a non-Speed setup move
+ const nonSpeedSetupMoves = movePool.filter(moveid => SETUP.includes(moveid) && !SPEED_SETUP.includes(moveid));
+ if (nonSpeedSetupMoves.length) {
+ const moveid = this.sample(nonSpeedSetupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ } else {
+ // No non-Speed setup moves, so add any (Speed) setup move
+ const setupMoves = movePool.filter(moveid => SETUP.includes(moveid));
+ if (setupMoves.length) {
+ const moveid = this.sample(setupMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce redirecting moves and Fake Out on Doubles Support
+ if (role === 'Doubles Support') {
+ for (const moveid of ['fakeout', 'followme', 'ragepowder']) {
+ if (movePool.includes(moveid)) {
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Enforce Protect
+ if (role.includes('Protect')) {
+ const protectMoves = movePool.filter(moveid => PROTECT_MOVES.includes(moveid));
+ if (protectMoves.length) {
+ const moveid = this.sample(protectMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce a move not on the noSTAB list
+ if (!counter.damagingMoves.size) {
+ // Choose an attacking move
+ const attackingMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ if (!this.noStab.includes(moveid) && (move.category !== 'Status')) attackingMoves.push(moveid);
+ }
+ if (attackingMoves.length) {
+ const moveid = this.sample(attackingMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+
+ // Enforce coverage move
+ if (!['AV Pivot', 'Fast Support', 'Bulky Support', 'Bulky Protect', 'Doubles Support'].includes(role)) {
+ if (counter.damagingMoves.size === 1) {
+ // Find the type of the current attacking move
+ const currentAttackType = counter.damagingMoves.values().next().value!.type;
+ // Choose an attacking move that is of different type to the current single attack
+ const coverageMoves = [];
+ for (const moveid of movePool) {
+ const move = this.dex.moves.get(moveid);
+ const moveType = this.getMoveType(move, species, abilities, teraType);
+ if (!this.noStab.includes(moveid) && (move.basePower || move.basePowerCallback)) {
+ if (currentAttackType !== moveType) coverageMoves.push(moveid);
+ }
+ }
+ if (coverageMoves.length) {
+ const moveid = this.sample(coverageMoves);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+
+ // Add (moves.size < this.maxMoveCount) as a condition if moves is getting larger than 4 moves.
+ // If you want moves to be favored but not required, add something like && this.randomChance(1, 2) to your condition.
+
+ // Choose remaining moves randomly from movepool and add them to moves list:
+ while (moves.size < this.maxMoveCount && movePool.length) {
+ if (moves.size + movePool.length <= this.maxMoveCount) {
+ for (const moveid of movePool) {
+ moves.add(moveid);
+ }
+ break;
+ }
+ const moveid = this.sample(movePool);
+ counter = this.addMove(moveid, moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ for (const pair of MOVE_PAIRS) {
+ if (moveid === pair[0] && movePool.includes(pair[1])) {
+ counter = this.addMove(pair[1], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ if (moveid === pair[1] && movePool.includes(pair[0])) {
+ counter = this.addMove(pair[0], moves, types, abilities, teamDetails, species, isLead, isDoubles,
+ movePool, teraType, role);
+ }
+ }
+ }
+ return moves;
+ }
+
+ override getAbility(
+ types: string[],
+ moves: Set,
+ abilities: string[],
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ): string {
+ if (abilities.length <= 1) return abilities[0];
+
+ // Hard-code abilities here
+ if (species.id === 'drifblim') return moves.has('defog') ? 'Aftermath' : 'Unburden';
+ // if (abilities.includes('Flash Fire') && this.dex.getEffectiveness('Fire', teraType) >= 1) return 'Flash Fire';
+ if ((species.id === 'thundurus' || species.id === 'tornadus') && !counter.get('Physical')) return 'Prankster';
+ if (species.id === 'swampert' && (counter.get('Water') || moves.has('flipturn'))) return 'Torrent';
+ if (species.id === 'toucannon' && counter.get('skilllink')) return 'Skill Link';
+ if (abilities.includes('Slush Rush') && moves.has('snowscape')) return 'Slush Rush';
+ if (species.id === 'golduck' && teamDetails.rain) return 'Swift Swim';
+
+ const abilityAllowed: string[] = [];
+ // Obtain a list of abilities that are allowed (not culled)
+ for (const ability of abilities) {
+ if (!this.shouldCullAbility(
+ ability, types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role
+ )) {
+ abilityAllowed.push(ability);
+ }
+ }
+
+ // Pick a random allowed ability
+ if (abilityAllowed.length >= 1) return this.sample(abilityAllowed);
+
+ // If all abilities are rejected, prioritize weather abilities over non-weather abilities
+ if (!abilityAllowed.length) {
+ const weatherAbilities = abilities.filter(
+ a => ['Chlorophyll', 'Hydration', 'Sand Force', 'Sand Rush', 'Slush Rush', 'Solar Power', 'Swift Swim'].includes(a)
+ );
+ if (weatherAbilities.length) return this.sample(weatherAbilities);
+ }
+
+ // Pick a random ability
+ return this.sample(abilities);
+ }
+
+ override getPriorityItem(
+ ability: string,
+ types: string[],
+ moves: Set,
+ counter: MoveCounter,
+ teamDetails: RandomTeamsTypes.TeamDetails,
+ species: Species,
+ isLead: boolean,
+ isDoubles: boolean,
+ teraType: string,
+ role: RandomTeamsTypes.Role,
+ ) {
+ if (!isDoubles) {
+ if (role === 'Fast Bulky Setup' && (ability === 'Quark Drive' || ability === 'Protosynthesis')) {
+ return 'Booster Energy';
+ }
+ if (species.id === 'lokix') {
+ return (role === 'Fast Attacker') ? 'Silver Powder' : 'Life Orb';
+ }
+ }
+ if (species.requiredItems) {
+ // Z-Crystals aren't available in Gen 9, so require Plates
+ if (species.baseSpecies === 'Arceus') {
+ return species.requiredItems[0];
+ }
+ return this.sample(species.requiredItems);
+ }
+ if (species.id === 'pikachu') return 'Light Ball';
+ if (role === 'AV Pivot') return 'Assault Vest';
+ if (species.id === 'marowak') return 'Thick Club';
+ if (ability === 'Tropical Current') return 'Flame Orb';
+ if (ability === 'Blackout') return 'Heavy-Duty Boots';
+ if (species.id === 'gyarados') return 'Sitrus Berry';
+ if (species.id === 'regieleki') return 'Magnet';
+ if (types.includes('Normal') && moves.has('doubleedge') && moves.has('fakeout')) return 'Silk Scarf';
+ if (
+ species.id === 'froslass' || moves.has('populationbomb') ||
+ (ability === 'Hustle' && counter.get('setup') && !isDoubles && this.randomChance(1, 2))
+ ) return 'Wide Lens';
+ if (species.id === 'smeargle') return 'Focus Sash';
+ if (moves.has('clangoroussoul') || (species.id === 'toxtricity' && moves.has('shiftgear'))) return 'Throat Spray';
+ if (
+ (species.baseSpecies === 'Magearna' && role === 'Tera Blast user') ||
+ ((species.id === 'calyrexice' || species.id === 'necrozmaduskmane') && isDoubles)
+ ) return 'Weakness Policy';
+ if (['dragonenergy', 'lastrespects', 'waterspout'].some(m => moves.has(m))) return 'Choice Scarf';
+ if (
+ !isDoubles && (ability === 'Imposter' || (species.id === 'magnezone' && role === 'Fast Attacker'))
+ ) return 'Choice Scarf';
+ if (species.id === 'rampardos' && (role === 'Fast Attacker' || isDoubles)) return 'Choice Scarf';
+ if (species.id === 'palkia' && counter.get('Status')) return 'Lustrous Orb';
+ if (
+ moves.has('courtchange') ||
+ !isDoubles && (species.id === 'luvdisc' || (species.id === 'terapagos' && !moves.has('rest')))
+ ) return 'Heavy-Duty Boots';
+ if (
+ ['Cheek Pouch', 'Cud Chew', 'Harvest', 'Ripen'].some(m => ability === m) ||
+ moves.has('bellydrum') || moves.has('filletaway')
+ ) {
+ return 'Sitrus Berry';
+ }
+ if (['healingwish', 'switcheroo', 'trick'].some(m => moves.has(m))) {
+ if (
+ species.baseStats.spe >= 60 && species.baseStats.spe <= 108 &&
+ role !== 'Wallbreaker' && role !== 'Doubles Wallbreaker' && !counter.get('priority')
+ ) {
+ return 'Choice Scarf';
+ } else {
+ return (counter.get('Physical') > counter.get('Special')) ? 'Choice Band' : 'Choice Specs';
+ }
+ }
+ if (counter.get('Status') && (species.name === 'Latias' || species.name === 'Latios')) return 'Soul Dew';
+ if (species.id === 'scyther' && !isDoubles) return (isLead && !moves.has('uturn')) ? 'Eviolite' : 'Heavy-Duty Boots';
+ if (ability === 'Poison Heal' || ability === 'Quick Feet') return 'Toxic Orb';
+ if (species.nfe) return 'Eviolite';
+ if ((ability === 'Guts' || moves.has('facade')) && !moves.has('sleeptalk')) {
+ return (types.includes('Fire') || ability === 'Toxic Boost') ? 'Toxic Orb' : 'Flame Orb';
+ }
+ if (ability === 'Magic Guard' || (ability === 'Sheer Force' && counter.get('sheerforce'))) return 'Life Orb';
+ if (ability === 'Anger Shell') return this.sample(['Expert Belt', 'Lum Berry', 'Scope Lens', 'Sitrus Berry']);
+ if (moves.has('dragondance') && isDoubles) return 'Clear Amulet';
+ if (counter.get('skilllink') && ability !== 'Skill Link' && species.id !== 'breloom') return 'Loaded Dice';
+ if (ability === 'Unburden') {
+ return (moves.has('closecombat') || moves.has('leafstorm')) ? 'White Herb' : 'Sitrus Berry';
+ }
+ if (moves.has('shellsmash') && ability !== 'Weak Armor') return 'White Herb';
+ if (moves.has('meteorbeam') || (moves.has('electroshot') && !teamDetails.rain)) return 'Power Herb';
+ if (moves.has('acrobatics') && ability !== 'Protosynthesis') return '';
+ if (moves.has('auroraveil') || moves.has('lightscreen') && moves.has('reflect')) return 'Light Clay';
+ if (ability === 'Gluttony') return `${this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'])} Berry`;
+ if (species.id === 'giratina' && !isDoubles && moves.has('rest') && !moves.has('sleeptalk')) return 'Leftovers';
+ if (
+ moves.has('rest') && !moves.has('sleeptalk') &&
+ ability !== 'Natural Cure' && ability !== 'Shed Skin'
+ ) {
+ return 'Chesto Berry';
+ }
+ if (
+ species.id !== 'yanmega' &&
+ this.dex.getEffectiveness('Rock', species) >= 2 && (!types.includes('Flying') || !isDoubles)
+ ) return 'Heavy-Duty Boots';
+ }
+
+ override randomSet(
+ s: string | Species,
+ teamDetails: RandomTeamsTypes.TeamDetails = {},
+ isLead = false,
+ isDoubles = false
+ ): RandomTeamsTypes.RandomSet {
+ const species = this.dex.species.get(s);
+ const forme = this.getForme(species);
+ const sets = this.randomSets[species.id]["sets"];
+ const possibleSets: RandomTeamsTypes.RandomSetData[] = [];
+
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+
+ for (const set of sets) {
+ // Prevent Fast Bulky Setup on lead Paradox Pokemon, since it generates Booster Energy.
+ const abilities = set.abilities!;
+ if (
+ isLead && (abilities.includes('Protosynthesis') || abilities.includes('Quark Drive')) &&
+ set.role === 'Fast Bulky Setup'
+ ) continue;
+ // Prevent Tera Blast user if the team already has one, or if Terastallizion is prevented.
+ if ((teamDetails.teraBlast || ruleTable.has('terastalclause')) && set.role === 'Tera Blast user') {
+ continue;
+ }
+ possibleSets.push(set);
+ }
+ const set = this.sampleIfArray(possibleSets);
+ const role = set.role;
+ const movePool: string[] = [];
+ for (const movename of set.movepool) {
+ movePool.push(this.dex.moves.get(movename).id);
+ }
+ const teraTypes = set.teraTypes!;
+ let teraType = this.sampleIfArray(teraTypes);
+
+ let ability = '';
+ let item = undefined;
+
+ const evs = { hp: 85, atk: 85, def: 85, spa: 85, spd: 85, spe: 85 };
+ const ivs = { hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31 };
+
+ const types = species.types;
+ const abilities = set.abilities!;
+
+ // Get moves
+ const moves = this.randomMoveset(types, abilities, teamDetails, species, isLead, isDoubles, movePool, teraType, role);
+ const counter = this.queryMoves(moves, species, teraType, abilities);
+
+ // Get ability
+ ability = this.getAbility(types, moves, abilities, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+
+ // Get items
+ // First, the priority items
+ item = this.getPriorityItem(ability, types, moves, counter, teamDetails, species, isLead, isDoubles, teraType, role);
+ if (item === undefined) {
+ if (isDoubles) {
+ item = this.getDoublesItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ } else {
+ item = this.getItem(ability, types, moves, counter, teamDetails, species, isLead, teraType, role);
+ }
+ }
+
+ // Get level
+ const level = this.getLevel(species, isDoubles);
+
+ // Prepare optimal HP
+ const srImmunity = ability === 'Magic Guard' || item === 'Heavy-Duty Boots';
+ let srWeakness = srImmunity ? 0 : this.dex.getEffectiveness('Rock', species);
+ // Crash damage move users want an odd HP to survive two misses
+ if (['axekick', 'highjumpkick', 'jumpkick'].some(m => moves.has(m))) srWeakness = 2;
+ while (evs.hp > 1) {
+ const hp = Math.floor(Math.floor(2 * species.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10);
+ if ((moves.has('substitute') && ['Sitrus Berry', 'Salac Berry'].includes(item))) {
+ // Two Substitutes should activate Sitrus Berry
+ if (hp % 4 === 0) break;
+ } else if ((moves.has('bellydrum') || moves.has('filletaway')) && (item === 'Sitrus Berry' || ability === 'Gluttony')) {
+ // Belly Drum should activate Sitrus Berry
+ if (hp % 2 === 0) break;
+ } else if (moves.has('substitute') && moves.has('endeavor')) {
+ // Luvdisc should be able to Substitute down to very low HP
+ if (hp % 4 > 0) break;
+ } else {
+ // Maximize number of Stealth Rock switch-ins
+ if (srWeakness <= 0 || ability === 'Regenerator' || ['Leftovers', 'Life Orb'].includes(item)) break;
+ if (item !== 'Sitrus Berry' && hp % (4 / srWeakness) > 0) break;
+ // Minimise number of Stealth Rock switch-ins to activate Sitrus Berry
+ if (item === 'Sitrus Berry' && hp % (4 / srWeakness) === 0) break;
+ }
+ evs.hp -= 4;
+ }
+
+ // Minimize confusion damage
+ const noAttackStatMoves = [...moves].every(m => {
+ const move = this.dex.moves.get(m);
+ if (move.damageCallback || move.damage) return true;
+ if (move.id === 'shellsidearm') return false;
+ // Magearna and doubles Dragonite, though these can work well as a general rule
+ if (move.id === 'terablast' && (
+ species.id === 'porygon2' || moves.has('shiftgear') || species.baseStats.atk > species.baseStats.spa)
+ ) return false;
+ return move.category !== 'Physical' || move.id === 'bodypress' || move.id === 'foulplay';
+ });
+ // prevents Illumise (who can turn into Volbeat with Physical moves) from having 0 Atk EVs
+ if (noAttackStatMoves && !moves.has('transform') && this.format.mod !== 'partnersincrime' &&
+ species.id !== 'illumise') {
+ evs.atk = 0;
+ ivs.atk = 0;
+ }
+
+ if (moves.has('gyroball') || moves.has('trickroom')) {
+ evs.spe = 0;
+ ivs.spe = 0;
+ }
+
+ // hidden power time
+ // Hidden Power Ice IVs
+ if (
+ moves.has('hiddenpower') &&
+ (
+ species.id === 'ninetales' || species.id === 'electrode' || species.id === 'jolteon' || species.id === 'zapdos' ||
+ species.id === 'blastoise' || species.id === 'butterfree' || species.id === 'pikachu' || species.id === 'raichu'
+ )
+ ) {
+ ivs.atk = 0;
+ ivs.def = 30;
+ }
+
+ // Hidden Power Ground IVs
+ if (
+ moves.has('hiddenpower') && (species.id === 'vileplume' || species.id === 'magneton' || species.id === 'victreebel')
+ ) {
+ ivs.atk = 1;
+ ivs.spa = 30;
+ ivs.spd = 30;
+ }
+
+ // Hidden Power Fighting IVs
+ if (
+ moves.has('hiddenpower') &&
+ (species.id === 'persian' || species.id === 'gengar' || species.id === 'exeggutor' || species.id === 'porygon')
+ ) {
+ ivs.atk = 1;
+ ivs.def = 30;
+ ivs.spa = 30;
+ ivs.spd = 30;
+ ivs.spe = 30;
+ }
+
+ // Hidden Power Grass IVs
+ if ((species.id === 'vaporeon' || species.id === 'omastar') && moves.has('hiddenpower')) {
+ ivs.atk = 0;
+ ivs.spa = 30;
+ }
+
+ // Enforce Tera Type after all set generation is done to prevent infinite generation
+ if (this.forceTeraType) teraType = this.forceTeraType;
+
+ // shuffle moves to add more randomness to camomons
+ const shuffledMoves = Array.from(moves);
+ this.prng.shuffle(shuffledMoves);
+ return {
+ name: species.baseSpecies,
+ species: forme,
+ gender: species.baseSpecies === 'Greninja' ? 'M' : (species.gender || (this.random(2) ? 'F' : 'M')),
+ shiny: this.randomChance(1, 1024),
+ level,
+ moves: shuffledMoves,
+ ability,
+ evs,
+ ivs,
+ item,
+ teraType,
+ role,
+ };
+ }
+
+ override randomSets: { [species: string]: RandomTeamsTypes.RandomSpeciesData } = require('./random-sets.json');
+
+ randomRGTeam() {
+ this.enforceNoDirectCustomBanlistChanges();
+
+ const seed = this.prng.getSeed();
+ const ruleTable = this.dex.formats.getRuleTable(this.format);
+ const pokemon: RandomTeamsTypes.RandomSet[] = [];
+
+ // For Monotype
+ const isMonotype = !!this.forceMonotype || ruleTable.has('sametypeclause');
+ const isDoubles = this.format.gameType !== 'singles';
+ const typePool = this.dex.types.names().filter(name => name !== "Stellar");
+ const type = this.forceMonotype || this.sample(typePool);
+
+ // PotD stuff
+ // const usePotD = global.Config && Config.potd && ruleTable.has('potd');
+ // const potd = usePotD ? this.dex.species.get(Config.potd) : null;
+
+ const baseFormes: { [k: string]: number } = {};
+ let hasMega = false;
+
+ const typeCount: { [k: string]: number } = {};
+ const typeComboCount: { [k: string]: number } = {};
+ const typeWeaknesses: { [k: string]: number } = {};
+ const typeDoubleWeaknesses: { [k: string]: number } = {};
+ const teamDetails: RandomTeamsTypes.TeamDetails = {};
+ let numMaxLevelPokemon = 0;
+
+ const pokemonList = Object.keys(this.randomSets);
+ const [pokemonPool, baseSpeciesPool] = this.getPokemonPool(type, pokemon, isMonotype, pokemonList);
+
+ let leadsRemaining = this.format.gameType === 'doubles' ? 2 : 1;
+ while (baseSpeciesPool.length && pokemon.length < this.maxTeamSize) {
+ const baseSpecies = this.sampleNoReplace(baseSpeciesPool);
+ if (hasMega && (baseSpecies === "Typhlosion" || baseSpecies === "Altaria" || baseSpecies === "Raticate")) continue;
+ const currentSpeciesPool: Species[] = [];
+ // Check if the base species has a mega forme available
+ // let canMega = false;
+ // for (const poke of pokemonPool[baseSpecies]) {
+ // const species = this.dex.species.get(poke);
+ // if (!hasMega && species.isMega) canMega = true;
+ // }
+ for (const poke of pokemonPool[baseSpecies]) {
+ const species = this.dex.species.get(poke);
+ // Prevent multiple megas
+ if (hasMega && species.isMega) continue;
+ // Prevent base forme, if a mega is available
+ // Added Abomasnow exception
+ // if (canMega && !species.isMega && species.id !== 'abomasnow') continue;
+ currentSpeciesPool.push(species);
+ }
+ // change const to let when enforcing certain mons for testing
+ const species = this.sample(currentSpeciesPool);
+
+ // let species = this.dex.species.get(this.sample(pokemonPool[baseSpecies]));
+
+ if (!species.exists) continue;
+
+ // Limit to one of each species (Species Clause)
+ if (baseFormes[species.baseSpecies]) continue;
+
+ // Limit one Mega per team
+ if (hasMega && species.isMega) continue;
+
+ // Treat Ogerpon formes and Terapagos like the Tera Blast user role; reject if team has one already
+ if ((species.baseSpecies === 'Ogerpon' || species.baseSpecies === 'Terapagos') && teamDetails.teraBlast) continue;
+
+ // Illusion shouldn't be on the last slot
+ if (species.baseSpecies === 'Zoroark' && pokemon.length >= (this.maxTeamSize - 1)) continue;
+
+ const types = species.types;
+ const typeCombo = types.slice().sort().join();
+ const weakToFreezeDry = (
+ this.dex.getEffectiveness('Ice', species) > 0 ||
+ (this.dex.getEffectiveness('Ice', species) > -2 && types.includes('Water'))
+ );
+ // Dynamically scale limits for different team sizes. The default and minimum value is 1.
+ const limitFactor = Math.round(this.maxTeamSize / 6) || 1;
+
+ // TEMPORARILY ADJUSTING BALANCE OF THIS BLOCK -- TOO FEW POKEMON TO GENERATE TEAMS
+ // update: reverting these changes, but leaving just in case
+ if (!isMonotype && !this.forceMonotype) {
+ let skip = false;
+
+ // Limit two of any type
+ // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED
+ for (const typeName of types) {
+ if (typeCount[typeName] >= 2 /* 6 */ * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (skip) continue;
+
+ // Limit three weak to any type, and one double weak to any type
+ // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ if (!typeWeaknesses[typeName]) typeWeaknesses[typeName] = 0;
+ if (typeWeaknesses[typeName] >= 3 /* 6 */ * limitFactor) {
+ skip = true;
+ break;
+ }
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ if (!typeDoubleWeaknesses[typeName]) typeDoubleWeaknesses[typeName] = 0;
+ if (typeDoubleWeaknesses[typeName] >= 1 /* 6 */ * Number(limitFactor)) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ if (skip) continue;
+
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED
+ if (
+ this.dex.getEffectiveness('Fire', species) === 0 &&
+ Object.values(species.abilities).filter(a => ['Dry Skin', 'Fluffy'].includes(a)).length
+ ) {
+ if (!typeWeaknesses['Fire']) typeWeaknesses['Fire'] = 0;
+ if (typeWeaknesses['Fire'] >= 3 /* 6 */ * limitFactor) continue;
+ }
+
+ // Limit four weak to Freeze-Dry
+ // ADJUSTING TO 6 -- ADJUST BACK AFTER MORE POKEMON HAVE BEEN ADDED
+ if (weakToFreezeDry) {
+ if (!typeWeaknesses['Freeze-Dry']) typeWeaknesses['Freeze-Dry'] = 0;
+ if (typeWeaknesses['Freeze-Dry'] >= 4 /* 6 */ * limitFactor) continue;
+ }
+
+ // Limit one level 100 Pokemon
+ if (!this.adjustLevel && (this.getLevel(species, isDoubles) === 100) && numMaxLevelPokemon >= limitFactor) {
+ continue;
+ }
+ }
+
+ // Limit three of any type combination in Monotype
+ if (!this.forceMonotype && isMonotype && (typeComboCount[typeCombo] >= 3 * limitFactor)) continue;
+
+ // The Pokemon of the Day
+ // if (potd?.exists && (pokemon.length === 1 || this.maxTeamSize === 1)) species = potd;
+
+ // testing code
+ // if (pokemon.length === 0 || this.maxTeamSize === 1) species = this.dex.species.get('Raticate-Mega');
+
+ let set: RandomTeamsTypes.RandomSet;
+
+ if (leadsRemaining) {
+ if (
+ isDoubles && DOUBLES_NO_LEAD_POKEMON.includes(species.baseSpecies) ||
+ !isDoubles && NO_LEAD_POKEMON.includes(species.baseSpecies)
+ ) {
+ if (pokemon.length + leadsRemaining === this.maxTeamSize) continue;
+ set = this.randomSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ } else {
+ set = this.randomSet(species, teamDetails, true, isDoubles);
+ pokemon.unshift(set);
+ leadsRemaining--;
+ }
+ } else {
+ set = this.randomSet(species, teamDetails, false, isDoubles);
+ pokemon.push(set);
+ }
+
+ const item = this.dex.items.get(set.item);
+
+ // Don't bother tracking details for the last Pokemon
+ if (pokemon.length === this.maxTeamSize) break;
+
+ // Now that our Pokemon has passed all checks, we can increment our counters
+ baseFormes[species.baseSpecies] = 1;
+
+ // Increment type counters
+ for (const typeName of types) {
+ if (typeName in typeCount) {
+ typeCount[typeName]++;
+ } else {
+ typeCount[typeName] = 1;
+ }
+ }
+ if (typeCombo in typeComboCount) {
+ typeComboCount[typeCombo]++;
+ } else {
+ typeComboCount[typeCombo] = 1;
+ }
+
+ // Increment weakness counter
+ for (const typeName of this.dex.types.names()) {
+ // it's weak to the type
+ if (this.dex.getEffectiveness(typeName, species) > 0) {
+ typeWeaknesses[typeName]++;
+ }
+ if (this.dex.getEffectiveness(typeName, species) > 1) {
+ typeDoubleWeaknesses[typeName]++;
+ }
+ }
+ // Count Dry Skin/Fluffy as Fire weaknesses
+ if (['Dry Skin', 'Fluffy'].includes(set.ability) && this.dex.getEffectiveness('Fire', species) === 0) {
+ typeWeaknesses['Fire']++;
+ }
+ if (weakToFreezeDry) typeWeaknesses['Freeze-Dry']++;
+
+ // Increment level 100 counter
+ if (set.level === 100) numMaxLevelPokemon++;
+
+ // Track what the team has
+ if (item.megaStone) hasMega = true;
+ if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails.rain = 1;
+ if (set.ability === 'Drought' || set.ability === 'Orichalcum Pulse' || set.moves.includes('sunnyday')) {
+ teamDetails.sun = 1;
+ }
+ if (set.ability === 'Sand Stream') teamDetails.sand = 1;
+ if (set.ability === 'Snow Warning' || set.moves.includes('snowscape') || set.moves.includes('chillyreception')) {
+ teamDetails.snow = 1;
+ }
+ if (set.moves.includes('healbell')) teamDetails.statusCure = 1;
+ if (set.moves.includes('spikes') || set.moves.includes('ceaselessedge')) {
+ teamDetails.spikes = (teamDetails.spikes || 0) + 1;
+ }
+ if (set.moves.includes('toxicspikes') || set.ability === 'Toxic Debris') teamDetails.toxicSpikes = 1;
+ if (set.moves.includes('stealthrock') || set.moves.includes('stoneaxe')) teamDetails.stealthRock = 1;
+ if (set.moves.includes('stickyweb')) teamDetails.stickyWeb = 1;
+ if (set.moves.includes('defog')) teamDetails.defog = 1;
+ if (set.moves.includes('rapidspin') || set.moves.includes('mortalspin')) teamDetails.rapidSpin = 1;
+ if (set.moves.includes('auroraveil') || (set.moves.includes('reflect') && set.moves.includes('lightscreen'))) {
+ teamDetails.screens = 1;
+ }
+ if (set.role === 'Tera Blast user' || species.baseSpecies === "Ogerpon" || species.baseSpecies === "Terapagos") {
+ teamDetails.teraBlast = 1;
+ }
+ }
+ if (pokemon.length < this.maxTeamSize && pokemon.length < 12) { // large teams sometimes cannot be built
+ throw new Error(`Could not build a random team for ${this.format} (seed=${seed})`);
+ }
+
+ return pokemon;
+ }
+}
+
+export default RandomRGTeams;
From 0c22331b1eca30f4ccc1d90424532ab0e59bd903 Mon Sep 17 00:00:00 2001
From: adrivrie
Date: Thu, 2 Apr 2026 08:48:33 +0200
Subject: [PATCH 185/233] Random Battles: March 2026 balance patch (#11865)
---
data/random-battles/gen3/sets.json | 20 ++---
data/random-battles/gen4/sets.json | 30 ++++----
data/random-battles/gen5/sets.json | 58 +++++++--------
data/random-battles/gen6/sets.json | 40 +++++-----
data/random-battles/gen7/sets.json | 50 ++++++-------
data/random-battles/gen8/data.json | 86 +++++++++++-----------
data/random-battles/gen9/doubles-sets.json | 42 +++++------
data/random-battles/gen9/sets.json | 16 ++--
8 files changed, 171 insertions(+), 171 deletions(-)
diff --git a/data/random-battles/gen3/sets.json b/data/random-battles/gen3/sets.json
index 0274430dd1..fbe3579165 100644
--- a/data/random-battles/gen3/sets.json
+++ b/data/random-battles/gen3/sets.json
@@ -192,7 +192,7 @@
"movepool": ["earthquake", "fireblast", "icebeam", "shadowball", "sludgebomb", "substitute", "thunderbolt"],
"abilities": ["Poison Point"]
},
- {
+ {
"role": "Wallbreaker",
"movepool": ["earthquake", "fireblast", "icebeam", "rockslide", "shadowball", "sludgebomb"],
"abilities": ["Poison Point"]
@@ -619,7 +619,7 @@
"movepool": ["doubleedge", "hiddenpowerghost", "hiddenpowerground", "surf", "swordsdance"],
"abilities": ["Hyper Cutter"]
},
- {
+ {
"role": "Bulky Setup",
"movepool": ["doubleedge", "hiddenpowerghost", "mudshot", "swordsdance"],
"abilities": ["Hyper Cutter"]
@@ -1237,7 +1237,7 @@
]
},
"crobat": {
- "level": 77,
+ "level": 78,
"sets": [
{
"role": "Fast Attacker",
@@ -1485,7 +1485,7 @@
]
},
"slowking": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Bulky Support",
@@ -1600,7 +1600,7 @@
]
},
"steelix": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Bulky Attacker",
@@ -1636,7 +1636,7 @@
]
},
"qwilfish": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Wallbreaker",
@@ -1734,7 +1734,7 @@
]
},
"magcargo": {
- "level": 99,
+ "level": 100,
"sets": [
{
"role": "Bulky Support",
@@ -1785,7 +1785,7 @@
]
},
"delibird": {
- "level": 99,
+ "level": 98,
"sets": [
{
"role": "Wallbreaker",
@@ -2378,7 +2378,7 @@
]
},
"mawile": {
- "level": 95,
+ "level": 96,
"sets": [
{
"role": "Setup Sweeper",
@@ -2567,7 +2567,7 @@
]
},
"torkoal": {
- "level": 91,
+ "level": 90,
"sets": [
{
"role": "Bulky Attacker",
diff --git a/data/random-battles/gen4/sets.json b/data/random-battles/gen4/sets.json
index 1b94aa0a29..be4c67dc51 100644
--- a/data/random-battles/gen4/sets.json
+++ b/data/random-battles/gen4/sets.json
@@ -234,7 +234,7 @@
]
},
"parasect": {
- "level": 99,
+ "level": 100,
"sets": [
{
"role": "Bulky Support",
@@ -340,7 +340,7 @@
]
},
"alakazam": {
- "level": 80,
+ "level": 79,
"sets": [
{
"role": "Fast Attacker",
@@ -388,7 +388,7 @@
]
},
"golem": {
- "level": 87,
+ "level": 86,
"sets": [
{
"role": "Bulky Attacker",
@@ -565,7 +565,7 @@
]
},
"marowak": {
- "level": 89,
+ "level": 88,
"sets": [
{
"role": "Wallbreaker",
@@ -856,7 +856,7 @@
]
},
"snorlax": {
- "level": 78,
+ "level": 77,
"sets": [
{
"role": "Bulky Attacker",
@@ -1158,7 +1158,7 @@
]
},
"sunflora": {
- "level": 100,
+ "level": 99,
"sets": [
{
"role": "Wallbreaker",
@@ -1427,7 +1427,7 @@
]
},
"mantine": {
- "level": 89,
+ "level": 90,
"sets": [
{
"role": "Bulky Support",
@@ -1529,7 +1529,7 @@
]
},
"hitmontop": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Bulky Support",
@@ -2319,7 +2319,7 @@
]
},
"cradily": {
- "level": 88,
+ "level": 87,
"sets": [
{
"role": "Bulky Attacker",
@@ -2734,7 +2734,7 @@
]
},
"torterra": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Bulky Attacker",
@@ -2852,7 +2852,7 @@
]
},
"rampardos": {
- "level": 87,
+ "level": 86,
"sets": [
{
"role": "Setup Sweeper",
@@ -2944,7 +2944,7 @@
]
},
"floatzel": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Fast Attacker",
@@ -3268,7 +3268,7 @@
]
},
"tangrowth": {
- "level": 89,
+ "level": 90,
"sets": [
{
"role": "Bulky Attacker",
@@ -3499,7 +3499,7 @@
]
},
"rotomfrost": {
- "level": 79,
+ "level": 78,
"sets": [
{
"role": "Bulky Attacker",
@@ -3695,7 +3695,7 @@
]
},
"manaphy": {
- "level": 75,
+ "level": 76,
"sets": [
{
"role": "Bulky Setup",
diff --git a/data/random-battles/gen5/sets.json b/data/random-battles/gen5/sets.json
index 53315306f1..0a8f6faf70 100644
--- a/data/random-battles/gen5/sets.json
+++ b/data/random-battles/gen5/sets.json
@@ -101,7 +101,7 @@
]
},
"fearow": {
- "level": 89,
+ "level": 88,
"sets": [
{
"role": "Wallbreaker",
@@ -393,7 +393,7 @@
]
},
"machamp": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Bulky Attacker",
@@ -606,7 +606,7 @@
]
},
"hitmonlee": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Fast Attacker",
@@ -799,7 +799,7 @@
]
},
"ditto": {
- "level": 87,
+ "level": 88,
"sets": [
{
"role": "Fast Support",
@@ -950,7 +950,7 @@
]
},
"dragonair": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Setup Sweeper",
@@ -1078,7 +1078,7 @@
]
},
"ariados": {
- "level": 98,
+ "level": 99,
"sets": [
{
"role": "Bulky Support",
@@ -1256,7 +1256,7 @@
]
},
"murkrow": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Bulky Support",
@@ -1576,7 +1576,7 @@
]
},
"smeargle": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Fast Support",
@@ -1596,7 +1596,7 @@
]
},
"miltank": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Bulky Attacker",
@@ -1951,7 +1951,7 @@
]
},
"shedinja": {
- "level": 95,
+ "level": 96,
"sets": [
{
"role": "Setup Sweeper",
@@ -2163,7 +2163,7 @@
]
},
"camerupt": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Bulky Support",
@@ -2394,7 +2394,7 @@
]
},
"kecleon": {
- "level": 95,
+ "level": 96,
"sets": [
{
"role": "Bulky Support",
@@ -2434,7 +2434,7 @@
]
},
"chimecho": {
- "level": 95,
+ "level": 96,
"sets": [
{
"role": "Bulky Support",
@@ -2920,7 +2920,7 @@
]
},
"wormadamsandy": {
- "level": 92,
+ "level": 91,
"sets": [
{
"role": "Staller",
@@ -3062,7 +3062,7 @@
{
"role": "Wallbreaker",
"movepool": ["hiddenpowerfighting", "shadowball", "thunderbolt", "trick"],
- "abilities": ["Levitate"]
+ "abilities": ["Levitate"]
}
]
},
@@ -3433,7 +3433,7 @@
]
},
"porygonz": {
- "level": 81,
+ "level": 80,
"sets": [
{
"role": "Fast Attacker",
@@ -3529,7 +3529,7 @@
]
},
"rotomfan": {
- "level": 83,
+ "level": 84,
"sets": [
{
"role": "Bulky Attacker",
@@ -3723,7 +3723,7 @@
]
},
"shaymin": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Fast Support",
@@ -4007,7 +4007,7 @@
]
},
"samurott": {
- "level": 86,
+ "level": 87,
"sets": [
{
"role": "Wallbreaker",
@@ -4129,7 +4129,7 @@
]
},
"zebstrika": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Fast Attacker",
@@ -4387,7 +4387,7 @@
]
},
"cofagrigus": {
- "level": 87,
+ "level": 86,
"sets": [
{
"role": "Bulky Support",
@@ -4412,7 +4412,7 @@
]
},
"archeops": {
- "level": 78,
+ "level": 77,
"sets": [
{
"role": "Fast Attacker",
@@ -4463,7 +4463,7 @@
]
},
"reuniclus": {
- "level": 83,
+ "level": 84,
"sets": [
{
"role": "Bulky Setup",
@@ -4473,7 +4473,7 @@
]
},
"swanna": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Bulky Attacker",
@@ -4499,7 +4499,7 @@
]
},
"sawsbuck": {
- "level": 85,
+ "level": 84,
"sets": [
{
"role": "Setup Sweeper",
@@ -4647,7 +4647,7 @@
]
},
"haxorus": {
- "level": 74,
+ "level": 75,
"sets": [
{
"role": "Setup Sweeper",
@@ -4657,7 +4657,7 @@
]
},
"beartic": {
- "level": 92,
+ "level": 93,
"sets": [
{
"role": "Wallbreaker",
@@ -4875,7 +4875,7 @@
]
},
"tornadus": {
- "level": 79,
+ "level": 78,
"sets": [
{
"role": "Bulky Setup",
@@ -4915,7 +4915,7 @@
]
},
"thundurustherian": {
- "level": 77,
+ "level": 76,
"sets": [
{
"role": "Fast Attacker",
diff --git a/data/random-battles/gen6/sets.json b/data/random-battles/gen6/sets.json
index 26445ce53a..14380db5a2 100644
--- a/data/random-battles/gen6/sets.json
+++ b/data/random-battles/gen6/sets.json
@@ -25,7 +25,7 @@
]
},
"charizard": {
- "level": 83,
+ "level": 84,
"sets": [
{
"role": "Bulky Attacker",
@@ -224,7 +224,7 @@
]
},
"nidoking": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Wallbreaker",
@@ -297,7 +297,7 @@
]
},
"venomoth": {
- "level": 84,
+ "level": 83,
"sets": [
{
"role": "Bulky Setup",
@@ -630,7 +630,7 @@
]
},
"electrode": {
- "level": 88,
+ "level": 87,
"sets": [
{
"role": "Wallbreaker",
@@ -834,7 +834,7 @@
]
},
"pinsir": {
- "level": 85,
+ "level": 84,
"sets": [
{
"role": "Fast Attacker",
@@ -2530,7 +2530,7 @@
]
},
"altariamega": {
- "level": 78,
+ "level": 77,
"sets": [
{
"role": "Setup Sweeper",
@@ -2899,7 +2899,7 @@
]
},
"regirock": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Bulky Setup",
@@ -3020,7 +3020,7 @@
]
},
"groudon": {
- "level": 74,
+ "level": 73,
"sets": [
{
"role": "Bulky Support",
@@ -3121,7 +3121,7 @@
]
},
"deoxysdefense": {
- "level": 84,
+ "level": 83,
"sets": [
{
"role": "Bulky Support",
@@ -3323,7 +3323,7 @@
]
},
"mothim": {
- "level": 94,
+ "level": 95,
"sets": [
{
"role": "Setup Sweeper",
@@ -3395,7 +3395,7 @@
]
},
"ambipom": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Fast Attacker",
@@ -3519,7 +3519,7 @@
]
},
"spiritomb": {
- "level": 88,
+ "level": 87,
"sets": [
{
"role": "Bulky Setup",
@@ -3549,7 +3549,7 @@
]
},
"garchompmega": {
- "level": 76,
+ "level": 75,
"sets": [
{
"role": "Bulky Support",
@@ -3735,7 +3735,7 @@
]
},
"tangrowth": {
- "level": 88,
+ "level": 87,
"sets": [
{
"role": "Bulky Attacker",
@@ -3792,7 +3792,7 @@
]
},
"yanmega": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Fast Attacker",
@@ -4130,7 +4130,7 @@
]
},
"cresselia": {
- "level": 80,
+ "level": 79,
"sets": [
{
"role": "Bulky Setup",
@@ -4155,7 +4155,7 @@
]
},
"manaphy": {
- "level": 76,
+ "level": 77,
"sets": [
{
"role": "Bulky Setup",
@@ -4641,7 +4641,7 @@
]
},
"audino": {
- "level": 90,
+ "level": 91,
"sets": [
{
"role": "Bulky Support",
@@ -5127,7 +5127,7 @@
]
},
"haxorus": {
- "level": 77,
+ "level": 76,
"sets": [
{
"role": "Setup Sweeper",
@@ -5618,7 +5618,7 @@
]
},
"talonflame": {
- "level": 79,
+ "level": 78,
"sets": [
{
"role": "Bulky Attacker",
diff --git a/data/random-battles/gen7/sets.json b/data/random-battles/gen7/sets.json
index 6f0d4b3593..87969a681d 100644
--- a/data/random-battles/gen7/sets.json
+++ b/data/random-battles/gen7/sets.json
@@ -455,7 +455,7 @@
]
},
"golduck": {
- "level": 93,
+ "level": 92,
"sets": [
{
"role": "Bulky Setup",
@@ -467,7 +467,7 @@
"role": "Fast Attacker",
"movepool": ["calmmind", "encore", "focusblast", "hydropump", "icebeam"],
"abilities": ["Cloud Nine", "Swift Swim"],
- "preferredTypes": ["Ice"]
+ "preferredTypes": ["Ice"]
}
]
},
@@ -535,7 +535,7 @@
]
},
"alakazammega": {
- "level": 78,
+ "level": 77,
"sets": [
{
"role": "Setup Sweeper",
@@ -778,7 +778,7 @@
]
},
"kingler": {
- "level": 87,
+ "level": 88,
"sets": [
{
"role": "Setup Sweeper",
@@ -831,7 +831,7 @@
]
},
"marowak": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Wallbreaker",
@@ -1018,7 +1018,7 @@
]
},
"pinsir": {
- "level": 84,
+ "level": 85,
"sets": [
{
"role": "Fast Attacker",
@@ -1029,7 +1029,7 @@
]
},
"pinsirmega": {
- "level": 74,
+ "level": 73,
"sets": [
{
"role": "Bulky Setup",
@@ -1177,7 +1177,7 @@
]
},
"aerodactyl": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Bulky Attacker",
@@ -1608,7 +1608,7 @@
]
},
"wobbuffet": {
- "level": 94,
+ "level": 95,
"sets": [
{
"role": "Bulky Support",
@@ -2216,7 +2216,7 @@
]
},
"beautifly": {
- "level": 99,
+ "level": 98,
"sets": [
{
"role": "Setup Sweeper",
@@ -2410,7 +2410,7 @@
]
},
"shedinja": {
- "level": 96,
+ "level": 97,
"sets": [
{
"role": "Setup Sweeper",
@@ -2477,7 +2477,7 @@
]
},
"mawile": {
- "level": 89,
+ "level": 90,
"sets": [
{
"role": "Bulky Attacker",
@@ -2513,7 +2513,7 @@
]
},
"aggronmega": {
- "level": 81,
+ "level": 80,
"sets": [
{
"role": "Bulky Attacker",
@@ -2621,7 +2621,7 @@
]
},
"swalot": {
- "level": 90,
+ "level": 91,
"sets": [
{
"role": "Bulky Attacker",
@@ -2667,7 +2667,7 @@
]
},
"camerupt": {
- "level": 90,
+ "level": 91,
"sets": [
{
"role": "Setup Sweeper",
@@ -3001,7 +3001,7 @@
]
},
"absolmega": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Setup Sweeper",
@@ -3554,7 +3554,7 @@
]
},
"bastiodon": {
- "level": 94,
+ "level": 93,
"sets": [
{
"role": "Bulky Support",
@@ -4295,7 +4295,7 @@
]
},
"rotomfrost": {
- "level": 86,
+ "level": 85,
"sets": [
{
"role": "Bulky Attacker",
@@ -5635,7 +5635,7 @@
]
},
"bisharp": {
- "level": 82,
+ "level": 81,
"sets": [
{
"role": "Fast Attacker",
@@ -5858,7 +5858,7 @@
]
},
"zekrom": {
- "level": 74,
+ "level": 75,
"sets": [
{
"role": "Setup Sweeper",
@@ -5918,7 +5918,7 @@
]
},
"kyurem": {
- "level": 80,
+ "level": 79,
"sets": [
{
"role": "Staller",
@@ -6186,7 +6186,7 @@
]
},
"furfrou": {
- "level": 86,
+ "level": 87,
"sets": [
{
"role": "Bulky Support",
@@ -6339,7 +6339,7 @@
]
},
"tyrantrum": {
- "level": 81,
+ "level": 80,
"sets": [
{
"role": "Fast Attacker",
@@ -6741,7 +6741,7 @@
]
},
"oricoriopompom": {
- "level": 87,
+ "level": 86,
"sets": [
{
"role": "Bulky Attacker",
@@ -6965,7 +6965,7 @@
]
},
"comfey": {
- "level": 87,
+ "level": 88,
"sets": [
{
"role": "Bulky Support",
diff --git a/data/random-battles/gen8/data.json b/data/random-battles/gen8/data.json
index 61aefbcef3..a62160318b 100644
--- a/data/random-battles/gen8/data.json
+++ b/data/random-battles/gen8/data.json
@@ -269,7 +269,7 @@
"doublesMoves": ["closecombat", "fakeout", "knockoff", "poisonjab", "protect", "rockslide"]
},
"hitmonchan": {
- "level": 88,
+ "level": 87,
"moves": ["bulkup", "drainpunch", "icepunch", "machpunch", "rapidspin", "throatchop"],
"doublesLevel": 88,
"doublesMoves": ["coaching", "drainpunch", "feint", "firepunch", "icepunch", "machpunch"]
@@ -319,7 +319,7 @@
"doublesMoves": ["dazzlinggleam", "fakeout", "icywind", "lightscreen", "psychic", "reflect"]
},
"mrmimegalar": {
- "level": 84,
+ "level": 83,
"moves": ["focusblast", "freezedry", "nastyplot", "psychic", "rapidspin"]
},
"scyther": {
@@ -353,7 +353,7 @@
"doublesMoves": ["bounce", "dragondance", "icefang", "powerwhip", "protect", "waterfall"]
},
"laprasgmax": {
- "level": 85,
+ "level": 84,
"moves": ["freezedry", "icebeam", "protect", "sparklingaria", "thunderbolt", "toxic"],
"doublesLevel": 84,
"doublesMoves": ["freezedry", "helpinghand", "hydropump", "icywind", "protect", "thunderbolt"]
@@ -430,13 +430,13 @@
"doublesMoves": ["heatwave", "hurricane", "roost", "tailwind", "thunderbolt", "voltswitch"]
},
"zapdosgalar": {
- "level": 74,
+ "level": 73,
"moves": ["bravebird", "bulkup", "closecombat", "throatchop", "uturn"],
"doublesLevel": 76,
"doublesMoves": ["bravebird", "bulkup", "closecombat", "throatchop", "thunderouskick", "uturn"]
},
"moltres": {
- "level": 79,
+ "level": 78,
"moves": ["airslash", "defog", "fireblast", "roost", "uturn"],
"doublesLevel": 81,
"doublesMoves": ["bravebird", "fireblast", "heatwave", "protect", "roost", "tailwind"],
@@ -457,7 +457,7 @@
"noDynamaxMoves": ["dragondance", "dualwingbeat", "earthquake", "outrage", "roost"]
},
"mewtwo": {
- "level": 71,
+ "level": 72,
"moves": ["aurasphere", "fireblast", "nastyplot", "psystrike", "recover"],
"doublesLevel": 74,
"doublesMoves": ["aurasphere", "icebeam", "nastyplot", "psystrike", "recover"]
@@ -531,7 +531,7 @@
"doublesMoves": ["calmmind", "dazzlinggleam", "morningsun", "protect", "psychic", "shadowball"]
},
"umbreon": {
- "level": 82,
+ "level": 81,
"moves": ["foulplay", "protect", "toxic", "wish"],
"doublesLevel": 88,
"doublesMoves": ["foulplay", "helpinghand", "moonlight", "protect", "snarl", "toxic"]
@@ -556,7 +556,7 @@
"noDynamaxMoves": ["counter", "destinybond", "encore", "mirrorcoat"]
},
"dunsparce": {
- "level": 90,
+ "level": 91,
"moves": ["bodyslam", "coil", "earthquake", "roost"],
"doublesLevel": 90,
"doublesMoves": ["glare", "headbutt", "protect", "rockslide"]
@@ -647,7 +647,7 @@
"doublesMoves": ["closecombat", "coaching", "fakeout", "helpinghand", "rapidspin", "suckerpunch", "tripleaxel"]
},
"miltank": {
- "level": 83,
+ "level": 82,
"moves": ["bodyslam", "earthquake", "healbell", "milkdrink", "stealthrock", "toxic"],
"doublesLevel": 86,
"doublesMoves": ["bodypress", "bodyslam", "helpinghand", "icywind", "milkdrink", "protect", "rockslide"]
@@ -659,7 +659,7 @@
"doublesMoves": ["allyswitch", "healpulse", "helpinghand", "protect", "seismictoss", "softboiled", "thunderwave", "toxic"]
},
"raikou": {
- "level": 79,
+ "level": 80,
"moves": ["aurasphere", "calmmind", "scald", "substitute", "thunderbolt", "voltswitch"],
"doublesLevel": 82,
"doublesMoves": ["aurasphere", "calmmind", "protect", "scald", "snarl", "thunderbolt", "voltswitch"]
@@ -739,7 +739,7 @@
"noDynamaxMoves": ["defog", "knockoff", "leafblade", "lowkick", "rockslide", "suckerpunch", "swordsdance"]
},
"pelipper": {
- "level": 87,
+ "level": 86,
"moves": ["defog", "hurricane", "hydropump", "roost", "scald", "uturn"],
"doublesLevel": 83,
"doublesMoves": ["hurricane", "hydropump", "protect", "roost", "tailwind", "wideguard"]
@@ -879,7 +879,7 @@
"doublesMoves": ["closecombat", "knockoff", "protect", "suckerpunch", "swordsdance"]
},
"glalie": {
- "level": 96,
+ "level": 95,
"moves": ["earthquake", "freezedry", "spikes", "superfang", "taunt"],
"doublesLevel": 94,
"doublesMoves": ["disable", "foulplay", "freezedry", "helpinghand", "icywind", "protect"]
@@ -971,7 +971,7 @@
"doublesMoves": ["playrough", "protect", "superpower", "voltswitch", "wildcharge"]
},
"roserade": {
- "level": 84,
+ "level": 83,
"moves": ["leafstorm", "sleeppowder", "sludgebomb", "spikes", "synthesis", "toxicspikes"],
"doublesLevel": 86,
"doublesMoves": ["energyball", "leafstorm", "protect", "sleeppowder", "sludgebomb"]
@@ -1005,7 +1005,7 @@
"doublesMoves": ["calmmind", "icywind", "shadowball", "strengthsap"]
},
"lopunny": {
- "level": 95,
+ "level": 96,
"moves": ["closecombat", "facade", "healingwish", "switcheroo"],
"doublesLevel": 92,
"doublesMoves": ["closecombat", "fakeout", "switcheroo", "uturn"]
@@ -1077,13 +1077,13 @@
"doublesMoves": ["bodypress", "electroweb", "flashcannon", "protect", "thunderbolt", "voltswitch"]
},
"lickilicky": {
- "level": 86,
+ "level": 87,
"moves": ["bodyslam", "earthquake", "explosion", "healbell", "knockoff", "protect", "swordsdance", "wish"],
"doublesLevel": 88,
"doublesMoves": ["bodyslam", "explosion", "helpinghand", "icywind", "knockoff"]
},
"rhyperior": {
- "level": 79,
+ "level": 80,
"moves": ["earthquake", "firepunch", "megahorn", "rockpolish", "stoneedge"],
"doublesLevel": 84,
"doublesMoves": ["highhorsepower", "icepunch", "megahorn", "protect", "rockslide", "stoneedge"]
@@ -1095,7 +1095,7 @@
"doublesMoves": ["focusblast", "knockoff", "powerwhip", "ragepowder", "sleeppowder"]
},
"electivire": {
- "level": 83,
+ "level": 82,
"moves": ["crosschop", "earthquake", "flamethrower", "icepunch", "voltswitch", "wildcharge"],
"doublesLevel": 88,
"doublesMoves": ["crosschop", "flamethrower", "icepunch", "stompingtantrum", "wildcharge"]
@@ -1228,7 +1228,7 @@
"doublesMoves": ["earthpower", "eruption", "flashcannon", "heatwave", "protect"]
},
"regigigas": {
- "level": 82,
+ "level": 83,
"moves": ["bodyslam", "protect", "substitute", "toxic"],
"doublesLevel": 86,
"doublesMoves": ["bodyslam", "knockoff", "protect", "thunderwave"]
@@ -1265,7 +1265,7 @@
"doublesMoves": ["facade", "helpinghand", "superpower", "thunderwave"]
},
"liepard": {
- "level": 91,
+ "level": 92,
"moves": ["copycat", "encore", "knockoff", "playrough", "thunderwave", "uturn"],
"doublesLevel": 88,
"doublesMoves": ["copycat", "encore", "fakeout", "foulplay", "snarl", "taunt", "thunderwave"]
@@ -1388,7 +1388,7 @@
"doublesMoves": ["acupressure", "helpinghand", "leafstorm", "leechseed", "spikyshield"]
},
"crustle": {
- "level": 81,
+ "level": 82,
"moves": ["earthquake", "shellsmash", "stoneedge", "xscissor"],
"doublesLevel": 84,
"doublesMoves": ["knockoff", "protect", "rockslide", "shellsmash", "xscissor"]
@@ -1454,7 +1454,7 @@
"doublesMoves": ["focusblast", "protect", "psychic", "shadowball", "trickroom"]
},
"vanilluxe": {
- "level": 82,
+ "level": 81,
"moves": ["auroraveil", "blizzard", "explosion", "flashcannon", "freezedry"],
"doublesLevel": 82,
"doublesMoves": ["auroraveil", "blizzard", "explosion", "freezedry", "protect"]
@@ -1466,7 +1466,7 @@
"doublesMoves": ["acrobatics", "helpinghand", "nuzzle", "tailwind", "taunt", "voltswitch"]
},
"escavalier": {
- "level": 83,
+ "level": 82,
"moves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "swordsdance"],
"doublesLevel": 86,
"doublesMoves": ["closecombat", "drillrun", "ironhead", "knockoff", "megahorn", "protect", "swordsdance"]
@@ -1478,7 +1478,7 @@
"doublesMoves": ["clearsmog", "pollenpuff", "protect", "ragepowder", "spore"]
},
"jellicent": {
- "level": 86,
+ "level": 87,
"moves": ["icebeam", "recover", "scald", "shadowball", "toxic", "willowisp"],
"doublesLevel": 84,
"doublesMoves": ["scald", "shadowball", "strengthsap", "trickroom", "willowisp"]
@@ -1539,7 +1539,7 @@
"noDynamaxMoves": ["bugbuzz", "encore", "energyball", "focusblast", "spikes", "toxic"]
},
"stunfisk": {
- "level": 83,
+ "level": 84,
"moves": ["discharge", "earthpower", "foulplay", "sludgebomb", "stealthrock"],
"doublesLevel": 88,
"doublesMoves": ["earthpower", "electroweb", "foulplay", "stealthrock", "thunderbolt"]
@@ -1563,7 +1563,7 @@
"doublesMoves": ["dragonclaw", "firepunch", "glare", "gunkshot", "protect", "suckerpunch"]
},
"golurk": {
- "level": 82,
+ "level": 83,
"moves": ["dynamicpunch", "earthquake", "poltergeist", "rockpolish", "stoneedge"],
"doublesLevel": 86,
"doublesMoves": ["dynamicpunch", "highhorsepower", "icepunch", "poltergeist", "protect"]
@@ -1813,7 +1813,7 @@
"doublesMoves": ["closecombat", "dragonclaw", "dragondance", "headsmash", "highhorsepower"]
},
"aurorus": {
- "level": 84,
+ "level": 85,
"moves": ["ancientpower", "blizzard", "earthpower", "freezedry", "stealthrock", "thunderwave"],
"doublesLevel": 88,
"doublesMoves": ["auroraveil", "blizzard", "earthpower", "freezedry", "protect", "thunderwave"]
@@ -1825,7 +1825,7 @@
"doublesMoves": ["calmmind", "hypervoice", "mysticalfire", "protect", "psyshock"]
},
"hawlucha": {
- "level": 78,
+ "level": 79,
"moves": ["bravebird", "closecombat", "roost", "stoneedge", "swordsdance", "throatchop"],
"doublesLevel": 80,
"doublesMoves": ["bravebird", "closecombat", "protect", "swordsdance"]
@@ -1867,7 +1867,7 @@
"doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"]
},
"gourgeistsmall": {
- "level": 82,
+ "level": 83,
"moves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"],
"doublesLevel": 88,
"doublesMoves": ["leechseed", "poltergeist", "powerwhip", "substitute", "willowisp"]
@@ -1897,7 +1897,7 @@
"doublesMoves": ["boomburst", "dracometeor", "flamethrower", "hurricane", "protect", "tailwind"]
},
"xerneas": {
- "level": 65,
+ "level": 64,
"moves": ["focusblast", "geomancy", "moonblast", "psyshock"],
"doublesLevel": 70,
"doublesMoves": ["dazzlinggleam", "focusblast", "geomancy", "moonblast", "thunderbolt"]
@@ -1946,7 +1946,7 @@
"doublesMoves": ["fakeout", "flareblitz", "knockoff", "partingshot", "uturn"]
},
"primarina": {
- "level": 80,
+ "level": 81,
"moves": ["energyball", "hydropump", "moonblast", "psychic", "scald"],
"doublesLevel": 82,
"doublesMoves": ["dazzlinggleam", "flipturn", "hypervoice", "moonblast", "protect", "psychic"]
@@ -2066,7 +2066,7 @@
"doublesMoves": ["hypnosis", "protect", "scorchingsands", "shadowball", "shoreup", "stealthrock"]
},
"pyukumuku": {
- "level": 86,
+ "level": 85,
"moves": ["counter", "mirrorcoat", "recover", "toxic"],
"doublesLevel": 100,
"doublesMoves": ["helpinghand", "lightscreen", "memento", "reflect"]
@@ -2214,7 +2214,7 @@
"doublesMoves": ["anchorshot", "knockoff", "powerwhip", "protect"]
},
"kommoo": {
- "level": 80,
+ "level": 81,
"moves": ["clangingscales", "clangoroussoul", "closecombat", "poisonjab", "stealthrock"],
"doublesLevel": 80,
"doublesMoves": ["bodypress", "dracometeor", "irondefense", "protect"]
@@ -2318,7 +2318,7 @@
"doublesMoves": ["heatwave", "moongeistbeam", "photongeyser", "protect", "thunderwave"]
},
"magearna": {
- "level": 73,
+ "level": 72,
"moves": ["agility", "calmmind", "flashcannon", "fleurcannon"],
"doublesLevel": 72,
"doublesMoves": ["agility", "aurasphere", "dazzlinggleam", "flashcannon", "fleurcannon", "protect", "trick"]
@@ -2355,7 +2355,7 @@
"doublesMoves": ["closecombat", "fakeout", "grassknot", "knockoff", "plasmafists", "snarl"]
},
"melmetal": {
- "level": 73,
+ "level": 72,
"moves": ["doubleironbash", "earthquake", "superpower", "thunderpunch", "thunderwave"],
"doublesLevel": 76,
"doublesMoves": ["acidarmor", "bodypress", "doubleironbash", "protect", "thunderpunch", "thunderwave"]
@@ -2480,7 +2480,7 @@
"doublesMoves": ["bravebird", "icebeam", "protect", "roost", "surf", "tailwind"]
},
"barraskewda": {
- "level": 80,
+ "level": 79,
"moves": ["closecombat", "crunch", "flipturn", "liquidation"],
"doublesLevel": 84,
"doublesMoves": ["closecombat", "drillrun", "flipturn", "liquidation", "poisonjab"]
@@ -2654,13 +2654,13 @@
"doublesMoves": ["blizzard", "boltbeak", "iciclecrash", "lowkick", "protect"]
},
"dracovish": {
- "level": 77,
+ "level": 78,
"moves": ["crunch", "fishiousrend", "icefang", "lowkick", "psychicfangs"],
"doublesLevel": 78,
"doublesMoves": ["crunch", "dragonrush", "fishiousrend", "icefang", "psychicfangs"]
},
"arctovish": {
- "level": 87,
+ "level": 88,
"moves": ["bodyslam", "fishiousrend", "freezedry", "iciclecrash", "psychicfangs"],
"doublesLevel": 88,
"doublesMoves": ["blizzard", "fishiousrend", "iciclecrash", "protect", "superfang"]
@@ -2678,25 +2678,25 @@
"doublesMoves": ["dragondarts", "fireblast", "protect", "shadowball", "thunderbolt", "thunderwave"]
},
"zacian": {
- "level": 66,
+ "level": 67,
"moves": ["closecombat", "crunch", "playrough", "psychicfangs", "swordsdance"],
"doublesLevel": 72,
"doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs", "swordsdance"]
},
"zaciancrowned": {
- "level": 61,
+ "level": 62,
"moves": ["behemothblade", "closecombat", "playrough", "psychicfangs", "swordsdance"],
"doublesLevel": 65,
"doublesMoves": ["behemothblade", "closecombat", "playrough", "protect", "psychicfangs", "swordsdance"]
},
"zamazenta": {
- "level": 69,
+ "level": 70,
"moves": ["closecombat", "crunch", "psychicfangs", "wildcharge"],
"doublesLevel": 74,
"doublesMoves": ["closecombat", "crunch", "playrough", "protect", "psychicfangs"]
},
"zamazentacrowned": {
- "level": 68,
+ "level": 67,
"moves": ["behemothbash", "closecombat", "crunch", "howl", "psychicfangs"],
"doublesLevel": 72,
"doublesMoves": ["behemothbash", "closecombat", "crunch", "howl", "protect"]
@@ -2734,7 +2734,7 @@
"doublesMoves": ["closecombat", "darkestlariat", "junglehealing", "powerwhip", "protect"]
},
"regieleki": {
- "level": 78,
+ "level": 77,
"moves": ["explosion", "substitute", "thunderbolt", "voltswitch"],
"doublesLevel": 82,
"doublesMoves": ["electroweb", "extremespeed", "protect", "thundercage", "voltswitch"],
@@ -2759,7 +2759,7 @@
"doublesMoves": ["darkpulse", "nastyplot", "protect", "shadowball"]
},
"calyrex": {
- "level": 88,
+ "level": 89,
"moves": ["calmmind", "gigadrain", "leechseed", "psyshock", "substitute"],
"doublesLevel": 94,
"doublesMoves": ["helpinghand", "leafstorm", "pollenpuff", "protect"]
diff --git a/data/random-battles/gen9/doubles-sets.json b/data/random-battles/gen9/doubles-sets.json
index 8de6b658cf..946b35da98 100644
--- a/data/random-battles/gen9/doubles-sets.json
+++ b/data/random-battles/gen9/doubles-sets.json
@@ -1,6 +1,6 @@
{
"venusaur": {
- "level": 86,
+ "level": 87,
"sets": [
{
"role": "Offensive Protect",
@@ -609,7 +609,7 @@
]
},
"weezinggalar": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Doubles Bulky Attacker",
@@ -907,7 +907,7 @@
"role": "Doubles Bulky Attacker",
"movepool": ["Brave Bird", "Fire Blast", "Heat Wave", "Scorching Sands", "Tailwind"],
"abilities": ["Flame Body"],
- "teraTypes": ["Ground"]
+ "teraTypes": ["Ground"]
}
]
},
@@ -1674,7 +1674,7 @@
]
},
"shiftry": {
- "level": 84,
+ "level": 83,
"sets": [
{
"role": "Doubles Wallbreaker",
@@ -1702,7 +1702,7 @@
]
},
"gardevoir": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Choice Item user",
@@ -1736,7 +1736,7 @@
]
},
"breloom": {
- "level": 84,
+ "level": 83,
"sets": [
{
"role": "Doubles Fast Attacker",
@@ -1960,7 +1960,7 @@
]
},
"altaria": {
- "level": 91,
+ "level": 90,
"sets": [
{
"role": "Doubles Bulky Attacker",
@@ -2055,7 +2055,7 @@
]
},
"tropius": {
- "level": 94,
+ "level": 93,
"sets": [
{
"role": "Doubles Support",
@@ -2664,7 +2664,7 @@
]
},
"sneasler": {
- "level": 77,
+ "level": 76,
"sets": [
{
"role": "Doubles Wallbreaker",
@@ -3229,7 +3229,7 @@
]
},
"arceusdragon": {
- "level": 73,
+ "level": 72,
"sets": [
{
"role": "Doubles Setup Sweeper",
@@ -3313,7 +3313,7 @@
]
},
"arceusghost": {
- "level": 72,
+ "level": 71,
"sets": [
{
"role": "Doubles Bulky Setup",
@@ -4048,7 +4048,7 @@
]
},
"tornadustherian": {
- "level": 77,
+ "level": 78,
"sets": [
{
"role": "Doubles Setup Sweeper",
@@ -4292,7 +4292,7 @@
"abilities": ["Compound Eyes"],
"teraTypes": ["Flying", "Steel"]
},
- {
+ {
"role": "Doubles Fast Attacker",
"movepool": ["Hurricane", "Protect", "Sleep Powder", "Tailwind"],
"abilities": ["Compound Eyes"],
@@ -4401,7 +4401,7 @@
]
},
"sylveon": {
- "level": 79,
+ "level": 78,
"sets": [
{
"role": "Bulky Protect",
@@ -4663,7 +4663,7 @@
]
},
"gumshoos": {
- "level": 93,
+ "level": 94,
"sets": [
{
"role": "Choice Item user",
@@ -4781,7 +4781,7 @@
]
},
"lycanroc": {
- "level": 85,
+ "level": 84,
"sets": [
{
"role": "Offensive Protect",
@@ -4959,7 +4959,7 @@
]
},
"komala": {
- "level": 92,
+ "level": 93,
"sets": [
{
"role": "Doubles Bulky Attacker",
@@ -5775,7 +5775,7 @@
]
},
"calyrexshadow": {
- "level": 63,
+ "level": 62,
"sets": [
{
"role": "Offensive Protect",
@@ -5978,7 +5978,7 @@
"role": "Offensive Protect",
"movepool": ["First Impression", "Knock Off", "Leech Life", "Protect"],
"abilities": ["Tinted Lens"],
- "teraTypes": ["Bug"]
+ "teraTypes": ["Bug"]
}
]
},
@@ -6141,7 +6141,7 @@
"abilities": ["Competitive"],
"teraTypes": ["Flying", "Steel"]
},
- {
+ {
"role": "Doubles Wallbreaker",
"movepool": ["Hurricane", "Protect", "Tailwind", "Thunderbolt"],
"abilities": ["Competitive"],
@@ -6358,7 +6358,7 @@
]
},
"orthworm": {
- "level": 88,
+ "level": 89,
"sets": [
{
"role": "Bulky Protect",
diff --git a/data/random-battles/gen9/sets.json b/data/random-battles/gen9/sets.json
index b869ed198e..c4f31db372 100644
--- a/data/random-battles/gen9/sets.json
+++ b/data/random-battles/gen9/sets.json
@@ -3294,7 +3294,7 @@
]
},
"rotomwash": {
- "level": 83,
+ "level": 82,
"sets": [
{
"role": "Bulky Attacker",
@@ -3812,7 +3812,7 @@
]
},
"arceusice": {
- "level": 73,
+ "level": 72,
"sets": [
{
"role": "Bulky Setup",
@@ -4115,7 +4115,7 @@
]
},
"krookodile": {
- "level": 80,
+ "level": 79,
"sets": [
{
"role": "Fast Attacker",
@@ -4132,7 +4132,7 @@
]
},
"scrafty": {
- "level": 84,
+ "level": 83,
"sets": [
{
"role": "Bulky Setup",
@@ -5524,7 +5524,7 @@
]
},
"komala": {
- "level": 89,
+ "level": 88,
"sets": [
{
"role": "Bulky Support",
@@ -6488,7 +6488,7 @@
"role": "Bulky Attacker",
"movepool": ["Aqua Step", "Close Combat", "Rapid Spin", "Roost", "Swords Dance"],
"abilities": ["Moxie"],
- "teraTypes": ["Steel"]
+ "teraTypes": ["Steel"]
}
]
},
@@ -7072,7 +7072,7 @@
]
},
"farigiraf": {
- "level": 91,
+ "level": 90,
"sets": [
{
"role": "Bulky Support",
@@ -7140,7 +7140,7 @@
]
},
"brutebonnet": {
- "level": 81,
+ "level": 80,
"sets": [
{
"role": "Bulky Attacker",
From 0045ef67329fe1f965667fd14a685dec4dc21e50 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Thu, 2 Apr 2026 07:48:59 +0100
Subject: [PATCH 186/233] Fix Mega Evolution formes (#11860)
---
data/abilities.ts | 4 ++--
sim/battle-actions.ts | 9 ++++-----
2 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 57f6069350..c084ad8b79 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -1053,7 +1053,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
flags: {},
name: "Dragonize",
rating: 4,
- num: 312, // TODO confirm
+ num: 312, // TODO confirm with generation shift
},
dragonsmaw: {
onModifyAtkPriority: 5,
@@ -2524,7 +2524,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
flags: {},
name: "Mega Sol",
rating: 3,
- num: 311, // TODO confirm
+ num: 311, // TODO confirm with generation shift
// Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts
},
merciless: {
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 8c8456a66e..df27f93742 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1872,13 +1872,12 @@ export class BattleActions {
return altForme.name;
}
if (!item.megaStone) return null;
- // Temporary hardcode until generation shift
- if ((species.baseSpecies === "Floette" || species.baseSpecies === "Zygarde") && item.megaStone[species.name]) {
- return item.megaStone[species.name];
- }
+ // TODO confirm with generation shift
+ let megaEvolution = item.megaStone[species.name];
+ if (megaEvolution && this.dex.species.get(megaEvolution).gen >= 9) return megaEvolution;
// a hacked-in Megazard X can mega evolve into Megazard Y, but not into Megazard X
// FIXME: Change to species.name when champions comes
- const megaEvolution = item.megaStone[species.baseSpecies];
+ megaEvolution = item.megaStone[species.baseSpecies];
return megaEvolution && megaEvolution !== species.name ? megaEvolution : null;
}
From d63de4f826676d9f2aed77f414fd2c5ef28453af Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Thu, 2 Apr 2026 00:51:24 -0600
Subject: [PATCH 187/233] PU: Unban Heracross
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 82fcabba3f..993a7f753f 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -1521,7 +1521,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
heracross: {
- tier: "PUBL",
+ tier: "PU",
doublesTier: "(DUU)",
natDexTier: "RU",
},
From d596c03d62bf31255f249db1ef6dffb2ffd79ea6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Thu, 2 Apr 2026 07:52:17 +0100
Subject: [PATCH 188/233] National Dex UU: Ban Pecharunt (#11853)
https://www.smogon.com/forums/threads/sv-national-dex-uu-stage-8-5-toxic.3778894/post-10923327
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 993a7f753f..3f6d219b0f 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -5848,7 +5848,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
pecharunt: {
tier: "OU",
doublesTier: "(DUU)",
- natDexTier: "UU",
+ natDexTier: "UUBL",
},
missingno: {
isNonstandard: "Custom",
From 3006a64f405640c8409f41012b68efc4fc4404d0 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Thu, 2 Apr 2026 02:52:39 -0400
Subject: [PATCH 189/233] Ban "Nonexistent" from NatDex BH (#11857)
* Ban "Nonexistent"
* style
* style 2
* style 3
* Apply suggestion from @KrisXV
* Update formats.ts
* remove duplicated banlist
* remove ruleset from banlist
I don't even know what happened anymore
* Apply suggestion from @KrisXV
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index 08299a52de..d4a3465b1d 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -3325,7 +3325,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: [
'Standard AG', 'NatDex Mod', '!Obtainable',
- 'Forme Clause', 'Sleep Moves Clause', 'Ability Clause = 2', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', 'Terastal Clause',
+ 'Forme Clause', 'Sleep Moves Clause', 'Ability Clause = 2', 'OHKO Clause', 'Evasion Moves Clause', 'Dynamax Clause', 'CFZ Clause', 'Terastal Clause', '-Nonexistent',
],
banlist: [
'Cramorant-Gorging', 'Calyrex-Shadow', 'Darmanitan-Galar-Zen', 'Eternatus-Eternamax', 'Greninja-Ash', 'Groudon-Primal', 'Rayquaza-Mega', 'Shedinja', 'Terapagos-Stellar', 'Arena Trap',
From 3278858017435f2f0f913382fea755c8022b47a2 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Thu, 2 Apr 2026 16:43:33 -0600
Subject: [PATCH 190/233] Remove AFD ladders
---
config/formats.ts | 277 ++--------------------------
data/mods/gen6mixandmega/items.ts | 46 -----
data/mods/gen6mixandmega/scripts.ts | 117 ------------
data/mods/gen7mixandmega/items.ts | 46 -----
data/mods/gen7mixandmega/scripts.ts | 121 ------------
data/mods/gen8mixandmega/scripts.ts | 115 ------------
6 files changed, 18 insertions(+), 704 deletions(-)
delete mode 100644 data/mods/gen6mixandmega/items.ts
delete mode 100644 data/mods/gen6mixandmega/scripts.ts
delete mode 100644 data/mods/gen7mixandmega/items.ts
delete mode 100644 data/mods/gen7mixandmega/scripts.ts
delete mode 100644 data/mods/gen8mixandmega/scripts.ts
diff --git a/config/formats.ts b/config/formats.ts
index d4a3465b1d..1fe36fc824 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -25,13 +25,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
section: "S/V Singles",
},
- {
- name: "[Gen 9] Live Patch Battles Ver 1.0.0",
- threads: [`• https://twitter.com/pokemonpatches`],
- mod: 'afd',
- team: 'random',
- ruleset: ['[Gen 9] Random Battle'],
- },
{
name: "[Gen 9] Random Battle",
desc: `Randomized teams of Pokémon with sets that are generated to be competitively viable.`,
@@ -83,24 +76,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', '!Sleep Clause Mod'],
banlist: ['Uber', 'AG', 'Arena Trap', 'Moody', 'Shadow Tag', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail'],
},
- {
- name: "[Gen 9] Champoins OU",
- threads: [`Champoins OU Discussion`],
- mod: 'gen9',
- ruleset: ['[Gen 9] OU',
- '+Abomasite', '+Altarianite', '+Ampharosite', '+Banettite', '+Blastoisinite', '+Blazikenite', '+Cameruptite', '+Charizardite X', '+Charizardite Y',
- '+Diancite', '+Galladite', '+Garchompite', '+Gardevoirite', '+Gengarite', '+Glalitite', '+Gyaradosite', '+Heracronite', '+Houndoominite', '+Latiasite',
- '+Latiosite', '+Lucarionite', '+Medichamite', '+Metagrossite', '+Mewtwonite X', '+Mewtwonite Y', '+Sablenite', '+Salamencite', '+Sceptilite', '+Scizorite',
- '+Slowbronite', '+Swampertite', '+Tyranitarite', '+Venusaurite',
- // New Megas
- '+Emboarite', '+Meganiumite', '+Greninjite', '+Delphoxite', '+Chesnaughtite', '+Dragoninite', '+Feraligite', '+Froslassite',
- '+Abomasnow-Mega', '+Altaria-Mega', '+Ampharos-Mega', '+Banette-Mega', '+Blastoise-Mega', '+Blaziken-Mega', '+Camerupt-Mega', '+Charizard-Mega-X', '+Charizard-Mega-Y',
- '+Diancie-Mega', '+Gallade-Mega', '+Garchomp-Mega', '+Gardevoir-Mega', '+Gengar-Mega', '+Glalie-Mega', '+Gyarados-Mega', '+Heracross-Mega', '+Houndoom-Mega', '+Latias-Mega',
- '+Latios-Mega', '+Lucario-Mega', '+Medicham-Mega', '+Metagross-Mega', '+Mewtwo-Mega-X', '+Mewtwo-Mega-Y', '+Sableye-Mega', '+Salamence-Mega', '+Sceptile-Mega', '+Scizor-Mega',
- '+Slowbro-Mega', '+Swampert-Mega', '+Tyranitar-Mega', '+Venusaur-Mega', '+Emboar-Mega', '+Meganium-Mega', '+Greninja-Mega', '+Delphox-Mega', '+Chesnaught-Mega', '+Dragonite-Mega',
- '+Feraligatr-Mega', '+Froslass-Mega',
- ],
- },
{
name: "[Gen 9] Ubers",
mod: 'gen9',
@@ -2935,241 +2910,15 @@ export const Formats: import('../sim/dex-formats').FormatList = [
section: "Temporary Tour Metas",
},
{
- name: "[Gen 9] Mix and Mega LC",
- desc: `Mega evolve any Pokémon with any mega stone, or transform them with Genesect Drives, Primal orbs, Origin orbs, Rusted items, Ogerpon Masks, Arceus Plates, and Silvally Memories with no limit. Mega and Primal boosts based on form changes from gen 7.`,
- mod: 'mixandmega',
- searchShow: false,
- ruleset: ['Standard OMs', 'Little Cup', 'Sleep Clause Mod', 'Terastal Clause'],
+ name: "[Gen 5] Almost Any Ability",
+ mod: 'gen5',
+ ruleset: ['Standard', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Gems Clause', 'Baton Pass Stat Clause', '!Obtainable Abilities', 'Ability Clause = 2'],
banlist: [
- 'Basculin-White-Striped', 'Dunsparce', 'Duraludon', 'Meditite', 'Rufflet', 'Scyther', 'Sneasel', 'Sneasel-Hisui', 'Stantler', 'Moody',
- 'Absolite Z', 'Beedrillite', 'Blazikenite', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Lucarionite Z', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Zygardite',
- 'Baton Pass', 'Sticky Web',
+ 'Uber', 'Archeops', 'Bisharp', 'Deoxys-Defense', 'Deoxys-Speed', 'Keldeo', 'Kyurem-Black', 'Mamoswine', 'Regigigas', 'Shedinja', 'Slaking', 'Snorlax', 'Suicune', 'Terrakion',
+ 'Volcarona', 'Arena Trap', 'Chlorophyll', 'Contrary', 'Huge Power', 'Illusion', 'Imposter', 'Pure Power', 'Sand Rush', 'Shadow Tag', 'Simple', 'Speed Boost', 'Swift Swim',
+ 'Tinted Lens', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Soul Dew', 'Assist', 'Swagger',
],
- restricted: [
- 'Aipom', 'Buizel', 'Cutiefly', 'Dratini', 'Elekid', 'Gastly', 'Girafarig', 'Gligar', 'Mienfoo',
- 'Misdreavus', 'Murkrow', 'Pawniard', 'Qwilfish-Hisui', 'Voltorb-Hisui', 'Wattrel', 'Yanma',
- ],
- onValidateTeam(team) {
- const itemTable = new Set();
- for (const set of team) {
- const item = this.dex.items.get(set.item);
- if (!(item.forcedForme && !item.zMove) && !item.megaStone &&
- !item.isPrimalOrb && !item.name.startsWith('Rusted')) continue;
- const natdex = this.ruleTable.has('natdexmod');
- if (natdex && item.id !== 'ultranecroziumz') continue;
- const species = this.dex.species.get(set.species);
- if (species.isNonstandard && !this.ruleTable.has(`+pokemontag:${this.toID(species.isNonstandard)}`)) {
- return [`${species.baseSpecies} does not exist in gen 9.`];
- }
- if (((item.itemUser?.includes(species.name) || item.forcedForme === species.name) &&
- !item.megaStone && !item.isPrimalOrb) || (natdex && species.name.startsWith('Necrozma-') &&
- item.id === 'ultranecroziumz')) {
- continue;
- }
- if (this.ruleTable.isRestrictedSpecies(species) || this.toID(set.ability) === 'powerconstruct') {
- return [`${species.name} is not allowed to hold ${item.name}.`];
- }
- if (itemTable.has(item.id)) {
- return [
- `You are limited to one of each Mega Stone/Primal Orb/Rusted item/Origin item/Ogerpon Mask/Arceus Plate/Silvally Memory.`,
- `(You have more than one ${item.name})`,
- ];
- }
- itemTable.add(item.id);
- }
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- pokemon.m.originalSpecies = pokemon.baseSpecies.name;
- }
- },
- onSwitchIn(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- // Place volatiles on the Pokémon to show its mega-evolved condition and details
- this.add('-start', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- },
- onSwitchOut(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- this.add('-end', pokemon, originalSpecies.requiredItems?.[0] || originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- }
- },
- },
- {
- name: "[Gen 8] Mix and Mega",
- desc: `Mega evolve any Pokémon with any mega stone with no limit. Boosts based on mega evolution from gen 7.`,
- mod: 'gen8mixandmega',
- searchShow: false,
- ruleset: ['Standard', 'Dynamax Clause', 'Overflow Stat Mod'],
- banlist: [
- 'Calyrex-Shadow', 'Eternatus', 'Kyogre', 'Zacian', 'Zacian-Crowned', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite',
- 'Gengarite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Baton Pass', 'Electrify',
- ],
- restricted: [
- 'Calyrex-Ice', 'Dialga', 'Gengar', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Melmetal', 'Mewtwo',
- 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Urshifu', 'Urshifu-Rapid-Strike', 'Solgaleo',
- 'Xerneas', 'Yveltal', 'Zekrom', 'Power Construct',
- ],
- onValidateTeam(team) {
- const itemTable = new Set();
- for (const set of team) {
- const item = this.dex.items.get(set.item);
- if (!item.megaStone) continue;
- const species = this.dex.species.get(set.species);
- const ability = this.dex.abilities.get(set.ability);
- if (this.ruleTable.isRestricted(`item:${item.id}`) || this.ruleTable.isRestricted(`ability:${ability.id}`)) {
- return [`${species.name} is not allowed to hold ${item.name}.`];
- }
- if (itemTable.has(item.id)) {
- return [
- `You are limited to one of each Mega Stone.`,
- `(You have more than one ${item.name})`,
- ];
- }
- itemTable.add(item.id);
- }
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- pokemon.m.originalSpecies = pokemon.baseSpecies.name;
- }
- },
- onSwitchIn(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- // Place volatiles on the Pokémon to show its mega-evolved condition and details
- this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- },
- onSwitchOut(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- }
- },
- },
- {
- name: "[Gen 7] Mix and Mega",
- desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, with no limit.`,
- mod: 'gen7mixandmega',
- searchShow: false,
- ruleset: ['Standard', 'Mega Rayquaza Clause', 'Overflow Stat Mod'],
- banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
- restricted: [
- 'Beedrillite', 'Blazikenite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Ultranecrozium Z', 'Power Construct',
- 'Arceus', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White',
- 'Landorus-Therian', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Pheromosa', 'Rayquaza',
- 'Regigigas', 'Reshiram', 'Shuckle', 'Slaking', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom',
- ],
- onValidateTeam(team) {
- const itemTable = new Set();
- for (const set of team) {
- const item = this.dex.items.get(set.item);
- if (!item.megaStone && !item.isPrimalOrb && item.id !== 'ultranecroziumz') continue;
- const species = this.dex.species.get(set.species);
- const ability = this.dex.abilities.get(set.ability);
- if ((this.ruleTable.isRestrictedSpecies(species) || this.ruleTable.isRestricted(`item:${item.id}`) ||
- this.ruleTable.isRestricted(`ability:${ability.id}`)) &&
- !(((item.megaStone || item.isPrimalOrb) && item.itemUser?.includes(species.baseSpecies) ||
- (item.id === 'ultranecroziumz' && species.name.startsWith('Necrozma-'))))) {
- return [`${species.name} is not allowed to hold ${item.name}.`];
- }
- if (itemTable.has(item.id)) {
- return [
- `You are limited to one of each Mega Stone/Primal Orb.`,
- `(You have more than one ${item.name})`,
- ];
- }
- itemTable.add(item.id);
- }
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- pokemon.m.originalSpecies = pokemon.baseSpecies.name;
- }
- },
- onSwitchIn(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- // Place volatiles on the Pokémon to show its mega-evolved condition and details
- this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- },
- onSwitchOut(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- }
- },
- },
- {
- name: "[Gen 6] Mix and Mega",
- desc: `Mega evolve any Pokémon with any mega stone, or transform them with Primal orbs, with no limit.`,
- mod: 'gen6mixandmega',
- searchShow: false,
- ruleset: ['Standard', 'Mega Rayquaza Clause', 'Overflow Stat Mod', '!Sleep Clause Mod', 'Sleep Moves Clause'],
- banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'],
- restricted: [
- 'Beedrillite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Arceus', 'Darkrai', 'Deoxys-Attack', 'Deoxys-Normal', 'Deoxys-Speed',
- 'Dialga', 'Dragonite', 'Entei', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia',
- 'Manaphy', 'Mewtwo', 'Palkia', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Slaking', 'Xerneas', 'Yveltal', 'Zekrom',
- 'Swagger',
- ],
- onValidateTeam(team) {
- const itemTable = new Set();
- for (const set of team) {
- const item = this.dex.items.get(set.item);
- if (!item.megaStone && !item.isPrimalOrb) continue;
- const species = this.dex.species.get(set.species);
- if ((this.ruleTable.isRestrictedSpecies(species) || this.ruleTable.isRestricted(`item:${item.id}`)) &&
- !((item.megaStone || item.isPrimalOrb) && item.itemUser?.includes(species.baseSpecies))) {
- return [`${species.name} is not allowed to hold ${item.name}.`];
- }
- if (itemTable.has(item.id)) {
- return [
- `You are limited to one of each Mega Stone/Primal Orb.`,
- `(You have more than one ${item.name})`,
- ];
- }
- itemTable.add(item.id);
- }
- },
- onBegin() {
- for (const pokemon of this.getAllPokemon()) {
- pokemon.m.originalSpecies = pokemon.baseSpecies.name;
- }
- },
- onSwitchIn(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- // Place volatiles on the Pokémon to show its mega-evolved condition and details
- this.add('-start', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- },
- onSwitchOut(pokemon) {
- const originalSpecies = this.dex.species.get((pokemon.species as any).originalSpecies);
- if (originalSpecies.exists && pokemon.m.originalSpecies !== originalSpecies.baseSpecies) {
- this.add('-end', pokemon, originalSpecies.requiredItem || originalSpecies.requiredMove, '[silent]');
- }
- },
+ unbanlist: ['Landorus-Incarnate'],
},
// National Dex
@@ -3411,7 +3160,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
{
name: "[Gen 8] National Dex Doubles",
mod: 'gen8',
- // searchShow: false,
+ searchShow: false,
gameType: 'doubles',
ruleset: ['Standard Doubles', 'NatDex Mod', 'Evasion Abilities Clause'],
banlist: [
@@ -3604,6 +3353,16 @@ export const Formats: import('../sim/dex-formats').FormatList = [
}
},
},
+ {
+ name: "[Gen 9] Live Patch Battles Ver 1.0.0",
+ threads: [`• https://twitter.com/pokemonpatches`],
+ mod: 'afd',
+ team: 'random',
+ ruleset: ['[Gen 9] Random Battle'],
+ onBegin() {
+ this.add(`raw|`);
+ },
+ },
{
name: "[Gen 9] Battle Factory",
desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`,
diff --git a/data/mods/gen6mixandmega/items.ts b/data/mods/gen6mixandmega/items.ts
deleted file mode 100644
index f02eb9841b..0000000000
--- a/data/mods/gen6mixandmega/items.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- blueorb: {
- inherit: true,
- onSwitchIn(pokemon) {
- if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) {
- // @ts-expect-error modded
- const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Kyogre-Primal', pokemon);
- if (pokemon.m.originalSpecies === 'Kyogre') {
- pokemon.formeChange(species, this.effect, true);
- } else {
- pokemon.formeChange(species, this.effect, true);
- pokemon.baseSpecies = species;
- this.add('-start', pokemon, 'Blue Orb', '[silent]');
- }
- }
- },
- onTakeItem: false,
- },
- redorb: {
- inherit: true,
- onSwitchIn(pokemon) {
- if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) {
- // @ts-expect-error modded
- const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Groudon-Primal', pokemon);
- if (pokemon.m.originalSpecies === 'Groudon') {
- pokemon.formeChange(species, this.effect, true);
- } else {
- pokemon.formeChange(species, this.effect, true);
- pokemon.baseSpecies = species;
- this.add('-start', pokemon, 'Red Orb', '[silent]');
- const apparentSpecies = pokemon.illusion ? pokemon.illusion.species.name : pokemon.m.originalSpecies;
- const oSpecies = this.dex.species.get(apparentSpecies);
- if (pokemon.illusion) {
- const types = oSpecies.types;
- if (types.length > 1 || types[types.length - 1] !== 'Fire') {
- this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]');
- }
- } else if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- }
- },
- onTakeItem: false,
- },
-};
diff --git a/data/mods/gen6mixandmega/scripts.ts b/data/mods/gen6mixandmega/scripts.ts
deleted file mode 100644
index e4b67ff9c7..0000000000
--- a/data/mods/gen6mixandmega/scripts.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 6,
- inherit: 'gen6',
- init() {
- for (const i in this.data.Items) {
- if (!this.data.Items[i].megaStone) continue;
- this.modData('Items', i).onTakeItem = false;
- }
- },
- actions: {
- canMegaEvo(pokemon) {
- if (pokemon.species.isMega || pokemon.species.isPrimal) return null;
-
- const item = pokemon.getItem();
- if (item.megaStone) {
- const values = Object.values(item.megaStone);
- if (values.includes(pokemon.name)) return null;
- return values[0];
- } else if (pokemon.baseMoves.includes('dragonascent')) {
- return 'Rayquaza-Mega';
- } else {
- return null;
- }
- },
- runMegaEvo(pokemon) {
- if (pokemon.species.isMega || pokemon.species.isPrimal) return false;
-
- const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon);
-
- // Do we have a proper sprite for it? Code for when megas actually exist
- if (this.dex.species.get(pokemon.canMegaEvo as any).baseSpecies === pokemon.m.originalSpecies) {
- pokemon.formeChange(species, pokemon.getItem(), true);
- } else {
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
- pokemon.formeChange(species, pokemon.getItem(), true);
- this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
-
- pokemon.canMegaEvo = false;
- return true;
- },
- getMixedSpecies(originalForme, formeChange, pokemon) {
- const originalSpecies = this.dex.species.get(originalForme);
- const formeChangeSpecies = this.dex.species.get(formeChange);
- if (originalSpecies.baseSpecies === formeChangeSpecies.baseSpecies) {
- return formeChangeSpecies;
- }
- const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon);
- const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas);
- return species;
- },
- getFormeChangeDeltas(formeChangeSpecies, pokemon) {
- // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change
- const baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ?
- formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies);
- const deltas: {
- ability: string,
- baseStats: SparseStatsTable,
- weighthg: number,
- heightm: number,
- originalSpecies: string,
- requiredItem: string | undefined,
- type?: string,
- formeType?: string,
- isMega?: boolean,
- } = {
- ability: formeChangeSpecies.abilities['0'],
- baseStats: {},
- weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg,
- heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10,
- originalSpecies: formeChangeSpecies.name,
- requiredItem: formeChangeSpecies.requiredItem,
- };
- let statId: StatID;
- for (statId in formeChangeSpecies.baseStats) {
- deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId];
- }
- let formeType: string | null = null;
- if (formeChangeSpecies.types.length > baseSpecies.types.length) {
- deltas.type = formeChangeSpecies.types[1];
- } else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
- deltas.type = baseSpecies.types[0];
- } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
- deltas.type = formeChangeSpecies.types[1];
- }
- if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega';
- if (formeChangeSpecies.isPrimal) formeType = 'Primal';
- if (formeType) deltas.formeType = formeType;
- return deltas;
- },
- mutateOriginalSpecies(speciesOrForme, deltas) {
- if (!deltas) throw new TypeError("Must specify deltas!");
- const species = this.dex.deepClone(this.dex.species.get(speciesOrForme));
- species.abilities = { '0': deltas.ability };
- if (species.types[0] === deltas.type) {
- species.types = [deltas.type];
- } else if (deltas.type) {
- species.types = [species.types[0], deltas.type];
- }
- const baseStats = species.baseStats;
- for (const statName in baseStats) {
- baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255);
- }
- species.weighthg = Math.max(1, species.weighthg + deltas.weighthg);
- species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
- species.originalSpecies = deltas.originalSpecies;
- species.requiredItem = deltas.requiredItem;
- if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true;
- if (deltas.formeType === 'Primal') species.isPrimal = true;
- return species;
- },
- },
-};
diff --git a/data/mods/gen7mixandmega/items.ts b/data/mods/gen7mixandmega/items.ts
deleted file mode 100644
index f02eb9841b..0000000000
--- a/data/mods/gen7mixandmega/items.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
- blueorb: {
- inherit: true,
- onSwitchIn(pokemon) {
- if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) {
- // @ts-expect-error modded
- const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Kyogre-Primal', pokemon);
- if (pokemon.m.originalSpecies === 'Kyogre') {
- pokemon.formeChange(species, this.effect, true);
- } else {
- pokemon.formeChange(species, this.effect, true);
- pokemon.baseSpecies = species;
- this.add('-start', pokemon, 'Blue Orb', '[silent]');
- }
- }
- },
- onTakeItem: false,
- },
- redorb: {
- inherit: true,
- onSwitchIn(pokemon) {
- if (pokemon.isActive && !pokemon.species.isPrimal && !pokemon.transformed) {
- // @ts-expect-error modded
- const species: Species = this.actions.getMixedSpecies(pokemon.m.originalSpecies, 'Groudon-Primal', pokemon);
- if (pokemon.m.originalSpecies === 'Groudon') {
- pokemon.formeChange(species, this.effect, true);
- } else {
- pokemon.formeChange(species, this.effect, true);
- pokemon.baseSpecies = species;
- this.add('-start', pokemon, 'Red Orb', '[silent]');
- const apparentSpecies = pokemon.illusion ? pokemon.illusion.species.name : pokemon.m.originalSpecies;
- const oSpecies = this.dex.species.get(apparentSpecies);
- if (pokemon.illusion) {
- const types = oSpecies.types;
- if (types.length > 1 || types[types.length - 1] !== 'Fire') {
- this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]');
- }
- } else if (oSpecies.types.length !== pokemon.species.types.length || oSpecies.types[1] !== pokemon.species.types[1]) {
- this.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
- }
- },
- onTakeItem: false,
- },
-};
diff --git a/data/mods/gen7mixandmega/scripts.ts b/data/mods/gen7mixandmega/scripts.ts
deleted file mode 100644
index 8f056ff19e..0000000000
--- a/data/mods/gen7mixandmega/scripts.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 7,
- inherit: 'gen7',
- init() {
- for (const i in this.data.Items) {
- if (!this.data.Items[i].megaStone) continue;
- this.modData('Items', i).onTakeItem = false;
- }
- },
- actions: {
- canMegaEvo(pokemon) {
- if (pokemon.species.isMega || pokemon.species.isPrimal) return null;
-
- const item = pokemon.getItem();
- if (item.megaStone) {
- const values = Object.values(item.megaStone);
- if (values.includes(pokemon.name)) return null;
- return values[0];
- } else if (pokemon.baseMoves.includes('dragonascent')) {
- return 'Rayquaza-Mega';
- } else {
- return null;
- }
- },
- runMegaEvo(pokemon) {
- if (pokemon.species.isMega || pokemon.species.isPrimal) return false;
-
- const isUltraBurst = !pokemon.canMegaEvo;
-
- const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies,
- pokemon.canMegaEvo || pokemon.canUltraBurst, pokemon);
-
- // Do we have a proper sprite for it? Code for when megas actually exist
- if (isUltraBurst || this.dex.species.get(pokemon.canMegaEvo as any).baseSpecies === pokemon.m.originalSpecies) {
- pokemon.formeChange(species, pokemon.getItem(), true);
- } else {
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
- pokemon.formeChange(species, pokemon.getItem(), true);
- this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- }
-
- pokemon.canMegaEvo = false;
- if (isUltraBurst) pokemon.canUltraBurst = null;
- return true;
- },
- getMixedSpecies(originalForme, formeChange, pokemon) {
- const originalSpecies = this.dex.species.get(originalForme);
- const formeChangeSpecies = this.dex.species.get(formeChange);
- if (originalSpecies.baseSpecies === formeChangeSpecies.baseSpecies) {
- return formeChangeSpecies;
- }
- const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon);
- const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas);
- return species;
- },
- getFormeChangeDeltas(formeChangeSpecies, pokemon) {
- // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change
- const baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ?
- formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies);
- const deltas: {
- ability: string,
- baseStats: SparseStatsTable,
- weighthg: number,
- heightm: number,
- originalSpecies: string,
- requiredItem: string | undefined,
- type?: string,
- formeType?: string,
- isMega?: boolean,
- } = {
- ability: formeChangeSpecies.abilities['0'],
- baseStats: {},
- weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg,
- heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10,
- originalSpecies: formeChangeSpecies.name,
- requiredItem: formeChangeSpecies.requiredItem,
- };
- let statId: StatID;
- for (statId in formeChangeSpecies.baseStats) {
- deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId];
- }
- let formeType: string | null = null;
- if (formeChangeSpecies.types.length > baseSpecies.types.length) {
- deltas.type = formeChangeSpecies.types[1];
- } else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
- deltas.type = baseSpecies.types[0];
- } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
- deltas.type = formeChangeSpecies.types[1];
- }
- if (formeChangeSpecies.isMega && !formeType) formeType = 'Mega';
- if (formeChangeSpecies.isPrimal) formeType = 'Primal';
- if (formeType) deltas.formeType = formeType;
- return deltas;
- },
- mutateOriginalSpecies(speciesOrForme, deltas) {
- if (!deltas) throw new TypeError("Must specify deltas!");
- const species = this.dex.deepClone(this.dex.species.get(speciesOrForme));
- species.abilities = { '0': deltas.ability };
- if (species.types[0] === deltas.type) {
- species.types = [deltas.type];
- } else if (deltas.type) {
- species.types = [species.types[0], deltas.type];
- }
- const baseStats = species.baseStats;
- for (const statName in baseStats) {
- baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255);
- }
- species.weighthg = Math.max(1, species.weighthg + deltas.weighthg);
- species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
- species.originalSpecies = deltas.originalSpecies;
- species.requiredItem = deltas.requiredItem;
- if (deltas.formeType === 'Mega' || deltas.isMega) species.isMega = true;
- if (deltas.formeType === 'Primal') species.isPrimal = true;
- return species;
- },
- },
-};
diff --git a/data/mods/gen8mixandmega/scripts.ts b/data/mods/gen8mixandmega/scripts.ts
deleted file mode 100644
index e59a9f14ea..0000000000
--- a/data/mods/gen8mixandmega/scripts.ts
+++ /dev/null
@@ -1,115 +0,0 @@
-export const Scripts: ModdedBattleScriptsData = {
- gen: 8,
- inherit: 'gen8',
- init() {
- for (const i in this.data.Items) {
- const item = this.data.Items[i];
- if (!item.megaStone || item.isNonstandard !== 'Past') continue;
- this.modData('Items', i).onTakeItem = false;
- this.modData('Items', i).isNonstandard = null;
- if (item.megaStone) {
- for (const megaEvo of Object.values(item.megaStone)) {
- this.modData('FormatsData', this.toID(megaEvo)).isNonstandard = null;
- }
- }
- }
- },
- actions: {
- canMegaEvo(pokemon) {
- if (pokemon.species.isMega) return null;
-
- const item = pokemon.getItem();
- if (!item.megaStone) return null;
- return Object.values(item.megaStone)[0];
- },
- runMegaEvo(pokemon) {
- if (pokemon.species.isMega) return false;
-
- const species: Species = (this as any).getMixedSpecies(pokemon.m.originalSpecies, pokemon.canMegaEvo, pokemon);
-
- /* Do we have a proper sprite for it? Code for when megas actually exist
- if (this.dex.species.get(pokemon.canMegaEvo!).baseSpecies === pokemon.m.originalSpecies) {
- pokemon.formeChange(species, pokemon.getItem(), true);
- } else { */
- const oSpecies = this.dex.species.get(pokemon.m.originalSpecies);
- const oMegaSpecies = this.dex.species.get((species as any).originalSpecies);
- pokemon.formeChange(species, pokemon.getItem(), true);
- this.battle.add('-start', pokemon, oMegaSpecies.requiredItem, '[silent]');
- if (oSpecies.types.join('/') !== pokemon.species.types.join('/')) {
- this.battle.add('-start', pokemon, 'typechange', pokemon.species.types.join('/'), '[silent]');
- }
- // }
-
- pokemon.canMegaEvo = false;
- return true;
- },
- getMixedSpecies(originalForme, formeChange, pokemon) {
- const originalSpecies = this.dex.species.get(originalForme);
- const formeChangeSpecies = this.dex.species.get(formeChange);
- const deltas = (this as any).getFormeChangeDeltas(formeChangeSpecies, pokemon);
- const species = (this as any).mutateOriginalSpecies(originalSpecies, deltas);
- return species;
- },
- getFormeChangeDeltas(formeChangeSpecies, pokemon) {
- // Should be fine as long as Necrozma-U doesn't get added or Game Freak makes me sad with some convoluted forme change
- let baseSpecies = this.dex.species.get(formeChangeSpecies.isMega ?
- formeChangeSpecies.battleOnly as string : formeChangeSpecies.baseSpecies);
- if (formeChangeSpecies.name === 'Zygarde-Mega') {
- baseSpecies = this.dex.species.get('Zygarde-Complete');
- }
- const deltas: {
- ability: string,
- baseStats: SparseStatsTable,
- weighthg: number,
- heightm: number,
- originalSpecies: string,
- requiredItem: string | undefined,
- type?: string,
- formeType?: string,
- isMega?: boolean,
- } = {
- ability: formeChangeSpecies.abilities['0'],
- baseStats: {},
- weighthg: formeChangeSpecies.weighthg - baseSpecies.weighthg,
- heightm: ((formeChangeSpecies.heightm * 10) - (baseSpecies.heightm * 10)) / 10,
- originalSpecies: formeChangeSpecies.name,
- requiredItem: formeChangeSpecies.requiredItem,
- };
- let statId: StatID;
- for (statId in formeChangeSpecies.baseStats) {
- deltas.baseStats[statId] = formeChangeSpecies.baseStats[statId] - baseSpecies.baseStats[statId];
- }
- if (formeChangeSpecies.types.length > baseSpecies.types.length) {
- deltas.type = formeChangeSpecies.types[1];
- } else if (formeChangeSpecies.types.length < baseSpecies.types.length) {
- deltas.type = 'mono';
- } else if (formeChangeSpecies.types[1] !== baseSpecies.types[1]) {
- deltas.type = formeChangeSpecies.types[1];
- }
- deltas.isMega = true;
- return deltas;
- },
- mutateOriginalSpecies(speciesOrForme, deltas) {
- if (!deltas) throw new TypeError("Must specify deltas!");
- const species = this.dex.deepClone(this.dex.species.get(speciesOrForme));
- species.abilities = { '0': deltas.ability };
- if (species.types[0] === deltas.type) {
- species.types = [deltas.type];
- } else if (deltas.type === 'mono') {
- species.types = [species.types[0]];
- } else if (deltas.type) {
- species.types = [species.types[0], deltas.type];
- }
- const baseStats = species.baseStats;
- for (const statName in baseStats) {
- baseStats[statName] = this.battle.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255);
- }
- species.weighthg = Math.max(1, species.weighthg + deltas.weighthg);
- species.heightm = Math.max(0.1, ((species.heightm * 10) + (deltas.heightm * 10)) / 10);
- species.originalSpecies = deltas.originalSpecies;
- species.requiredItem = deltas.requiredItem;
- if (deltas.isMega) species.isMega = true;
- return species;
- },
- },
-};
From 1cb9d96b1f41303baca991149c6f5395b2f716fc Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Thu, 2 Apr 2026 16:53:13 -0600
Subject: [PATCH 191/233] Give Pokebilities AAA a normal ladder
---
config/formats.ts | 76 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
diff --git a/config/formats.ts b/config/formats.ts
index 1fe36fc824..34e4fb9f28 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -910,6 +910,82 @@ export const Formats: import('../sim/dex-formats').FormatList = [
}
},
},
+ {
+ name: "[Gen 9] Pokebilities AAA",
+ desc: `Pokémon have all of their released abilities simultaneously, as well as one ability they cannot normally use.`,
+ mod: 'pokebilities',
+ ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'AAA Restricted Abilities', 'Terastal Clause', 'Sleep Moves Clause'],
+ banlist: [
+ 'Annihilape', 'Arcanine-Hisui', 'Arceus', 'Archaludon', 'Azumarill', 'Basculegion', 'Basculin', 'Baxcalibur', 'Blaziken', 'Braviary-Hisui', 'Calyrex-Ice', 'Calyrex-Shadow',
+ 'Ceruledge', 'Chi-Yu', 'Chien-Pao', 'Clefable', 'Cloyster', 'Conkeldurr', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite',
+ 'Enamorus-Incarnate', 'Espathra', 'Eternatus', 'Excadrill', 'Flutter Mane', 'Gholdengo', 'Giratina', 'Giratina-Origin', 'Gliscor', 'Gouging Fire', 'Groudon', 'Hawlucha',
+ 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Iron Valiant', 'Kingambit', 'Keldeo', 'Kleavor', 'Koraidon', 'Kyogre', 'Kyurem', 'Kyurem-Black', 'Kyurem-White', 'Landorus-Incarnate',
+ 'Lugia', 'Lunala', 'Magearna', 'Manaphy', 'Mewtwo', 'Miraidon', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Noivern', 'Ogerpon-Hearthflame', 'Palkia', 'Palkia-Origin',
+ 'Porygon-Z', 'Raging Bolt', 'Rayquaza', 'Reshiram', 'Roaring Moon', 'Serperior', 'Shaymin-Sky', 'Smeargle', 'Sneasler', 'Solgaleo', 'Spectrier', 'Ursaluna', 'Ursaluna-Bloodmoon',
+ 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake', 'Weavile', 'Yanmega', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap',
+ 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Shadow Tag',
+ 'Regenerator + Wimp Out', 'Regenerator + Emergency Exit', 'Regenerator > 2', 'Drizzle + Swift Swim', 'Primordial Sea + Swift Swim', 'Drought + Chlorophyll',
+ 'Desolate Land + Chlorophyll', 'Electric Surge + Surge Surfer', 'Hadron Engine + Surge Surfer', 'Hadron Engine + Quark Drive', 'Electric Surge + Quark Drive',
+ 'Drought + Protosynthesis', 'Sand Stream + Sand Rush', 'Sand Stream + Sand Veil', 'Snow Warning + Snow Cloak', 'Snow Warning + Slush Rush',
+ 'Bright Powder', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Revival Blessing', 'Shed Tail', 'Stored Power',
+ ],
+ restricted: [
+ 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Huge Power', 'Ice Scales', 'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Orichalcum Pulse',
+ 'Parental Bond', 'Poison Heal', 'Pure Power', 'Sand Veil', 'Simple', 'Snow Cloak', 'Speed Boost', 'Stakeout', 'Stench', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden',
+ 'Water Bubble', 'Wonder Guard',
+ ],
+ onValidateSet(set) {
+ const species = this.dex.species.get(set.species);
+ const unSeenAbilities = Object.keys(species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !species.unreleasedHidden))
+ .map(key => species.abilities[key as "0" | "1" | "H" | "S"])
+ .filter(ability => ability !== set.ability);
+ if (unSeenAbilities.length && this.toID(set.ability) !== this.toID(species.abilities['S'])) {
+ for (const abilityName of unSeenAbilities) {
+ const banReason = this.ruleTable.check('ability:' + this.toID(abilityName));
+ if (banReason) {
+ return [`${set.name}'s ability ${abilityName} is ${banReason}.`];
+ }
+ }
+ }
+ },
+ onBegin() {
+ for (const pokemon of this.getAllPokemon()) {
+ if (pokemon.ability === this.toID(pokemon.species.abilities['S'])) {
+ continue;
+ }
+ pokemon.m.innates = Object.keys(pokemon.species.abilities)
+ .filter(key => key !== 'S' && (key !== 'H' || !pokemon.species.unreleasedHidden))
+ .map(key => this.toID(pokemon.species.abilities[key as "0" | "1" | "H" | "S"]))
+ .filter(ability => ability !== pokemon.ability);
+ }
+ },
+ onBeforeSwitchIn(pokemon) {
+ if (pokemon.m.innates) {
+ for (const innate of pokemon.m.innates) {
+ if (pokemon.hasAbility(innate)) continue;
+ const effect = 'ability:' + this.toID(innate);
+ pokemon.volatiles[effect] = this.initEffectState({ id: effect, target: pokemon });
+ }
+ }
+ },
+ onSwitchOut(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
+ }
+ },
+ onFaint(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ const innateEffect = this.dex.conditions.get(innate) as Effect;
+ this.singleEvent('End', innateEffect, null, pokemon); }
+ },
+ onAfterMega(pokemon) {
+ for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
+ pokemon.removeVolatile(innate);
+ }
+ pokemon.m.innates = undefined;
+ },
+ },
{
name: "[Gen 9] Shared Power",
desc: `Once a Pokémon switches in, its ability is shared with the rest of the team.`,
From 9fa739c1e602be23a1f5d023b6a6572093cc9e2b Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Thu, 2 Apr 2026 16:56:34 -0600
Subject: [PATCH 192/233] Fix build
---
config/formats.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index 34e4fb9f28..6c532221e3 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -977,7 +977,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
onFaint(pokemon) {
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
const innateEffect = this.dex.conditions.get(innate) as Effect;
- this.singleEvent('End', innateEffect, null, pokemon); }
+ this.singleEvent('End', innateEffect, null, pokemon);
+ }
},
onAfterMega(pokemon) {
for (const innate of Object.keys(pokemon.volatiles).filter(i => i.startsWith('ability:'))) {
From 61d354e7f4e97803bf135f0aca14a30d94131edb Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 3 Apr 2026 12:33:56 -0600
Subject: [PATCH 193/233] STAAABmons: Fix bans
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 6c532221e3..b94f86ab08 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -679,8 +679,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Speed Boost', 'Stakeout', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Eruption', 'Esper Wing', 'Extreme Speed', 'Fillet Away',
- 'Final Gambit', 'Gigaton Hammer', 'Glacial Lance', 'Jet Punch', 'Last Respects', 'Lumina Crash', 'No Retreat', 'Population Bomb', 'Rage Fist', 'Revival Blessing', 'Rising Voltage', 'Shell Smash',
+ 'Acupressure', 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Eruption', 'Esper Wing', 'Extreme Speed',
+ 'Fillet Away', 'Final Gambit', 'Gigaton Hammer', 'Glacial Lance', 'Jet Punch', 'Lumina Crash', 'No Retreat', 'Population Bomb', 'Rage Fist', 'Revival Blessing', 'Rising Voltage', 'Shell Smash',
'Shift Gear', 'Surging Strikes', 'Tail Glow', 'Take Heart', 'Torch Song', 'Transform', 'Triple Arrows', 'V-create', 'Victory Dance', 'Water Spout', 'Wicked Blow', 'Wicked Torque',
],
},
From 0a1029243caff52a4e83f34846a3381f1fb224a4 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 3 Apr 2026 12:34:29 -0600
Subject: [PATCH 194/233] Linked: Restrict Fake Out
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index b94f86ab08..610ec4920f 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -1976,8 +1976,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Baton Pass', 'Last Respects', 'Shed Tail',
],
restricted: [
- 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fly', 'Imprison', 'Nasty Plot', 'Phantom Force',
- 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
+ 'Assurance', 'Baneful Bunker', 'Bounce', 'Burning Bulwark', 'Copycat', 'Detect', 'Dig', 'Dive', 'Encore', 'Endeavor', 'Fake Out', 'Fly', 'Imprison', 'Nasty Plot',
+ 'Phantom Force', 'Protect', 'Ruination', 'Shadow Force', 'Shell Smash', 'Silk Trap', 'Spiky Shield', 'Sunny Day', 'Super Fang', 'Swords Dance', 'Taunt', 'Trick Room',
],
onValidateSet(set) {
const problems = [];
From dae827f7c758b2b0ecec796609594a15a2015a36 Mon Sep 17 00:00:00 2001
From: Runo <105902454+Runoisch@users.noreply.github.com>
Date: Sun, 5 Apr 2026 00:34:49 -0400
Subject: [PATCH 195/233] NatDex RU: Ban Iron Boulder & Ursaluna (#11891)
https://www.smogon.com/forums/threads/national-dex-ru-metagame-discussion.3713801/post-10935371
---
data/formats-data.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 3f6d219b0f..bdb12ecfb9 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -1557,7 +1557,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
ursaluna: {
tier: "UUBL",
doublesTier: "DOU",
- natDexTier: "RU",
+ natDexTier: "RUBL",
},
ursalunabloodmoon: {
tier: "Uber",
@@ -5828,7 +5828,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
ironboulder: {
tier: "UUBL",
doublesTier: "(DUU)",
- natDexTier: "RU",
+ natDexTier: "RUBL",
},
ironcrown: {
tier: "OU",
From 200aa0d944ae1deee50d7bdca9996c57e20371c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 5 Apr 2026 05:38:14 +0100
Subject: [PATCH 196/233] ZU: Ban Oricorio-Baile and Oricorio-Pa'u (#11884)
https://www.smogon.com/forums/threads/np-zu-stage-18-flower-tier-shifts-28.3770736/post-10933930
---
data/formats-data.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index bdb12ecfb9..70f60ca988 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -4294,7 +4294,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "Illegal",
},
oricorio: {
- tier: "ZU",
+ tier: "ZUBL",
doublesTier: "(DUU)",
natDexTier: "RU",
},
@@ -4304,7 +4304,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RU",
},
oricoriopau: {
- tier: "ZU",
+ tier: "ZUBL",
doublesTier: "(DUU)",
natDexTier: "RU",
},
From fed5bee42d6d7c402a11232288e898beabac00d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 5 Apr 2026 05:38:54 +0100
Subject: [PATCH 197/233] Ubers UU: April 2026 Tier Shifts (#11894)
* Ubers UU: Ban Rayquaza
https://www.smogon.com/forums/threads/sv-ubers-uu-metagame-discussion-giratina-ban-post-739.3731761/post-10936665
* Ubers UU: April 2026 Tier Shifts
---
config/formats.ts | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 610ec4920f..b689a3249c 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -381,12 +381,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 9] Ubers'],
banlist: [
// Ubers OU
- 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Calyrex-Ice', 'Chien-Pao', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto',
+ 'Arceus-Normal', 'Arceus-Fairy', 'Arceus-Ghost', 'Arceus-Ground', 'Arceus-Water', 'Blissey', 'Calyrex-Ice', 'Deoxys-Attack', 'Deoxys-Speed', 'Ditto',
'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina-Origin', 'Glimmora', 'Gliscor', 'Grimmsnarl', 'Groudon', 'Hatterene', 'Ho-Oh', 'Kingambit', 'Koraidon',
- 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Rayquaza', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned',
+ 'Kyogre', 'Kyurem-Black', 'Landorus-Therian', 'Lunala', 'Necrozma-Dusk-Mane', 'Ribombee', 'Skeledirge', 'Terapagos', 'Ting-Lu', 'Zacian-Crowned',
// Ubers UUBL + Lunala, Arceus-Ghost, Arceus-Water
- 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Shaymin-Sky', 'Spectrier', 'Zacian',
- 'Zekrom',
+ 'Arceus-Dragon', 'Arceus-Electric', 'Arceus-Fire', 'Arceus-Flying', 'Arceus-Steel', 'Giratina', 'Necrozma-Dawn-Wings', 'Rayquaza', 'Shaymin-Sky', 'Spectrier',
+ 'Zacian', 'Zekrom',
],
},
From efe5a687783bb4b3661267784ae71d423096ac3a Mon Sep 17 00:00:00 2001
From: Soul-8691 <42703201+Soul-8691@users.noreply.github.com>
Date: Sun, 5 Apr 2026 00:39:37 -0400
Subject: [PATCH 198/233] [Gen 3] FRLG OU: Ban Sand Veil (#11892)
---
config/formats.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/config/formats.ts b/config/formats.ts
index b689a3249c..264a050ee9 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -773,7 +773,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 3] FRLG OU",
mod: 'gen3frlg',
ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'],
- banlist: ['Uber'],
+ banlist: ['Uber', 'Sand Veil'],
},
{
name: "[Gen 4] VGC 2009",
From 856002f191fbab9bded1ffda540d2da9b48b5737 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Sun, 5 Apr 2026 00:40:08 -0400
Subject: [PATCH 199/233] Update Psychic Terrain hint (#11873)
---
data/mods/gen9ssb/moves.ts | 2 +-
data/mods/teraoverride/moves.ts | 2 +-
data/moves.ts | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index 22bb504ca9..abfa25a8a6 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -6604,7 +6604,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (!target.isGrounded()) {
const baseMove = this.dex.moves.get(effect.id);
if (baseMove.priority > 0) {
- this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground.");
+ this.hint("Psychic Terrain doesn't affect airborne Pokémon.");
}
return;
}
diff --git a/data/mods/teraoverride/moves.ts b/data/mods/teraoverride/moves.ts
index 90955d4d5c..5e8175440b 100644
--- a/data/mods/teraoverride/moves.ts
+++ b/data/mods/teraoverride/moves.ts
@@ -574,7 +574,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (!target.isGrounded()) {
const baseMove = this.dex.moves.get(effect.id);
if (baseMove.priority > 0) {
- this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground.");
+ this.hint("Psychic Terrain doesn't affect airborne Pokémon.");
}
return;
}
diff --git a/data/moves.ts b/data/moves.ts
index b09213c5b8..6cccc05dc8 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -14159,7 +14159,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (!target.isGrounded()) {
const baseMove = this.dex.moves.get(effect.id);
if (baseMove.priority > 0) {
- this.hint("Psychic Terrain doesn't affect Pokémon immune to Ground.");
+ this.hint("Psychic Terrain doesn't affect airborne Pokémon.");
}
return;
}
From 78cdce345ae8e7822114c647dfd16a7bb62f0e6f Mon Sep 17 00:00:00 2001
From: missshowdown
Date: Sat, 4 Apr 2026 21:41:59 -0700
Subject: [PATCH 200/233] Update ZU-by-usage NFEs (#11896)
* Ban Oricorios from ZU & update ZU by usage NFEs
Oricorio Baile and Pa'u got banned from ZU
https://www.smogon.com/forums/threads/np-zu-stage-18-flower-tier-shifts-28.3770736/post-10933930
Sneasel and Gurdurr are both ZU by usage
Sneasel: 7.50598% Jan, 12.92988% Feb, 10.38042% Mar, 10.27% Avg
Gurdurr: 5.14278% Jan, 4.96214% Feb, 5.45889% Mar, 5.19% Avg
* Apply suggestions from code review
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
data/formats-data.ts | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index 70f60ca988..ac9140bfbd 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -1531,7 +1531,9 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
natDexTier: "RUBL",
},
sneasel: {
- tier: "NFE",
+ tier: "ZU",
+ doublesTier: "NFE",
+ natDexTier: "NFE",
},
sneaselhisui: {
tier: "ZU",
@@ -3136,7 +3138,9 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
gurdurr: {
- tier: "NFE",
+ tier: "ZU",
+ doublesTier: "NFE",
+ natDexTier: "NFE",
},
conkeldurr: {
tier: "UU",
From 479c4c5162547e85ec8b467804e8cfd8ee5d75ca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 5 Apr 2026 05:43:15 +0100
Subject: [PATCH 201/233] Fix Pressure PP deduction for Snatch in Gen 4
(#11845)
* Fix Pressure PP deduction for Snatch in Gen 4
* Lint
---
data/mods/gen4/moves.ts | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 9e0c836f58..a37cd74762 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1234,9 +1234,15 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
}
snatchUser.removeVolatile('snatch');
this.add('-activate', snatchUser, 'move: Snatch', `[of] ${source}`);
- if (this.actions.useMove(move.id, snatchUser)) {
- snatchUser.deductPP('snatch');
+
+ // check Pressure
+ const ppDrop = this.runEvent('DeductPP', source, snatchUser, this.effectState.sourceEffect);
+ const extraPP = ppDrop !== true ? ppDrop : 0;
+ if (extraPP > 0) {
+ snatchUser.deductPP(this.effectState.sourceEffect.id, extraPP);
}
+
+ this.actions.useMove(move.id, snatchUser);
return null;
},
},
From 6c1aeba4b2cef11309485c62d740c4467dd688c9 Mon Sep 17 00:00:00 2001
From: iforgetwhyimhere
Date: Sun, 5 Apr 2026 00:44:44 -0400
Subject: [PATCH 202/233] STAAABmons: Update bans (#11893)
* STAAABmons: Update bans
* Update formats.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
---
config/formats.ts | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 264a050ee9..d2686168d8 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -667,7 +667,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 9] STAAABmons",
desc: `Pokémon have access to almost any ability and can use any move of their typing, in addition to the moves they can normally learn.`,
mod: 'gen9',
- ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'],
+ ruleset: ['Standard OMs', '!Obtainable Abilities', 'Ability Clause = 1', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause', 'STABmons Move Legality'],
banlist: [
'Annihilape', 'Arceus', 'Baxcalibur', 'Calyrex-Ice', 'Calyrex-Shadow', 'Ceruledge', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin', 'Dragapult', 'Dragonite',
'Enamorus-Incarnate', 'Eternatus', 'Flutter Mane', 'Garchomp', 'Giratina', 'Giratina-Origin', 'Gouging Fire', 'Groudon', 'Hoopa-Unbound', 'Ho-Oh', 'Iron Bundle', 'Iron Moth', 'Iron Valiant',
@@ -676,7 +676,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
'Slaking', 'Sneasler', 'Solgaleo', 'Spectrier', 'Thundurus', 'Thundurus-Therian', 'Ursaluna', 'Ursaluna-Bloodmoon', 'Urshifu-Single-Strike', 'Urshifu-Rapid-Strike', 'Volcarona', 'Walking Wake',
'Weavile', 'Zacian', 'Zacian-Crowned', 'Zekrom', 'Zoroark-Hisui', 'Arena Trap', 'Comatose', 'Contrary', 'Fur Coat', 'Good as Gold', 'Gorilla Tactics', 'Hadron Engine', 'Huge Power', 'Ice Scales',
'Illusion', 'Imposter', 'Innards Out', 'Magic Bounce', 'Magnet Pull', 'Moody', 'Neutralizing Gas', 'Orichalcum Pulse', 'Parental Bond', 'Poison Heal', 'Pure Power', 'Shadow Tag', 'Simple',
- 'Speed Boost', 'Stakeout', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects', 'Shed Tail',
+ 'Speed Boost', 'Stakeout', 'Stench', 'Tangled Feet', 'Tinted Lens', 'Toxic Debris', 'Triage', 'Unburden', 'Water Bubble', 'Wonder Guard', 'King\'s Rock', 'Razor Fang', 'Baton Pass', 'Last Respects',
+ 'Shed Tail',
],
restricted: [
'Acupressure', 'Astral Barrage', 'Belly Drum', 'Boomburst', 'Ceaseless Edge', 'Clangorous Soul', 'Dire Claw', 'Dragon Energy', 'Electro Shot', 'Eruption', 'Esper Wing', 'Extreme Speed',
From 68df315d2791d9bc6460455e7579b9b24776dd6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 5 Apr 2026 10:43:15 +0100
Subject: [PATCH 203/233] Fix Gen 1 multi-turn move interactions with Haze,
Metronome and Mirror Move (#11859)
---
data/mods/gen1/conditions.ts | 24 +++++--
data/mods/gen1/moves.ts | 19 +++---
data/mods/gen1/scripts.ts | 47 +++++++++-----
data/mods/gen1stadium/scripts.ts | 3 +-
data/mods/gen2/moves.ts | 2 +
data/mods/gen2/scripts.ts | 3 +-
data/mods/gen4/scripts.ts | 9 +++
data/mods/gen9dlc1/scripts.ts | 2 +-
sim/battle-actions.ts | 2 +-
sim/dex-conditions.ts | 2 +
sim/pokemon.ts | 45 ++++++++-----
sim/side.ts | 31 ++++-----
test/sim/abilities/truant.js | 3 +-
test/sim/misc/trapmoves.js | 107 ++++++++++++++++++++++++++++++-
test/sim/misc/twoturnmoves.js | 40 +++++++++++-
test/sim/moves/bide.js | 5 --
test/sim/moves/encore.js | 36 +++++------
test/sim/moves/hyperbeam.js | 81 +++++++++++++++++++++++
test/sim/moves/pursuit.js | 6 +-
test/sim/moves/thousandarrows.js | 3 +-
test/sim/moves/transform.js | 5 +-
21 files changed, 370 insertions(+), 105 deletions(-)
diff --git a/data/mods/gen1/conditions.ts b/data/mods/gen1/conditions.ts
index 7947c9d867..ea7d52cfe5 100644
--- a/data/mods/gen1/conditions.ts
+++ b/data/mods/gen1/conditions.ts
@@ -80,6 +80,9 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
onAfterMoveSelf(pokemon) {
if (pokemon.statusState.time <= 0) pokemon.cureStatus();
},
+ onDisableMove(target) {
+ target.maybeLocked = false; // the player knows it is locked
+ },
},
frz: {
name: 'frz',
@@ -98,6 +101,9 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
target.cureStatus();
}
},
+ onDisableMove(target) {
+ target.maybeLocked = false; // the player knows it is locked
+ },
},
psn: {
name: 'psn',
@@ -202,8 +208,11 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
onAccuracy(accuracy, target, source, move) {
if (source === this.effectState.source) return true;
},
+ onDisableMovePriority: 1, // higher priority so it gets undone by frz, slp or Bide
onDisableMove(target) {
- target.maybeLocked = true;
+ if (this.effectState.maybeLocked) {
+ target.maybeLocked = true;
+ }
},
},
fakepartiallytrapped: {
@@ -211,6 +220,7 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
// Wrap ended this turn, but you don't know that
// until you try to use an attack
duration: 2,
+ onDisableMovePriority: 1, // higher priority so it gets undone by frz, slp or Bide
onDisableMove(target) {
target.maybeLocked = true;
},
@@ -230,9 +240,6 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
this.effectState.locked = foe;
foe.addVolatile('partiallytrapped', target, effect);
},
- onOverrideAction(pokemon, target, move) {
- return this.effectState.move;
- },
onBeforeMove(pokemon, target, move) {
if (target !== this.effectState.locked) {
pokemon.removeVolatile('partialtrappinglock');
@@ -252,13 +259,18 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
}
} else {
target.addVolatile('partiallytrapped', pokemon, move);
+ if (this.effectState.totalDuration - this.effectState.duration! > 0) {
+ target.volatiles['partiallytrapped'].maybeLocked = true;
+ }
}
},
- onLockMove() {
+ onSemiLockMove() {
return this.effectState.move;
},
onDisableMove(pokemon) {
- pokemon.maybeLocked = true;
+ if (this.effectState.totalDuration - this.effectState.duration! > 1) {
+ pokemon.maybeLocked = true;
+ }
},
},
mustrecharge: {
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index cc49b919aa..9af6c2310c 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -32,7 +32,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
bide: {
inherit: true,
- priority: 0,
accuracy: true,
condition: {
onStart(pokemon) {
@@ -60,15 +59,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
this.add('-activate', pokemon, 'Bide');
return false;
},
- onDisableMove(pokemon) {
- if (!pokemon.hasMove('bide')) {
- return;
- }
- for (const moveSlot of pokemon.moveSlots) {
- if (moveSlot.id !== 'bide') {
- pokemon.disableMove(moveSlot.id);
- }
- }
+ onSemiLockMove: 'bide',
+ onDisableMove(target) {
+ target.maybeLocked = false; // the player knows it is locked
},
},
type: "???", // Will look as Normal but it's STAB-less
@@ -334,6 +327,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
for (const pokemon of this.getAllActive()) {
pokemon.clearBoosts();
if (pokemon !== source) {
+ if (['frz', 'slp'].includes(pokemon.status)) {
+ pokemon.side.lastSelectedMove = 'cannotmove' as ID;
+ if (this.queue.willMove(pokemon)) {
+ this.queue.changeAction(pokemon, { choice: 'move', pokemon, moveid: 'cannotmove' });
+ }
+ }
pokemon.cureStatus(true);
}
if (pokemon.status === 'tox') {
diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts
index 941e2f2e1b..31f600571c 100644
--- a/data/mods/gen1/scripts.ts
+++ b/data/mods/gen1/scripts.ts
@@ -157,31 +157,47 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
- // If a faster partial trapping move misses against a user of Hyper Beam during a recharge turn,
- // the user of Hyper Beam will automatically use Hyper Beam during that turn.
- if (move.id === 'recharge' && !pokemon.volatiles['mustrecharge'] && !pokemon.volatiles['partiallytrapped']) {
- move = this.battle.dex.getActiveMove('hyperbeam');
- this.battle.hint(`In Gen 1, partial trapping moves like Wrap remove Hyper Beam recharges. ` +
- `If the target would have recharged, it will automatically use Hyper Beam instead.`, true);
+ const abortMove = () => {
+ this.battle.clearActiveMove(true);
+ this.battle.runEvent('AfterMoveSelf', pokemon, target, move);
+ };
+
+ if (move.id === 'cannotmove') {
+ if (pokemon.status === 'slp') {
+ this.battle.hint(
+ "In Gen 1, if a Pokémon spends a turn partially trapped and switches to a Pokémon that is asleep, " +
+ "the sleep counter will not decrease until you select a move with a different Pokémon."
+ );
+ } else if (pokemon.getLockedMove()) {
+ this.battle.hint(
+ "In Gen 1, when Haze cures the sleep/freeze status of a Pokémon during a multi-turn move, " +
+ "that Pokémon will become soft-locked."
+ );
+ } else if (pokemon.getSemiLockedMove()) {
+ this.battle.hint(
+ "In Gen 1, when Haze cures the sleep/freeze status of a Pokémon during Bide, " +
+ "the move execution will never resolve."
+ );
+ }
+ abortMove();
+ return;
}
if (target?.subFainted) target.subFainted = null;
this.battle.setActiveMove(move, pokemon, target);
- if (pokemon.moveThisTurn || move.id === 'cantmove' || !this.battle.runEvent('BeforeMove', pokemon, target, move)) {
- this.battle.clearActiveMove(true);
- // This is only run for sleep.
- this.battle.runEvent('AfterMoveSelf', pokemon, target, move);
+ if (pokemon.moveThisTurn || !this.battle.runEvent('BeforeMove', pokemon, target, move)) {
+ abortMove();
return;
}
if (move.beforeMoveCallback?.call(this.battle, pokemon, target, move)) {
- this.battle.clearActiveMove(true);
+ abortMove();
return;
}
if (move.id !== 'struggle') {
- const lockedMove = pokemon.getLockedMove();
+ const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove();
if (lockedMove) sourceEffect = move;
// Locked moves don't deduct PP
@@ -191,13 +207,12 @@ export const Scripts: ModdedBattleScriptsData = {
if (moveSlot) pokemon.deductPP(moveSlot.id, null, target);
}
- if (move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) {
+ if (!lockedMove && move.id !== pokemon.getMoveSlot(pokemon.side.lastSelectedMoveSlot)?.id) {
this.battle.hint("Desync Clause Mod activated!");
this.battle.hint(
- "In Gen 1, a Pokémon that thaws out might try to use a move that doesn't match the move " +
- "of the slot it last selected (switches reset to the first slot).",
+ "In Gen 1, a Pokémon might default to using a move that doesn't match the move of the slot it last selected.",
);
- this.battle.clearActiveMove(true);
+ abortMove();
return;
}
}
diff --git a/data/mods/gen1stadium/scripts.ts b/data/mods/gen1stadium/scripts.ts
index 04071bb678..0cfbbc072e 100644
--- a/data/mods/gen1stadium/scripts.ts
+++ b/data/mods/gen1stadium/scripts.ts
@@ -93,8 +93,7 @@ export const Scripts: ModdedBattleScriptsData = {
return;
}
}
- let lockedMove = this.battle.runEvent('LockMove', pokemon);
- if (lockedMove === true) lockedMove = false;
+ const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove();
if (
!lockedMove &&
(!pokemon.volatiles['partialtrappinglock'] || pokemon.volatiles['partialtrappinglock'].locked !== target)
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index 92b3575d2b..62761c6e7a 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -55,6 +55,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
durationCallback(target, source, effect) {
return this.random(3, 5);
},
+ onLockMove: undefined, // no inherit
+ onSemiLockMove: 'bide',
},
},
counter: {
diff --git a/data/mods/gen2/scripts.ts b/data/mods/gen2/scripts.ts
index d564f84d97..13dd8a1675 100644
--- a/data/mods/gen2/scripts.ts
+++ b/data/mods/gen2/scripts.ts
@@ -125,8 +125,7 @@ export const Scripts: ModdedBattleScriptsData = {
}
}
pokemon.lastDamage = 0;
- let lockedMove = this.battle.runEvent('LockMove', pokemon);
- if (lockedMove === true) lockedMove = false;
+ const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove();
if (!lockedMove) {
if (!pokemon.deductPP(move, null, target) && (move.id !== 'struggle')) {
this.battle.add('cant', pokemon, 'nopp', move);
diff --git a/data/mods/gen4/scripts.ts b/data/mods/gen4/scripts.ts
index 0a829776cc..f645b3a763 100644
--- a/data/mods/gen4/scripts.ts
+++ b/data/mods/gen4/scripts.ts
@@ -13,6 +13,15 @@ export const Scripts: ModdedBattleScriptsData = {
// pokemon.lastMove is reset for all Pokemon on the field after a switch. This affects Mirror Move.
for (const poke of this.battle.getAllActive()) poke.lastMove = null;
if (this.battle.gen === 1) pokemon.side.lastSelectedMoveSlot = 0;
+ for (const poke of pokemon.foes()) {
+ if (poke.volatiles['partialtrappinglock'] && poke.moveSlots[poke.side.lastSelectedMoveSlot].id === 'metronome') {
+ // this is not done for Mirror Move, potentially resulting in a desync
+ poke.side.lastSelectedMove = 'metronome' as ID;
+ if (this.battle.queue.willMove(poke)) {
+ this.battle.queue.changeAction(poke, { choice: 'move', poke, moveid: 'metronome' });
+ }
+ }
+ }
if (!pokemon.side.faintedThisTurn && pokemon.draggedIn !== this.battle.turn) {
this.battle.runEvent('AfterSwitchInSelf', pokemon);
}
diff --git a/data/mods/gen9dlc1/scripts.ts b/data/mods/gen9dlc1/scripts.ts
index 7c97daa056..1dba6b2f28 100644
--- a/data/mods/gen9dlc1/scripts.ts
+++ b/data/mods/gen9dlc1/scripts.ts
@@ -11,7 +11,7 @@ export const Scripts: ModdedBattleScriptsData = {
}
if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water'].includes(pokemon.teraType) &&
(!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) {
- this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks.");
+ this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game crashes.", false, pokemon.side);
return;
}
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index df27f93742..06b67647a7 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1925,7 +1925,7 @@ export class BattleActions {
terastallize(pokemon: Pokemon) {
if (pokemon.species.baseSpecies === 'Ogerpon' && !['Fire', 'Grass', 'Rock', 'Water'].includes(pokemon.teraType) &&
(!pokemon.illusion || pokemon.illusion.species.baseSpecies === 'Ogerpon')) {
- this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game softlocks.", false, pokemon.side);
+ this.battle.hint("If Ogerpon Terastallizes into a type other than Fire, Grass, Rock, or Water, the game crashes.", false, pokemon.side);
return;
}
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index f900795ad6..8fc6ca8c6f 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -57,6 +57,7 @@ export interface EventMethods {
onHit?: MoveEventMethods['onHit'];
onImmunity?: (this: Battle, type: string, pokemon: Pokemon) => void;
onLockMove?: string | ((this: Battle, pokemon: Pokemon) => void | string);
+ onSemiLockMove?: string | ((this: Battle, pokemon: Pokemon) => void | string);
onMaybeTrapPokemon?: (this: Battle, pokemon: Pokemon) => void;
onModifyAccuracy?: CommonHandlers['ModifierMove'];
onModifyAtk?: CommonHandlers['ModifierSourceMove'];
@@ -449,6 +450,7 @@ export interface EventMethods {
onChangeBoostPriority?: number;
onDamagePriority?: number;
onDragOutPriority?: number;
+ onDisableMovePriority?: number;
onEffectivenessPriority?: number;
onFoeBasePowerPriority?: number;
onFoeBeforeMovePriority?: number;
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 41ab145863..d30ec7fb3b 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -942,14 +942,23 @@ export class Pokemon {
* Don't use it for "soft locks" like Choice Band.
*/
getLockedMove(): ID | null {
- const lockedMove = this.battle.runEvent('LockMove', this);
+ const lockedMove = this.battle.priorityEvent('LockMove', this);
+ return (lockedMove === true) ? null : lockedMove;
+ }
+
+ /**
+ * Moves that lock you when you select the Fight button, but don't prevent you from switching out.
+ * Those are Gen 1 trapping moves, Gen 1 and 2 Bide, and Gen 2-4 Encore. Gen 1 freeze and sleep also semi-lock you.
+ */
+ getSemiLockedMove(restrictData?: boolean): ID | null {
+ if (restrictData && this.maybeLocked) return null;
+ const lockedMove = this.battle.priorityEvent('SemiLockMove', this);
return (lockedMove === true) ? null : lockedMove;
}
getMoves(lockedMove?: ID | null, restrictData?: boolean): MoveRequestData[] {
if (lockedMove) {
lockedMove = toID(lockedMove);
- this.trapped = true;
if (lockedMove === 'recharge') {
return [{
move: 'Recharge',
@@ -1067,7 +1076,13 @@ export class Pokemon {
}
getMoveRequestData() {
- let lockedMove = this.maybeLocked ? null : this.getLockedMove();
+ let lockedMove = this.getLockedMove();
+ const hardLocked = !!lockedMove;
+ if (lockedMove) {
+ this.trapped = true;
+ } else {
+ lockedMove = this.maybeLocked ? null : this.getSemiLockedMove(true);
+ }
// Information should be restricted for the last active Pokémon
const isLastActive = this.isLastActive();
@@ -1076,9 +1091,8 @@ export class Pokemon {
// actions that don't hard lock out of switching, but can't bypass the Fight button
// partially trapped causes maybeLocked, so it shouldn't be revealed
- if (this.battle.gen === 1 && ['frz', 'slp'].includes(this.status)) {
- this.maybeDisabled = false;
- this.maybeLocked = false;
+ if (this.battle.gen === 1 && !lockedMove && (['frz', 'slp'].includes(this.status) ||
+ (this.volatiles['partiallytrapped'] && !this.maybeLocked))) {
moves = [{ move: 'Fight', id: 'fight' as ID }];
lockedMove = 'fight' as ID;
} else if (!moves.length) {
@@ -1090,8 +1104,15 @@ export class Pokemon {
moves,
};
- if (isLastActive) {
- this.maybeDisabled = this.maybeDisabled && !lockedMove;
+ if (hardLocked || !isLastActive) {
+ this.maybeDisabled = false;
+ this.maybeLocked = false;
+ this.maybeTrapped = false;
+ if (hardLocked || canSwitchIn) {
+ // Discovered by selecting a valid Pokémon as a switch target and cancelling.
+ if (this.trapped) data.trapped = true;
+ }
+ } else {
this.maybeLocked = this.maybeLocked || this.maybeDisabled;
if (this.maybeDisabled) {
data.maybeDisabled = this.maybeDisabled;
@@ -1106,14 +1127,6 @@ export class Pokemon {
data.maybeTrapped = true;
}
}
- } else {
- this.maybeDisabled = false;
- this.maybeLocked = false;
- if (canSwitchIn) {
- // Discovered by selecting a valid Pokémon as a switch target and cancelling.
- if (this.trapped) data.trapped = true;
- }
- this.maybeTrapped = false;
}
if (!lockedMove) {
diff --git a/sim/side.ts b/sim/side.ts
index 37cc3e3c66..7227c6180d 100644
--- a/sim/side.ts
+++ b/sim/side.ts
@@ -209,7 +209,7 @@ export class Side {
* lastSelectedMove never resets
* lastSelectedMoveSlot resets on every switch
*/
- lastSelectedMove: ID = '';
+ lastSelectedMove: ID = '00' as ID;
lastSelectedMoveSlot = 0;
constructor(name: string, battle: Battle, sideNum: number, team: PokemonSet[]) {
@@ -655,7 +655,7 @@ export class Side {
}
}
- const lockedMove = pokemon.getLockedMove();
+ const lockedMove = pokemon.getLockedMove() || pokemon.getSemiLockedMove();
if (lockedMove) {
let lockedMoveTargetLoc = pokemon.lastMoveTargetLoc || 0;
const lockedMoveID = toID(lockedMove);
@@ -676,7 +676,7 @@ export class Side {
this.choice.actions.push({
choice: 'move',
pokemon,
- // don't send a move, handled side.commitChoices
+ moveid: 'fight',
});
return true;
} else if (!moves.length) {
@@ -1116,22 +1116,14 @@ export class Side {
for (const choice of this.choice.actions) {
if (choice.choice !== 'move' || !choice.pokemon) continue;
const move = choice.moveid;
- if (!move) {
+ if (move === 'fight') {
const pokemon = choice.pokemon;
if (['frz', 'slp'].includes(pokemon.status)) {
// do nothing
} else if (pokemon.volatiles['partiallytrapped']) {
- // 'cantmove' is what is set in the cartridge
- this.lastSelectedMove = 'cantmove' as ID;
+ // 'cannotmove' is what is set in the cartridge
+ this.lastSelectedMove = 'cannotmove' as ID;
}
- /**
- * if partially trapped: put 'cantmove' in lastSelectedMove
- * if frozen or asleep: try to reuse the last move,
- * which can fail if the Pokemon thaws and the move doesn't match lastSelectedMoveSlot
- *
- * if this happens in the first move selection of a player, put '00' as a placeholder to avoid errors
- */
- choice.moveid = this.lastSelectedMove || '00' as ID;
} else if (move === 'struggle') {
// saves Struggle
this.lastSelectedMove = move as ID;
@@ -1140,7 +1132,12 @@ export class Side {
this.lastSelectedMove = move as ID;
this.lastSelectedMoveSlot = choice.moveSlot;
}
- // locked moves (including mustrecharge) dont set lastSelectedMove
+ /**
+ * choice.moveid should be synced with lastSelectedMove
+ * if a Pokémon is frozen or asleep, this ensures it tries to use the last move used
+ * if a Pokémon is recharging, this ensures it tries to use Hyper Beam again
+ */
+ choice.moveid = this.lastSelectedMove;
}
}
this.battle.queue.addChoice(this.choice.actions);
@@ -1237,7 +1234,7 @@ export class Side {
if (!this.chooseMove(data, targetLoc, event)) return false;
break;
case 'switch':
- this.chooseSwitch(data);
+ if (!this.chooseSwitch(data)) return false;
break;
case 'shift':
if (data) return this.emitChoiceError(`Unrecognized data after "shift": ${data}`);
@@ -1253,7 +1250,7 @@ export class Side {
break;
case 'auto':
case 'default':
- this.autoChoose();
+ if (!this.autoChoose()) return false;
break;
default:
this.emitChoiceError(`Unrecognized choice: ${choiceString}`);
diff --git a/test/sim/abilities/truant.js b/test/sim/abilities/truant.js
index cd0340480a..272bf059c0 100644
--- a/test/sim/abilities/truant.js
+++ b/test/sim/abilities/truant.js
@@ -54,7 +54,8 @@ describe('Truant', () => {
battle.makeChoices('move irondefense', 'move endure');
battle.makeChoices('move irondefense', 'move spore');
- while (user.status === 'slp') {
+ for (let i = 0; i < 5; i++) {
+ if (user.status !== 'slp') break;
assert.fullHP(pokemon);
battle.makeChoices('move scratch', 'move endure');
}
diff --git a/test/sim/misc/trapmoves.js b/test/sim/misc/trapmoves.js
index fcdb9c2176..e42f11a375 100644
--- a/test/sim/misc/trapmoves.js
+++ b/test/sim/misc/trapmoves.js
@@ -239,8 +239,13 @@ describe('Partial Trapping Moves [Gen 1]', () => {
it('Wrap ends when wrapper switches to a Pokemon that dies of residual damage', () => {
battle = common.gen(1).createBattle();
- battle.setPlayer('p1', { team: [{ species: "Rhydon", moves: ['splash'], evs: { hp: 255 } }, { species: "Dragonite", moves: ['wrap'] }] });
- battle.setPlayer('p2', { team: [{ species: "Slowbro", moves: ['seismictoss', 'toxic'] }] });
+ battle.setPlayer('p1', { team: [
+ { species: "Rhydon", moves: ['splash'], evs: { hp: 255 } },
+ { species: "Dragonite", moves: ['wrap'] },
+ ] });
+ battle.setPlayer('p2', { team: [
+ { species: "Slowbro", moves: ['seismictoss', 'toxic'] },
+ ] });
for (let i = 0; i < 4; i++) {
battle.makeChoices();
}
@@ -282,4 +287,102 @@ describe('Partial Trapping Moves [Gen 1]', () => {
assert.hurts(cloyster, () => battle.makeChoices());
assert(cloyster.volatiles['partiallytrapped']);
});
+
+ it(`should stay asleep if it switched in after a Pokemon spent a turn trapped`, () => {
+ battle = common.gen(1).createBattle({ seed: [0, 0, 0, 3] }, [[
+ { species: 'dragonite', moves: ['wrap', 'spore', 'splash'] },
+ ], [
+ { species: 'rhydon', moves: ['swordsdance'] },
+ { species: 'exeggutor', moves: ['splash'] },
+ ]]);
+ const rhydon = battle.p2.active[0];
+
+ battle.makeChoices('move spore', 'move swordsdance');
+ battle.makeChoices('move wrap', 'switch 2');
+ battle.makeChoices('move wrap', 'move fight'); // Exeggutor needs to spend a turn trapped to select a move
+ battle.makeChoices('move wrap', 'switch 2');
+ assert.equal(battle.p1.active[0].volatiles['partialtrappinglock'].duration, 1); // this is just a rng check
+ battle.makeChoices('move wrap', 'move fight');
+ assert(!battle.p1.active[0].volatiles['partialtrappinglock']);
+ for (let i = 0; i < 20; i++) {
+ battle.makeChoices('move splash', 'move fight');
+ }
+ assert.equal(rhydon.boosts.atk, 0); // it never woke up
+ battle.makeChoices('move splash', 'switch 2');
+ battle.makeChoices('move splash', 'move splash'); // using a move frees Rhydon from being locked
+ battle.makeChoices('move splash', 'switch 2');
+ for (let i = 0; i < 5; i++) {
+ battle.makeChoices('move splash', 'move fight');
+ if (rhydon.status !== 'slp') break;
+ }
+ battle.makeChoices('move splash', 'move swordsdance'); // it was able to wake up after the switch
+ assert.equal(rhydon.boosts.atk, 2);
+ });
+
+ it(`should continue if copied by Mirror Move`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: 'dragonite', moves: ['wrap'] },
+ ], [
+ { species: 'rhydon', moves: ['splash'] },
+ { species: 'alakazam', moves: ['mirrormove'] },
+ ]]);
+ battle.makeChoices('move wrap', 'switch 2');
+ for (let i = 0; i < 5; i++) {
+ // wait for the trap to end
+ if (!battle.p2.active[0].volatiles['partiallytrapped']) break;
+ battle.makeChoices();
+ }
+ battle.makeChoices(); // trap back with Mirror Move
+ for (let i = 0; i < 5; i++) {
+ if (!battle.p1.active[0].volatiles['partiallytrapped']) break;
+ battle.makeChoices();
+ }
+ assert.false(battle.log.some(line => line.includes('Desync Clause Mod activated!')));
+ // check if that target is freed and the trapper can choose other moves
+ assert(!battle.p1.active[0].volatiles['partiallytrapped']);
+ assert.equal(battle.p2.activeRequest.active[0].moves.length, 1);
+ assert.equal(battle.p2.activeRequest.active[0].moves[0].id, 'mirrormove');
+ });
+
+ it(`should cause a Desync if copied by Mirror Move and the target switches`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: 'dragonite', moves: ['wrap'] },
+ { species: 'magikarp', moves: ['splash'] },
+ ], [
+ { species: 'rhydon', moves: ['splash'] },
+ { species: 'alakazam', moves: ['mirror move'] },
+ ]]);
+ battle.makeChoices('move wrap', 'switch 2');
+ for (let i = 0; i < 5; i++) {
+ // wait for the trap to end
+ if (!battle.p2.active[0].volatiles['partiallytrapped']) break;
+ battle.makeChoices();
+ }
+ battle.makeChoices(); // trap back with Mirror Move
+ battle.makeChoices('switch 2', 'move wrap');
+ assert(battle.log.slice(-10).some(line => line.includes('Desync Clause Mod activated!')));
+ // check if that target is freed and the trapper can choose other moves
+ assert(!battle.p1.active[0].volatiles['partiallytrapped']);
+ assert.equal(battle.p2.activeRequest.active[0].moves.length, 1);
+ assert.equal(battle.p2.activeRequest.active[0].moves[0].id, 'mirrormove');
+ });
+
+ it(`should continue if copied by Metronome even if the target switches`, () => {
+ battle = common.gen(1).createBattle({ seed: 'gen5,99176924e1c86af0' }, [[
+ { species: 'dragonite', moves: ['splash'] },
+ { species: 'magikarp', moves: ['splash'] },
+ ], [
+ { species: 'alakazam', moves: ['metronome'] },
+ ]]);
+ battle.makeChoices(); // trap with Metronome
+ assert(battle.log.slice(-10).some(line => line === '|move|p2a: Alakazam|Wrap|p1a: Dragonite|[from] Metronome'));
+ battle.makeChoices('switch 2', 'move wrap');
+ assert.false(battle.log.some(line => line.includes('Desync Clause Mod activated!')));
+ // default to Metronome
+ assert(battle.log.slice(-10).some(line => line.includes('|move|p2a: Alakazam|Metronome|')));
+ // check if that target is freed and the trapper can choose other moves
+ assert(!battle.p1.active[0].volatiles['partiallytrapped']);
+ assert.equal(battle.p2.activeRequest.active[0].moves.length, 1);
+ assert.equal(battle.p2.activeRequest.active[0].moves[0].id, 'metronome');
+ });
});
diff --git a/test/sim/misc/twoturnmoves.js b/test/sim/misc/twoturnmoves.js
index e12ec361fb..5c1aed4512 100644
--- a/test/sim/misc/twoturnmoves.js
+++ b/test/sim/misc/twoturnmoves.js
@@ -56,7 +56,7 @@ describe('Two Turn Moves [Gen 1]', () => {
assert(!aerodactyl.volatiles['twoturnmove']);
});
- it(`[Gen 1] if called by Metronome or Mirror Move, the calling move uses PP in the attacking turn`, () => {
+ it(`if called by Metronome or Mirror Move, the calling move uses PP in the attacking turn`, () => {
battle = common.gen(1).createBattle({ seed: [0, 1, 0, 1] });
battle.setPlayer('p1', { team: [{ species: 'blastoise', moves: ['metronome', 'skullbash'] }] });
battle.setPlayer('p2', { team: [{ species: 'golem', moves: ['defensecurl'] }] });
@@ -101,4 +101,42 @@ describe('Two Turn Moves [Gen 1]', () => {
assert.false.fullHP(pidgeot);
assert(pidgeot.volatiles['invulnerability']);
});
+
+ it(`should be soft-locked if it was woken up by Haze during the charging turn`, () => {
+ battle = common.gen(1).createBattle([[
+ { species: "Golem", moves: ['solarbeam', 'splash'] },
+ { species: "Magikarp", moves: ['splash'] },
+ ], [
+ { species: "Mewtwo", moves: ['splash', 'spore', 'haze', 'swordsdance'] },
+ ]]);
+ battle.makeChoices();
+ battle.makeChoices('move solarbeam', 'move spore');
+ battle.makeChoices('move solarbeam', 'move haze');
+ // Golem is locked into Solar Beam, but the move will never execute
+ for (let i = 0; i < 3; i++) {
+ assert.throws(() => battle.choose('p1', 'switch 2'));
+ assert(battle.p1.active[0].volatiles['twoturnmove']);
+ const request = battle.p1.activeRequest;
+ assert.equal(request.active[0].moves.length, 1);
+ assert.equal(request.active[0].moves[0].id, 'solarbeam');
+ battle.makeChoices('move solarbeam', 'move swordsdance');
+ }
+ assert.fullHP(battle.p2.active[0]);
+ assert.equal(battle.p2.active[0].boosts.atk, 6);
+ });
+
+ it(`should be delayed by trapping moves`, () => {
+ battle = common.gen(1).createBattle({ seed: [0, 0, 0, 1] }, [[
+ { species: 'Aerodactyl', moves: ['solarbeam'] },
+ ], [
+ { species: 'Gyarados', moves: ['wrap', 'splash'] },
+ ]]);
+ const aerodactyl = battle.p1.active[0];
+ battle.makeChoices();
+ assert.equal(aerodactyl.volatiles['partiallytrapped'].duration, 1);
+ battle.makeChoices();
+ assert(!aerodactyl.volatiles['partiallytrapped']);
+ battle.makeChoices('move solarbeam', 'move splash');
+ assert.false.fullHP(battle.p2.active[0]);
+ });
});
diff --git a/test/sim/moves/bide.js b/test/sim/moves/bide.js
index 3d6134e63d..d379c1163e 100644
--- a/test/sim/moves/bide.js
+++ b/test/sim/moves/bide.js
@@ -24,8 +24,6 @@ describe('[Gen 1] Bide', () => {
const choices = aerodactyl.getMoveRequestData().moves;
assert.equal(choices[0].id, 'bide');
assert.false(choices[0].disabled);
- assert.equal(choices[1].id, 'whirlwind');
- assert(choices[1].disabled);
battle.makeChoices();
battle.makeChoices();
assert.false(aerodactyl.volatiles['bide']);
@@ -139,9 +137,6 @@ describe('[Gen 1] Bide', () => {
battle.makeChoices();
assert.equal(aerodactyl.volatiles['bide'].time, 3);
assert.equal(aerodactyl.volatiles['disable'].slotIndex, 0);
- // Struggle is the choice
- const choices = aerodactyl.getMoveRequestData().moves;
- assert.equal(choices[0].id, 'struggle');
assert(aerodactyl.volatiles['disable'].time > 1);
battle.makeChoices();
assert.equal(aerodactyl.volatiles['bide'].time, 3);
diff --git a/test/sim/moves/encore.js b/test/sim/moves/encore.js
index 522b9929cb..c5a5d3c09b 100644
--- a/test/sim/moves/encore.js
+++ b/test/sim/moves/encore.js
@@ -183,26 +183,22 @@ describe('Encore', () => {
battle.makeChoices('move counter, move sleeptalk', 'move encore 1, move aerialace 1');
assert(battle.log.every(line => !line.includes('Raichu|Destiny Bond')));
});
-});
-describe('Encore [Gen 2]', () => {
- afterEach(() => {
- battle.destroy();
- });
-
- it(`[Gen 2] Encore succeeds when used against an opponent that last attacked before the Encore user switched in`, () => {
- battle = common.gen(2).createBattle({ forceRandomChance: true }, [[
- { species: 'slowbro', moves: ['glare'] },
- { species: 'fearow', moves: ['encore'] },
- ], [
- { species: 'chansey', moves: ['seismictoss'] },
- ]]);
- const chansey = battle.p2.active[0];
- battle.makeChoices();
- battle.makeChoices('switch 2', 'auto');
- // Chansey is fully paralysed
- assert.fullHP(battle.p1.active[0]);
- battle.makeChoices();
- assert.equal(chansey.volatiles['encore'].move, 'seismictoss');
+ describe('[Gen 2]', () => {
+ it(`Encore succeeds when used against an opponent that last attacked before the Encore user switched in`, () => {
+ battle = common.gen(2).createBattle({ forceRandomChance: true }, [[
+ { species: 'slowbro', moves: ['glare'] },
+ { species: 'fearow', moves: ['encore'] },
+ ], [
+ { species: 'chansey', moves: ['seismictoss'] },
+ ]]);
+ const chansey = battle.p2.active[0];
+ battle.makeChoices();
+ battle.makeChoices('switch 2', 'auto');
+ // Chansey is fully paralysed
+ assert.fullHP(battle.p1.active[0]);
+ battle.makeChoices();
+ assert.equal(chansey.volatiles['encore'].move, 'seismictoss');
+ });
});
});
diff --git a/test/sim/moves/hyperbeam.js b/test/sim/moves/hyperbeam.js
index 3b1227b269..ea66a6ebfc 100644
--- a/test/sim/moves/hyperbeam.js
+++ b/test/sim/moves/hyperbeam.js
@@ -117,4 +117,85 @@ describe(`Hyper Beam [Gen 1]`, () => {
assert.false(battle.p2.active[0].volatiles['partiallytrapped']);
assert(battle.p2.active[0].volatiles['mustrecharge']);
});
+
+ it(`should be soft-locked if it was frozen during the recharge turn`, () => {
+ battle = common.gen(1).createBattle({ forceRandomChance: true }, [[
+ { species: 'cloyster', moves: ['icebeam', 'splash'] },
+ ], [
+ { species: 'alakazam', moves: ['hyperbeam'] },
+ { species: 'magikarp', moves: ['splash'] },
+ ]]);
+ battle.makeChoices();
+ const hp = battle.p1.active[0].hp;
+ for (let i = 0; i < 5; i++) {
+ assert.throws(() => battle.choose('p2', 'switch 2'));
+ assert(battle.p2.active[0].volatiles['mustrecharge']);
+ const request = battle.p2.activeRequest;
+ assert.equal(request.active[0].moves.length, 1);
+ assert.equal(request.active[0].moves[0].id, 'recharge');
+ battle.makeChoices('move splash', 'move recharge');
+ }
+ assert.equal(battle.p1.active[0].hp, hp);
+ });
+
+ it(`should be freed from soft-locked if thawed by a fire move during the recharge turn`, () => {
+ battle = common.gen(1).createBattle({ forceRandomChance: true }, [[
+ { species: 'cloyster', moves: ['icebeam', 'splash', 'firepunch'] },
+ ], [
+ { species: 'alakazam', moves: ['hyperbeam'] },
+ { species: 'magikarp', moves: ['splash'] },
+ ]]);
+ battle.makeChoices();
+ const hp = battle.p1.active[0].hp;
+ for (let i = 0; i < 5; i++) {
+ assert.throws(() => battle.choose('p2', 'switch 2'));
+ assert(battle.p2.active[0].volatiles['mustrecharge']);
+ const request = battle.p2.activeRequest;
+ assert.equal(request.active[0].moves.length, 1);
+ assert.equal(request.active[0].moves[0].id, 'recharge');
+ battle.makeChoices('move splash', 'move recharge');
+ }
+ assert.equal(battle.p1.active[0].hp, hp);
+
+ battle.makeChoices('move firepunch', 'move recharge');
+ assert.equal(battle.p2.active[0].status, '');
+ battle.makeChoices('move splash', 'move recharge');
+ assert(!battle.p2.active[0].volatiles['mustrecharge']);
+ battle.makeChoices('move splash', 'move hyperbeam');
+ assert(battle.p1.active[0].hp < hp);
+ });
+
+ it(`should not be freed from soft-locked if unfrozen by Haze during the recharge turn`, () => {
+ battle = common.gen(1).createBattle({ forceRandomChance: true }, [[
+ { species: 'cloyster', moves: ['icebeam', 'splash', 'haze'] },
+ ], [
+ { species: 'alakazam', moves: ['hyperbeam'] },
+ { species: 'magikarp', moves: ['splash'] },
+ ]]);
+ battle.makeChoices();
+ const hp = battle.p1.active[0].hp;
+ for (let i = 0; i < 5; i++) {
+ assert.throws(() => battle.choose('p2', 'switch 2'));
+ assert(battle.p2.active[0].volatiles['mustrecharge']);
+ const request = battle.p2.activeRequest;
+ assert.equal(request.active[0].moves.length, 1);
+ assert.equal(request.active[0].moves[0].id, 'recharge');
+ battle.makeChoices('move splash', 'move recharge');
+ }
+ assert.equal(battle.p1.active[0].hp, hp);
+
+ battle.makeChoices('move haze', 'move recharge');
+ assert.equal(battle.p2.active[0].status, '');
+
+ for (let i = 0; i < 5; i++) {
+ assert.throws(() => battle.choose('p2', 'switch 2'));
+ assert(battle.p2.active[0].volatiles['mustrecharge']);
+ const request = battle.p2.activeRequest;
+ assert.equal(request.active[0].moves.length, 1);
+ assert.equal(request.active[0].moves[0].id, 'recharge');
+ battle.makeChoices('move splash', 'move recharge');
+ }
+ assert.equal(battle.p2.active[0].status, '');
+ assert.equal(battle.p1.active[0].hp, hp);
+ });
});
diff --git a/test/sim/moves/pursuit.js b/test/sim/moves/pursuit.js
index f3d634df71..3c1358c5ab 100644
--- a/test/sim/moves/pursuit.js
+++ b/test/sim/moves/pursuit.js
@@ -211,7 +211,8 @@ describe(`Pursuit`, () => {
]]);
battle.makeChoices('move pursuit', 'move spore');
assert.equal(battle.p1.active[0].status, 'slp');
- while (battle.p1.active[0].status === 'slp') {
+ for (let i = 0; i < 5; i++) {
+ if (battle.p1.active[0].status !== 'slp') break;
battle.makeChoices('move pursuit', 'switch 2');
}
// Tyranitar woke up and used Pursuit
@@ -304,7 +305,8 @@ describe(`Pursuit`, () => {
]]);
battle.makeChoices('move pursuit', 'move spore');
assert.equal(battle.p1.active[0].status, 'slp');
- while (battle.p1.active[0].status === 'slp') {
+ for (let i = 0; i < 5; i++) {
+ if (battle.p1.active[0].status !== 'slp') break;
battle.makeChoices('move pursuit', 'switch 2');
}
// Paras woke up and used Pursuit
diff --git a/test/sim/moves/thousandarrows.js b/test/sim/moves/thousandarrows.js
index 237dc8a0c3..c3960009cf 100644
--- a/test/sim/moves/thousandarrows.js
+++ b/test/sim/moves/thousandarrows.js
@@ -74,7 +74,8 @@ describe('Thousand Arrows', () => {
battle.makeChoices('move sleeptalk', 'move gravity');
// During Gravity, Thousand Arrows can be super effective, but once it ends has to be neutral for one hit
- while (battle.field.getPseudoWeather('gravity')) {
+ for (let i = 0; i < 5; i++) {
+ if (!battle.field.getPseudoWeather('gravity')) break;
battle.makeChoices();
assert(battle.log[battle.lastMoveLine + 1].startsWith('|-supereffective|'));
}
diff --git a/test/sim/moves/transform.js b/test/sim/moves/transform.js
index 9975bfbe74..d233626f7f 100644
--- a/test/sim/moves/transform.js
+++ b/test/sim/moves/transform.js
@@ -368,9 +368,10 @@ describe('Transform [Gen 1]', () => {
{ species: 'Gengar', moves: ['splash', 'thunderwave'] },
]]);
battle.makeChoices('move splash', 'move thunderwave');
- do {
+ for (let i = 0; i < 5; i++) {
battle.makeChoices('move transform', 'move splash');
- } while (!battle.p1.active[0].transformed);
+ if (battle.p1.active[0].transformed) break;
+ }
const p1poke = battle.p1.active[0];
const p2poke = battle.p2.active[0];
assert.equal(p1poke.storedStats['spe'], p2poke.storedStats['spe']);
From f2ebeac6c3a9951e6f4bf43e0e3f9906dbf5305c Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sun, 5 Apr 2026 22:15:48 -0600
Subject: [PATCH 204/233] NFE: Ban Dusclops
---
config/formats.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index d2686168d8..83c89a1345 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -369,9 +369,9 @@ export const Formats: import('../sim/dex-formats').FormatList = [
searchShow: false,
ruleset: ['Standard OMs', 'Not Fully Evolved', 'Sleep Moves Clause', 'Terastal Clause'],
banlist: [
- 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Combusken', 'Dipplin', 'Duraludon', 'Electabuzz', 'Gligar', 'Gurdurr',
- 'Haunter', 'Magmar', 'Magneton', 'Misdreavus', 'Porygon2', 'Primeape', 'Qwilfish-Hisui', 'Rhydon', 'Scyther', 'Sneasel',
- 'Sneasel-Hisui', 'Ursaring', 'Vigoroth', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass',
+ 'Basculin-White-Striped', 'Bisharp', 'Chansey', 'Combusken', 'Dipplin', 'Duraludon', 'Dusclops', 'Electabuzz', 'Gligar', 'Gurdurr',
+ 'Haunter', 'Magmar', 'Magneton', 'Misdreavus', 'Porygon2', 'Primeape', 'Qwilfish-Hisui', 'Rhydon', 'Scyther', 'Sneasel', 'Sneasel-Hisui',
+ 'Ursaring', 'Vigoroth', 'Vulpix-Base', 'Arena Trap', 'Magnet Pull', 'Moody', 'Shadow Tag', 'Baton Pass',
],
},
{
From dd3e9bf64b68f2dcb8c5815717016408478bf176 Mon Sep 17 00:00:00 2001
From: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Date: Sun, 5 Apr 2026 21:27:59 -0700
Subject: [PATCH 205/233] `gen3rs` and `gen3frlg`: Implement the multihit
contact glitch (#11836)
* `gen3rs`: Implement the multihit contact glitch
* Add to `gen3colosseum` as well
* Update hint text
* Satisfy linter
* Update `move.lastHit` assignment
* Update `move.lastHit` assignment for current gen
* Remove second ability activation message
* Update `move.lastHit` assignment for the stadium mods
* Move shared code into a function
* Use Gen 3 Effect Spore instead of Gen 4
* Rework hint text and make hint appear only if defender gets statused
* Remove `attackerStatused` check
* The glitch does not affect `gen3colosseum` bc it's not in Pokemon XD
* Apply glitch to `gen3frlg` and update message
* Ensure that the target may only get slept if the attacker actually gets slept
---
data/mods/gen1/scripts.ts | 2 +-
data/mods/gen1stadium/scripts.ts | 2 +-
data/mods/gen2/scripts.ts | 2 +-
data/mods/gen2stadium2/scripts.ts | 2 +-
data/mods/gen3/scripts.ts | 1 +
data/mods/gen3frlg/abilities.ts | 63 +++++++++++++++++++++++++++++++
data/mods/gen3rs/abilities.ts | 63 +++++++++++++++++++++++++++++++
sim/battle-actions.ts | 1 +
8 files changed, 132 insertions(+), 4 deletions(-)
create mode 100644 data/mods/gen3frlg/abilities.ts
create mode 100644 data/mods/gen3rs/abilities.ts
diff --git a/data/mods/gen1/scripts.ts b/data/mods/gen1/scripts.ts
index 31f600571c..83812bfa95 100644
--- a/data/mods/gen1/scripts.ts
+++ b/data/mods/gen1/scripts.ts
@@ -465,7 +465,7 @@ export const Scripts: ModdedBattleScriptsData = {
let i: number;
for (i = 0; i < hits && target.hp && pokemon.hp; i++) {
move.hit = i + 1;
- if (move.hit === hits) move.lastHit = true;
+ move.lastHit = move.hit === hits;
moveDamage = this.moveHit(target, pokemon, move);
if (moveDamage === false) break;
damage = (moveDamage || 0);
diff --git a/data/mods/gen1stadium/scripts.ts b/data/mods/gen1stadium/scripts.ts
index 0cfbbc072e..fb6380a046 100644
--- a/data/mods/gen1stadium/scripts.ts
+++ b/data/mods/gen1stadium/scripts.ts
@@ -331,7 +331,7 @@ export const Scripts: ModdedBattleScriptsData = {
let i: number;
for (i = 0; i < hits && target.hp && pokemon.hp; i++) {
move.hit = i + 1;
- if (move.hit === hits) move.lastHit = true;
+ move.lastHit = move.hit === hits;
moveDamage = this.moveHit(target, pokemon, move);
if (moveDamage === false) break;
damage = (moveDamage || 0);
diff --git a/data/mods/gen2/scripts.ts b/data/mods/gen2/scripts.ts
index 13dd8a1675..5bb79245ba 100644
--- a/data/mods/gen2/scripts.ts
+++ b/data/mods/gen2/scripts.ts
@@ -272,7 +272,7 @@ export const Scripts: ModdedBattleScriptsData = {
for (i = 0; i < hits && target.hp && pokemon.hp; i++) {
if (pokemon.status === 'slp' && !isSleepUsable) break;
move.hit = i + 1;
- if (move.hit === hits) move.lastHit = true;
+ move.lastHit = move.hit === hits;
moveDamage = this.moveHit(target, pokemon, move);
if (moveDamage === false) break;
if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false;
diff --git a/data/mods/gen2stadium2/scripts.ts b/data/mods/gen2stadium2/scripts.ts
index 9a9ddce00a..3487c31df4 100644
--- a/data/mods/gen2stadium2/scripts.ts
+++ b/data/mods/gen2stadium2/scripts.ts
@@ -208,7 +208,7 @@ export const Scripts: ModdedBattleScriptsData = {
for (i = 0; i < hits && target.hp && pokemon.hp; i++) {
if (pokemon.status === 'slp' && !isSleepUsable) break;
move.hit = i + 1;
- if (move.hit === hits) move.lastHit = true;
+ move.lastHit = move.hit === hits;
moveDamage = this.moveHit(target, pokemon, move);
if (moveDamage === false) break;
if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false;
diff --git a/data/mods/gen3/scripts.ts b/data/mods/gen3/scripts.ts
index fd0d8b31a8..de3150b0fd 100644
--- a/data/mods/gen3/scripts.ts
+++ b/data/mods/gen3/scripts.ts
@@ -409,6 +409,7 @@ export const Scripts: ModdedBattleScriptsData = {
for (i = 0; i < hits && target.hp && pokemon.hp; i++) {
if (pokemon.status === 'slp' && !isSleepUsable) break;
move.hit = i + 1;
+ move.lastHit = move.hit === hits;
if (move.multiaccuracy && i > 0) {
accuracy = move.accuracy;
diff --git a/data/mods/gen3frlg/abilities.ts b/data/mods/gen3frlg/abilities.ts
new file mode 100644
index 0000000000..adfe8653b3
--- /dev/null
+++ b/data/mods/gen3frlg/abilities.ts
@@ -0,0 +1,63 @@
+function attemptStatuses(battle: Battle, target: Pokemon, source: Pokemon, move: ActiveMove, status: string) {
+ const attackerStatused = source.trySetStatus(status, target);
+ if (move.multihit && move.id !== 'triplekick' &&
+ (move.lastHit || (attackerStatused && status === 'slp')) &&
+ battle.randomChance(1, 100)) {
+ const defenderStatused = target.trySetStatus(status, target, move);
+ if (defenderStatused) {
+ battle.hint("In Pokemon Ruby, Sapphire, FireRed, LeafGreen, and Colosseum, if the final hit of a multihit move (except for Triple Kick) that makes contact triggers an ability that inflicts status, then there is a 1% chance that the defender is afflicted by the same status.");
+ }
+ }
+}
+
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ effectspore: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact'] && !source.status) {
+ const r = this.random(300);
+ let status = null;
+ if (r < 10) {
+ status = 'slp';
+ } else if (r < 20) {
+ status = 'par';
+ } else if (r < 30) {
+ status = 'psn';
+ }
+ if (status) {
+ attemptStatuses(this, target, source, move, status);
+ }
+ }
+ },
+ },
+ flamebody: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'brn');
+ }
+ }
+ },
+ },
+ poisonpoint: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'psn');
+ }
+ }
+ },
+ },
+ static: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'par');
+ }
+ }
+ },
+ },
+};
diff --git a/data/mods/gen3rs/abilities.ts b/data/mods/gen3rs/abilities.ts
new file mode 100644
index 0000000000..adfe8653b3
--- /dev/null
+++ b/data/mods/gen3rs/abilities.ts
@@ -0,0 +1,63 @@
+function attemptStatuses(battle: Battle, target: Pokemon, source: Pokemon, move: ActiveMove, status: string) {
+ const attackerStatused = source.trySetStatus(status, target);
+ if (move.multihit && move.id !== 'triplekick' &&
+ (move.lastHit || (attackerStatused && status === 'slp')) &&
+ battle.randomChance(1, 100)) {
+ const defenderStatused = target.trySetStatus(status, target, move);
+ if (defenderStatused) {
+ battle.hint("In Pokemon Ruby, Sapphire, FireRed, LeafGreen, and Colosseum, if the final hit of a multihit move (except for Triple Kick) that makes contact triggers an ability that inflicts status, then there is a 1% chance that the defender is afflicted by the same status.");
+ }
+ }
+}
+
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ effectspore: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact'] && !source.status) {
+ const r = this.random(300);
+ let status = null;
+ if (r < 10) {
+ status = 'slp';
+ } else if (r < 20) {
+ status = 'par';
+ } else if (r < 30) {
+ status = 'psn';
+ }
+ if (status) {
+ attemptStatuses(this, target, source, move, status);
+ }
+ }
+ },
+ },
+ flamebody: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'brn');
+ }
+ }
+ },
+ },
+ poisonpoint: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'psn');
+ }
+ }
+ },
+ },
+ static: {
+ inherit: true,
+ onDamagingHit(damage, target, source, move) {
+ if (damage && move.flags['contact']) {
+ if (this.randomChance(1, 3)) {
+ attemptStatuses(this, target, source, move, 'par');
+ }
+ }
+ },
+ },
+};
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 06b67647a7..92ac6f6635 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -887,6 +887,7 @@ export class BattleActions {
if (hit > 1 && pokemon.status === 'slp' && (!isSleepUsable || this.battle.gen === 4)) break;
if (targets.every(target => !target?.hp)) break;
move.hit = hit;
+ move.lastHit = move.hit === targetHits;
if (move.smartTarget && targets.length > 1) {
targetsCopy = [targets[hit - 1]];
damage = [damage[hit - 1]];
From cfbffd03394be9602d8c49a74215bc3630240f5f Mon Sep 17 00:00:00 2001
From: Guangcong Luo
Date: Sun, 5 Apr 2026 23:30:01 -0700
Subject: [PATCH 206/233] Fix documentation for connection URL
Fixes #11899
---
PROTOCOL.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/PROTOCOL.md b/PROTOCOL.md
index 2d44c2136b..695a8ec631 100644
--- a/PROTOCOL.md
+++ b/PROTOCOL.md
@@ -7,9 +7,9 @@ Pokémon Showdown is implemented in SockJS. SockJS is a compatibility
layer over raw WebSocket, so you can actually connect to Pokémon
Showdown directly using WebSocket:
- ws://sim.smogon.com:8000/showdown/websocket
- or
wss://sim3.psim.us/showdown/websocket
+ or
+ ws://sim3.psim.us:8000/showdown/websocket
Client implementations you might want to look at for reference include:
From 1e2048e2a443bfd844dacb737640269e9c2545da Mon Sep 17 00:00:00 2001
From: Mia <49593536+mia-pi-git@users.noreply.github.com>
Date: Mon, 6 Apr 2026 13:50:18 -0500
Subject: [PATCH 207/233] Github: Up cooldown on PR displays to one hour
---
server/chat-plugins/github.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/server/chat-plugins/github.ts b/server/chat-plugins/github.ts
index e0dab37398..6953451e92 100644
--- a/server/chat-plugins/github.ts
+++ b/server/chat-plugins/github.ts
@@ -9,7 +9,7 @@ import { FS, Utils } from '../../lib';
const STAFF_REPOS = Config.staffrepos || [
'pokemon-showdown', 'pokemon-showdown-client', 'Pokemon-Showdown-Dex', 'pokemon-showdown-loginserver',
];
-const COOLDOWN = 10 * 60 * 1000;
+const COOLDOWN = 60 * 60 * 1000;
export const gitData: GitData = JSON.parse(FS("config/chat-plugins/github.json").readIfExistsSync() || "{}");
From 9ca5a16af2c21bd3c5ee36b9257bfc7153b89c0d Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 6 Apr 2026 15:22:47 -0600
Subject: [PATCH 208/233] Old gens: Respect `!obtainableabilities` properly
---
sim/team-validator.ts | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index 07953271da..fe4d6c3816 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -2304,7 +2304,7 @@ export class TeamValidator {
);
if (setSources.sourcesBefore < 5) setSources.sourcesBefore = 0;
const canUseAbilityPatch = dex.gen >= 8 && this.format.mod !== 'gen8dlc1';
- if (!setSources.size() && !canUseAbilityPatch) {
+ if (!setSources.size() && !canUseAbilityPatch && ruleTable.has('obtainableabilities')) {
problems.push(`${name} has a hidden ability - it can't have moves only learned before gen 5.`);
return problems;
}
@@ -2627,17 +2627,18 @@ export class TeamValidator {
continue;
}
+ const onlyLegalAbilities = ruleTable.has('obtainableabilities');
const canUseAbilityPatch = dex.gen >= 8 && format.mod !== 'gen8dlc1';
if (
- learnedGen < 7 && setSources.isHidden && !canUseAbilityPatch &&
- !dex.mod(`gen${learnedGen}`).species.get(baseSpecies.name).abilities['H']
+ learnedGen < 7 && setSources.isHidden && !canUseAbilityPatch && onlyLegalAbilities &&
+ !dex.forGen(learnedGen).species.get(baseSpecies.name).abilities['H']
) {
cantLearnReason = `can only be learned in gens without Hidden Abilities.`;
continue;
}
const ability = dex.abilities.get(set.ability);
- if (dex.gen < 6 && ability.gen > learnedGen && !checkingPrevo) {
+ if (dex.gen < 6 && ability.gen > learnedGen && !checkingPrevo && onlyLegalAbilities) {
// You can evolve a transferred mon to reroll for its new Ability.
cantLearnReason = `is learned in gen ${learnedGen}, but the Ability ${ability.name} did not exist then.`;
continue;
From 839d46bfb33824db835794d55cb21dcd489cddaf Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Mon, 6 Apr 2026 20:58:52 -0600
Subject: [PATCH 209/233] Fix weights of various Z-A Mega Evolutions
---
data/pokedex.ts | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/data/pokedex.ts b/data/pokedex.ts
index 831969ee26..dcdf2a2c74 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -11144,7 +11144,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
baseStats: { hp: 85, atk: 145, def: 80, spa: 135, spd: 90, spe: 80 },
abilities: { 0: "Levitate" },
heightm: 3,
- weightkg: 160,
+ weightkg: 180,
color: "Blue",
eggGroups: ["Amorphous"],
requiredItem: "Eelektrossite",
@@ -15077,7 +15077,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
baseStats: { hp: 78, atk: 85, def: 110, spa: 160, spd: 116, spe: 36 },
abilities: { 0: "Berserk", 1: "Sap Sipper", H: "Cloud Nine" },
heightm: 3,
- weightkg: 185,
+ weightkg: 240.5,
color: "White",
eggGroups: ["Monster", "Dragon"],
requiredItem: "Drampanite",
@@ -18682,7 +18682,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
- weightkg: 8,
+ weightkg: 24,
color: "Red",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
@@ -18697,7 +18697,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
- weightkg: 8,
+ weightkg: 24,
color: "Pink",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
@@ -18712,7 +18712,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
baseStats: { hp: 68, atk: 65, def: 90, spa: 135, spd: 125, spe: 92 },
abilities: { 0: "Commander", H: "Storm Drain" },
heightm: 0.3,
- weightkg: 8,
+ weightkg: 24,
color: "Yellow",
eggGroups: ["Water 2"],
requiredItem: "Tatsugirinite",
From 94639756a6f7a1edd1e2f7a425070374d1f0a60b Mon Sep 17 00:00:00 2001
From: Guangcong Luo
Date: Tue, 7 Apr 2026 13:58:01 -0700
Subject: [PATCH 210/233] Refactor editbattle not to use eval (#11898)
With this, editbattle no longer relies on `>eval`, but gets its own
inputlog protocol.
---
server/chat-commands/admin.ts | 121 +-------------------
sim/battle-stream.ts | 205 +++++++++++++++++++++++++++++-----
2 files changed, 175 insertions(+), 151 deletions(-)
diff --git a/server/chat-commands/admin.ts b/server/chat-commands/admin.ts
index 2dea153104..9e5fdee50a 100644
--- a/server/chat-commands/admin.ts
+++ b/server/chat-commands/admin.ts
@@ -1627,126 +1627,7 @@ export const commands: Chat.ChatCommands = {
throw new Chat.ErrorMessage("/editbattle - This is not a battle room.");
}
const battle = room.battle;
- let cmd;
- [cmd, target] = Utils.splitFirst(target, ' ');
- if (cmd.endsWith(',')) cmd = cmd.slice(0, -1);
- const targets = target.split(',');
- if (targets.length === 1 && targets[0] === '') targets.pop();
- let player, pokemon, move, stat, value;
- switch (cmd) {
- case 'hp':
- case 'h':
- if (targets.length !== 3) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, pokemon, value] = targets.map(f => f.trim());
- [player, pokemon] = [player, pokemon].map(toID);
- void battle.stream.write(
- `>eval let p=pokemon('${player}', '${pokemon}');p.sethp(${parseInt(value)});` +
- `if (p.isActive)battle.add('-damage',p,p.getHealth);`
- );
- break;
- case 'status':
- case 's':
- if (targets.length !== 3) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, pokemon, value] = targets.map(toID);
- void battle.stream.write(
- `>eval let pl=player('${player}');let p=pokemon(pl,'${pokemon}');p.setStatus('${value}');if (!p.isActive){battle.add('','please ignore the above');battle.add('-status',pl.active[0],pl.active[0].status,'[silent]');}`
- );
- break;
- case 'pp':
- if (targets.length !== 4) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, pokemon, move, value] = targets.map(f => f.trim());
- [player, pokemon, move] = [player, pokemon, move].map(toID);
- void battle.stream.write(
- `>eval pokemon('${player}','${pokemon}').getMoveData('${move}').pp = ${parseInt(value)};`
- );
- break;
- case 'boost':
- case 'b':
- if (targets.length !== 4) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, pokemon, stat, value] = targets.map(f => f.trim());
- [player, pokemon, stat] = [player, pokemon, stat].map(toID);
- void battle.stream.write(
- `>eval let p=pokemon('${player}','${pokemon}');battle.boost({${stat}:${parseInt(value)}},p)`
- );
- break;
- case 'volatile':
- case 'v':
- if (targets.length !== 3) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, pokemon, value] = targets.map(toID);
- void battle.stream.write(
- `>eval pokemon('${player}','${pokemon}').addVolatile('${value}')`
- );
- break;
- case 'sidecondition':
- case 'sc':
- if (targets.length !== 2) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [player, value] = targets.map(toID);
- void battle.stream.write(`>eval player('${player}').addSideCondition('${value}', 'debug')`);
- break;
- case 'fieldcondition': case 'pseudoweather':
- case 'fc':
- if (targets.length !== 1) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [value] = targets.map(toID);
- void battle.stream.write(`>eval battle.field.addPseudoWeather('${value}', 'debug')`);
- break;
- case 'weather':
- case 'w':
- if (targets.length !== 1) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [value] = targets.map(toID);
- void battle.stream.write(`>eval battle.field.setWeather('${value}', 'debug')`);
- break;
- case 'terrain':
- case 't':
- if (targets.length !== 1) {
- this.errorReply("Incorrect command use");
- return this.parse('/help editbattle');
- }
- [value] = targets.map(toID);
- void battle.stream.write(`>eval battle.field.setTerrain('${value}', 'debug')`);
- break;
- case 'reseed':
- if (targets.length !== 0) {
- if (targets.length !== 4) {
- this.errorReply("Seed must have 4 parts");
- return this.parse('/help editbattle');
- }
- // this just tests for a 5-digit number, close enough to uint16
- if (!targets.every(val => /^[0-9]{1,5}$/.test(val))) {
- this.errorReply("Seed parts much be unsigned 16-bit integers");
- return this.parse('/help editbattle');
- }
- }
- void battle.stream.write(`>reseed ${targets.join(',')}`);
- if (targets.length) this.sendReply(`Reseeded to ${targets.join(',')}`);
- break;
- default:
- this.errorReply(`Unknown editbattle command: ${cmd}`);
- return this.parse('/help editbattle');
- }
+ void battle.stream.write(`>editbattle user:${user.name}, ${target}`);
},
editbattlehelp: [
`/editbattle hp [player], [pokemon], [hp]`,
diff --git a/sim/battle-stream.ts b/sim/battle-stream.ts
index 67a5483c88..fda9a5b4dc 100644
--- a/sim/battle-stream.ts
+++ b/sim/battle-stream.ts
@@ -14,32 +14,6 @@ import { Teams } from './teams';
import { Battle, extractChannelMessages } from './battle';
import type { ChoiceRequest } from './side';
-/**
- * Like string.split(delimiter), but only recognizes the first `limit`
- * delimiters (default 1).
- *
- * `"1 2 3 4".split(" ", 2) => ["1", "2"]`
- *
- * `Utils.splitFirst("1 2 3 4", " ", 1) => ["1", "2 3 4"]`
- *
- * Returns an array of length exactly limit + 1.
- */
-function splitFirst(str: string, delimiter: string, limit = 1) {
- const splitStr: string[] = [];
- while (splitStr.length < limit) {
- const delimiterIndex = str.indexOf(delimiter);
- if (delimiterIndex >= 0) {
- splitStr.push(str.slice(0, delimiterIndex));
- str = str.slice(delimiterIndex + delimiter.length);
- } else {
- splitStr.push(str);
- str = '';
- }
- }
- splitStr.push(str);
- return splitStr;
-}
-
export class BattleStream extends Streams.ObjectReadWriteStream {
debug: boolean;
noCatch: boolean;
@@ -75,7 +49,7 @@ export class BattleStream extends Streams.ObjectReadWriteStream {
_writeLines(chunk: string) {
for (const line of chunk.split('\n')) {
if (line.startsWith('>')) {
- const [type, message] = splitFirst(line.slice(1), ' ');
+ const [type, message] = Utils.splitFirst(line.slice(1), ' ');
this._writeLine(type, message);
}
}
@@ -110,7 +84,7 @@ export class BattleStream extends Streams.ObjectReadWriteStream {
this.battle = new Battle(options);
break;
case 'player':
- const [slot, optionsText] = splitFirst(message, ' ');
+ const [slot, optionsText] = Utils.splitFirst(message, ' ');
this.battle!.setPlayer(slot as SideID, JSON.parse(optionsText));
break;
case 'p1':
@@ -208,6 +182,14 @@ export class BattleStream extends Streams.ObjectReadWriteStream {
battle.add('', '<<< error: ' + e.message);
}
break;
+ case 'editbattle':
+ try {
+ this.editbattle(message);
+ this.battle!.inputLog.push(`>editbattle ${message}`);
+ } catch (e: any) {
+ this.battle!.add('', '<<< error: ' + e.message);
+ }
+ break;
case 'requestlog':
this.push(`requesteddata\n${this.battle!.inputLog.join('\n')}`);
break;
@@ -234,6 +216,167 @@ export class BattleStream extends Streams.ObjectReadWriteStream {
throw new Error(`Unrecognized command ">${type} ${message}"`);
}
}
+ editbattle(target: string) {
+ const battle = this.battle!;
+ const toID = battle.toID;
+ const getPlayer = (originalInput: string) => {
+ const input = toID(originalInput);
+ if (/^p[1-9]$/.test(input)) return battle.sides[parseInt(input.slice(1)) - 1];
+ if (/^[1-9]$/.test(input)) return battle.sides[parseInt(input) - 1];
+ for (const side of battle.sides) {
+ if (toID(side.name) === input) return side;
+ }
+ throw new Error(`Player "${originalInput}" not found`);
+ };
+ const getPokemon = (side: string | Side, input: string) => {
+ if (typeof side === 'string') side = getPlayer(side)!;
+
+ input = toID(input);
+ let out = null;
+ if (/^[1-9]$/.test(input)) out = side.pokemon[parseInt(input) - 1];
+ else out = side.pokemon.find(p => p.baseSpecies.id === input || p.species.id === input);
+ if (!out) throw new Error(`Pokemon "${side.name} ${input}" not found`);
+ return out;
+ };
+ const requireInt = (input: string) => {
+ const num = Number(input);
+ if (!Number.isInteger(num)) throw new Error(`"${input}" is not an integer`);
+ return num;
+ };
+
+ let user = null;
+ if (target.startsWith('user:')) {
+ [user, target] = Utils.splitFirst(target.slice(5), ',');
+ target = target.trim();
+ }
+ battle.add('html', Utils.html`${user ? `[${user}] ` : ''}/editbattle ${target}
`);
+
+ let cmd;
+ [cmd, target] = Utils.splitFirst(target, ' ');
+ if (cmd.endsWith(',')) cmd = cmd.slice(0, -1);
+ const targets = target.split(',');
+ if (targets.length === 1 && targets[0] === '') targets.pop();
+ switch (cmd) {
+ case 'hp':
+ case 'h': {
+ if (targets.length !== 3) {
+ battle.add("||<<< Error: Format should be: hp PLAYER, POKEMON, HP");
+ return;
+ }
+ const [player, pokemon, hp] = targets;
+ const p = getPokemon(toID(player), toID(pokemon));
+ p.sethp(requireInt(hp));
+ if (p.isActive) battle.add('-damage', p, p.getHealth);
+ break;
+ }
+ case 'status':
+ case 's': {
+ if (targets.length !== 3) {
+ battle.add("||<<< Error: Format should be: status PLAYER, POKEMON, STATUS");
+ return;
+ }
+ const [player, pokemon, status] = targets.map(toID);
+ const pl = getPlayer(player);
+ const p = getPokemon(player, pokemon);
+ p.setStatus(toID(status));
+ if (!p.isActive) {
+ battle.add('', 'please ignore the above');
+ battle.add('-status', pl.active[0], pl.active[0].status, '[silent]');
+ }
+ break;
+ }
+ case 'pp': {
+ if (targets.length !== 4) {
+ battle.add("||<<< Error: Format should be: pp PLAYER, POKEMON, MOVE, PP");
+ return;
+ }
+ const [player, pokemon, move, pp] = targets;
+ const p = getPokemon(player, pokemon);
+ const moveData = p.getMoveData(toID(move)) || p.moveSlots[parseInt(move) - 1];
+ if (!moveData) {
+ battle.add(`||<<< Error: Move "${move}" not found for Pokemon "${player} ${pokemon}"`);
+ return;
+ }
+ moveData.pp = requireInt(pp);
+ break;
+ }
+ case 'boost':
+ case 'b': {
+ if (targets.length !== 4) {
+ battle.add("||<<< Error: Format should be: boost PLAYER, POKEMON, STAT, VALUE");
+ return;
+ }
+ const [player, pokemon, stat, boostLevel] = targets;
+ const p = getPokemon(player, pokemon);
+ const statID = toID(stat) as BoostID;
+ if (!['atk', 'def', 'spa', 'spd', 'spe', 'accuracy', 'evasion'].includes(statID)) {
+ battle.add(`||<<< Error: Invalid boost "${stat}:${boostLevel}"`);
+ return;
+ }
+ battle.boost({ [statID]: requireInt(boostLevel) }, p);
+ break;
+ }
+ case 'volatile':
+ case 'v': {
+ if (targets.length !== 3) {
+ battle.add("||<<< Error: Format should be: volatile PLAYER, POKEMON, VOLATILE");
+ return;
+ }
+ const [player, pokemon, volatile] = targets;
+ const p = getPokemon(player, pokemon);
+ p.addVolatile(toID(volatile));
+ break;
+ }
+ case 'sidecondition':
+ case 'sc': {
+ if (targets.length !== 2) {
+ battle.add("||<<< Error: Format should be: sidecondition PLAYER, SIDECONDITION");
+ return;
+ }
+ const [player, sideCondition] = targets;
+ const side = getPlayer(player);
+ side.addSideCondition(toID(sideCondition), 'debug');
+ break;
+ }
+ case 'fieldcondition': case 'pseudoweather':
+ case 'fc': {
+ if (targets.length !== 1) {
+ battle.add("||<<< Error: Format should be: fieldcondition FIELD, PSEUDOWEATHER");
+ return;
+ }
+ const [pseudoWeather] = targets;
+ battle.field.addPseudoWeather(toID(pseudoWeather), 'debug');
+ break;
+ }
+ case 'weather':
+ case 'w': {
+ if (targets.length !== 1) {
+ battle.add("||<<< Error: Format should be: weather FIELD, WEATHER");
+ return;
+ }
+ const [weather] = targets;
+ battle.field.setWeather(toID(weather), 'debug');
+ break;
+ }
+ case 'terrain':
+ case 't': {
+ if (targets.length !== 1) {
+ battle.add("||<<< Error: Format should be: terrain FIELD, TERRAIN");
+ return;
+ }
+ const [terrain] = targets;
+ battle.field.setTerrain(toID(terrain), 'debug');
+ break;
+ }
+ case 'reseed': {
+ battle.resetRNG(target as PRNGSeed);
+ if (targets.length) battle.add(`||Reseeded to ${targets.join(',')}`);
+ break;
+ }
+ default:
+ throw new Error(`Unknown editbattle command: ${cmd}`);
+ }
+ }
override _writeEnd() {
// if battle already ended, we don't need to pushEnd.
@@ -286,7 +429,7 @@ export function getPlayerStreams(stream: BattleStream) {
};
(async () => {
for await (const chunk of stream) {
- const [type, data] = splitFirst(chunk, `\n`);
+ const [type, data] = Utils.splitFirst(chunk, `\n`);
switch (type) {
case 'update':
const channelMessages = extractChannelMessages(data, [-1, 0, 1, 2, 3, 4]);
@@ -298,7 +441,7 @@ export function getPlayerStreams(stream: BattleStream) {
streams.p4.push(channelMessages[4].join('\n'));
break;
case 'sideupdate':
- const [side, sideData] = splitFirst(data, `\n`);
+ const [side, sideData] = Utils.splitFirst(data, `\n`);
streams[side as SideID].push(sideData);
break;
case 'end':
@@ -343,7 +486,7 @@ export abstract class BattlePlayer {
receiveLine(line: string) {
if (this.debug) console.log(line);
if (!line.startsWith('|')) return;
- const [cmd, rest] = splitFirst(line.slice(1), '|');
+ const [cmd, rest] = Utils.splitFirst(line.slice(1), '|');
if (cmd === 'request') return this.receiveRequest(JSON.parse(rest));
if (cmd === 'error') return this.receiveError(new Error(rest));
this.log.push(line);
From f53616001ac44afed0511aa720d059d6d1335959 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Wed, 8 Apr 2026 19:44:10 +0100
Subject: [PATCH 211/233] Fix Max PP for copied moves (#11844)
* Fix PP and Max PP for copied moves
* Missed spot
* Fix Ripen + Leppa Berry
* Lint
* Fix PP formula
* Remove Trump Card checks
* Default PP UPs to 3 in calculatePP
* Lint
---
config/formats.ts | 7 +++++--
data/conditions.ts | 10 ++++++----
data/items.ts | 4 ++--
data/mods/biomechmons/abilities.ts | 7 +++++--
data/mods/biomechmons/moves.ts | 14 ++++++++++----
data/mods/biomechmons/scripts.ts | 21 ++++++++++++++-------
data/mods/gen1/moves.ts | 2 +-
data/mods/gen4/moves.ts | 6 +++---
data/mods/gen9dlc1/scripts.ts | 8 +++++---
data/mods/gen9ssb/abilities.ts | 5 +++--
data/mods/gen9ssb/conditions.ts | 10 ++++++----
data/mods/gen9ssb/scripts.ts | 5 +++--
data/mods/mixandmega/scripts.ts | 11 ++++++-----
data/mods/partnersincrime/scripts.ts | 9 +++++----
data/mods/pokebilities/scripts.ts | 8 +++++---
data/mods/trademarked/scripts.ts | 8 +++++---
data/moves.ts | 1 -
data/rulesets.ts | 5 +++--
sim/battle.ts | 7 +++++++
sim/global-types.ts | 1 +
sim/pokemon.ts | 20 +++++++++++++-------
21 files changed, 108 insertions(+), 61 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 83c89a1345..a0cbe99536 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -1376,16 +1376,19 @@ export const Formats: import('../sim/dex-formats').FormatList = [
for (const scrambledMove of pokemon.m.scrambled.moves) {
const move = this.dex.moves.get(scrambledMove.thing);
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.calculatePP(move, ppUps);
const newMove = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: move.target,
disabled: false,
used: false,
};
pokemon.baseMoveSlots.push(newMove);
+ pokemon.ppUps.push(ppUps);
}
pokemon.moveSlots = pokemon.baseMoveSlots.slice();
}
diff --git a/data/conditions.ts b/data/conditions.ts
index cf749e1f66..b8f0d3a75c 100644
--- a/data/conditions.ts
+++ b/data/conditions.ts
@@ -894,11 +894,12 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
if (ironHeadIndex >= 0) {
const move = this.dex.moves.get('behemothblade');
+ const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]);
pokemon.baseMoveSlots[ironHeadIndex] = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
@@ -923,11 +924,12 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
if (ironHeadIndex >= 0) {
const move = this.dex.moves.get('behemothbash');
+ const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]);
pokemon.baseMoveSlots[ironHeadIndex] = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
diff --git a/data/items.ts b/data/items.ts
index b232f73d88..fb53bdc56e 100644
--- a/data/items.ts
+++ b/data/items.ts
@@ -3362,8 +3362,8 @@ export const Items: import('../sim/dex-items').ItemDataTable = {
const moveSlot = pokemon.moveSlots.find(move => move.pp === 0) ||
pokemon.moveSlots.find(move => move.pp < move.maxpp);
if (!moveSlot) return;
- moveSlot.pp += 10;
- if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp;
+ const addedPP = pokemon.hasAbility('ripen') ? 20 : 10;
+ moveSlot.pp = Math.min(moveSlot.pp + addedPP, moveSlot.maxpp);
this.add('-activate', pokemon, 'item: Leppa Berry', moveSlot.move, '[consumed]');
},
num: 154,
diff --git a/data/mods/biomechmons/abilities.ts b/data/mods/biomechmons/abilities.ts
index 62b6ffd416..832ffc2bae 100644
--- a/data/mods/biomechmons/abilities.ts
+++ b/data/mods/biomechmons/abilities.ts
@@ -185,17 +185,20 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
(pokemon.m.scrambled.abilities as { thing: string, inSlot: string }[]).findIndex(e =>
this.toID(e.thing) === 'trace' && e.inSlot === 'Move'), 1);
this.add('-ability', pokemon, move.name, 'Trace');
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.calculatePP(move, ppUps);
const newMove = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: move.target,
disabled: false,
used: false,
};
pokemon.baseMoveSlots.push(newMove);
pokemon.moveSlots.push(newMove);
+ pokemon.ppUps.push(ppUps);
}
}
return;
diff --git a/data/mods/biomechmons/moves.ts b/data/mods/biomechmons/moves.ts
index 1ab2c93520..c1348b090b 100644
--- a/data/mods/biomechmons/moves.ts
+++ b/data/mods/biomechmons/moves.ts
@@ -298,17 +298,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
} else {
source.m.scrambled.moves.push({ thing: targetAbility.id, inSlot: 'Ability' });
const bmmMove = Dex.moves.get(targetAbility.id);
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.calculatePP(move, ppUps);
const newMove = {
move: bmmMove.name,
id: bmmMove.id,
- pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
- maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: bmmMove.target,
disabled: false,
used: false,
};
source.baseMoveSlots.push(newMove);
source.moveSlots.push(newMove);
+ source.ppUps.push(ppUps);
}
}
this.singleEvent('Start', sourceAbility, target.abilityState, target);
@@ -321,17 +324,20 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
} else {
target.m.scrambled.moves.push({ thing: sourceAbility.id, inSlot: 'Ability' });
const bmmMove = Dex.moves.get(sourceAbility.id);
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.calculatePP(move, ppUps);
const newMove = {
move: bmmMove.name,
id: bmmMove.id,
- pp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
- maxpp: bmmMove.noPPBoosts ? bmmMove.pp : bmmMove.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: bmmMove.target,
disabled: false,
used: false,
};
target.baseMoveSlots.push(newMove);
target.moveSlots.push(newMove);
+ target.ppUps.push(ppUps);
}
}
},
diff --git a/data/mods/biomechmons/scripts.ts b/data/mods/biomechmons/scripts.ts
index 199d54b805..011f507547 100644
--- a/data/mods/biomechmons/scripts.ts
+++ b/data/mods/biomechmons/scripts.ts
@@ -167,11 +167,13 @@ export const Scripts: ModdedBattleScriptsData = {
} else {
this.m.scrambled.moves.push({ thing: ability.id, inSlot: 'Ability' });
const move = Dex.moves.get(ability.id);
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.battle.calculatePP(move, ppUps);
const newMove = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: move.target,
disabled: false,
used: false,
@@ -179,6 +181,7 @@ export const Scripts: ModdedBattleScriptsData = {
if (!isTransform) {
this.baseMoveSlots.push(newMove);
this.moveSlots.push(newMove);
+ this.ppUps.push(ppUps);
}
}
}
@@ -322,17 +325,20 @@ export const Scripts: ModdedBattleScriptsData = {
} else {
this.m.scrambled.moves.push({ thing: item.id, inSlot: 'Item' });
const move = Dex.moves.get(item.id);
+ const ppUps = move.noPPBoosts ? 0 : 3;
+ const basePP = this.battle.calculatePP(move, ppUps);
const newMove = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp: basePP,
+ maxpp: basePP,
target: move.target,
disabled: false,
used: false,
};
this.baseMoveSlots.push(newMove);
this.moveSlots.push(newMove);
+ this.ppUps.push(ppUps);
}
}
return true;
@@ -483,16 +489,17 @@ export const Scripts: ModdedBattleScriptsData = {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp: Math.min(5, move.pp),
+ maxpp: this.battle.gen >= 5 ? Math.min(5, move.pp) : moveSlot.maxpp,
target: moveSlot.target,
disabled: false,
used: false,
diff --git a/data/mods/gen1/moves.ts b/data/mods/gen1/moves.ts
index 9af6c2310c..9bb9510f3f 100644
--- a/data/mods/gen1/moves.ts
+++ b/data/mods/gen1/moves.ts
@@ -462,7 +462,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
move: move.name,
id: move.id,
pp: source.moveSlots[moveslot].pp,
- maxpp: move.pp * 8 / 5,
+ maxpp: this.calculatePP(move, source.ppUps[moveslot] || 0),
target: move.target,
disabled: false,
used: false,
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index a37cd74762..e2816b4541 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -870,8 +870,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
source.moveSlots[mimicIndex] = {
move: move.name,
id: move.id,
- pp: 5,
- maxpp: move.pp * 8 / 5,
+ pp: Math.min(5, move.pp),
+ maxpp: this.calculatePP(move, source.ppUps[mimicIndex] || 0),
disabled: false,
used: false,
virtual: true,
@@ -1206,7 +1206,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
move: move.name,
id: move.id,
pp: move.pp,
- maxpp: move.pp,
+ maxpp: this.calculatePP(move, source.ppUps[sketchIndex] || 0),
disabled: false,
used: false,
};
diff --git a/data/mods/gen9dlc1/scripts.ts b/data/mods/gen9dlc1/scripts.ts
index 1dba6b2f28..c8d77bc7e9 100644
--- a/data/mods/gen9dlc1/scripts.ts
+++ b/data/mods/gen9dlc1/scripts.ts
@@ -87,16 +87,18 @@ export const Scripts: ModdedBattleScriptsData = {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
+ const pp = Math.min(5, move.pp);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp,
+ maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0),
target: moveSlot.target,
disabled: false,
used: false,
diff --git a/data/mods/gen9ssb/abilities.ts b/data/mods/gen9ssb/abilities.ts
index 5776045a74..10afe20079 100644
--- a/data/mods/gen9ssb/abilities.ts
+++ b/data/mods/gen9ssb/abilities.ts
@@ -942,11 +942,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
this.boost({ spe: 1 });
this.heal(pokemon.maxhp);
const move = this.dex.moves.get('finalgambit');
+ const pp = this.calculatePP(move);
const finalGambit = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
used: false,
diff --git a/data/mods/gen9ssb/conditions.ts b/data/mods/gen9ssb/conditions.ts
index a5984188f1..dd7eb99318 100644
--- a/data/mods/gen9ssb/conditions.ts
+++ b/data/mods/gen9ssb/conditions.ts
@@ -18,11 +18,12 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s
const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
if (ironHeadIndex >= 0) {
const move = this.dex.moves.get('behemothblade');
+ const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]);
pokemon.baseMoveSlots[ironHeadIndex] = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
@@ -47,11 +48,12 @@ export const Conditions: { [id: IDEntry]: ModdedConditionData & { innateName?: s
const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
if (ironHeadIndex >= 0) {
const move = this.dex.moves.get('behemothbash');
+ const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]);
pokemon.baseMoveSlots[ironHeadIndex] = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
index 4113928614..8d999b0d2d 100644
--- a/data/mods/gen9ssb/scripts.ts
+++ b/data/mods/gen9ssb/scripts.ts
@@ -142,11 +142,12 @@ export function changeMoves(context: Battle, pokemon: Pokemon, newMoves: (string
const moveName = Array.isArray(newMove) ? newMove[context.random(newMove.length)] : newMove;
const move = context.dex.moves.get(context.toID(moveName));
if (!move.id) continue;
+ const pp = context.calculatePP(move);
const moveSlot = {
move: move.name,
id: move.id,
- pp: Math.floor((move.noPPBoosts ? move.pp : move.pp * 8 / 5) * carryOver[slot]),
- maxpp: (move.noPPBoosts ? move.pp : move.pp * 8 / 5),
+ pp: pp * carryOver[slot],
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts
index 087f070a0f..1655ecf0f0 100644
--- a/data/mods/mixandmega/scripts.ts
+++ b/data/mods/mixandmega/scripts.ts
@@ -125,14 +125,15 @@ export const Scripts: ModdedBattleScriptsData = {
const behemothMove: { [k: string]: string } = {
'Rusted Sword': 'behemothblade', 'Rusted Shield': 'behemothbash',
};
- const ironHead = pokemon.baseMoves.indexOf('ironhead');
- if (ironHead >= 0) {
+ const ironHeadIndex = pokemon.baseMoves.indexOf('ironhead');
+ if (ironHeadIndex >= 0) {
const move = this.dex.moves.get(behemothMove[pokemon.getItem().name]);
- pokemon.baseMoveSlots[ironHead] = {
+ const pp = this.calculatePP(move, pokemon.ppUps[ironHeadIndex]);
+ pokemon.baseMoveSlots[ironHeadIndex] = {
move: move.name,
id: move.id,
- pp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
- maxpp: move.noPPBoosts ? move.pp : move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
diff --git a/data/mods/partnersincrime/scripts.ts b/data/mods/partnersincrime/scripts.ts
index 51a35b323d..c6ffe18a44 100644
--- a/data/mods/partnersincrime/scripts.ts
+++ b/data/mods/partnersincrime/scripts.ts
@@ -407,17 +407,18 @@ export const Scripts: ModdedBattleScriptsData = {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
- if (!pokemon.m.curMoves.includes(moveSlot.id)) continue;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
+ const pp = Math.min(5, move.pp);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp,
+ maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0),
target: moveSlot.target,
disabled: false,
used: false,
diff --git a/data/mods/pokebilities/scripts.ts b/data/mods/pokebilities/scripts.ts
index 4996715dc0..c535547337 100644
--- a/data/mods/pokebilities/scripts.ts
+++ b/data/mods/pokebilities/scripts.ts
@@ -70,16 +70,18 @@ export const Scripts: ModdedBattleScriptsData = {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
+ const pp = Math.min(5, move.pp);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp,
+ maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0),
target: moveSlot.target,
disabled: false,
used: false,
diff --git a/data/mods/trademarked/scripts.ts b/data/mods/trademarked/scripts.ts
index a33c7ff4f0..ea46643879 100644
--- a/data/mods/trademarked/scripts.ts
+++ b/data/mods/trademarked/scripts.ts
@@ -251,16 +251,18 @@ export const Scripts: ModdedBattleScriptsData = {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
+ const pp = Math.min(5, move.pp);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp,
+ maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0),
target: moveSlot.target,
disabled: false,
used: false,
diff --git a/data/moves.ts b/data/moves.ts
index 6cccc05dc8..b3e9ca2e46 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -20177,7 +20177,6 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
isNonstandard: "Past",
name: "Trump Card",
pp: 5,
- noPPBoosts: true,
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
target: "normal",
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 0bb49b3aac..8b6233e473 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -2518,12 +2518,13 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
const item = pokemon.getItem();
if (/^tr\d\d/i.test(item.name)) {
const move = this.dex.moves.get(item.desc.split('move ')[1].split('.')[0]);
+ const pp = this.calculatePP(move);
pokemon.moveSlots = (pokemon as any).baseMoveSlots = [
...pokemon.baseMoveSlots, {
id: move.id,
move: move.name,
- pp: move.pp * 8 / 5,
- maxpp: move.pp * 8 / 5,
+ pp,
+ maxpp: pp,
target: move.target,
disabled: false,
disabledSource: '',
diff --git a/sim/battle.ts b/sim/battle.ts
index a333409db3..41564d772c 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -2373,6 +2373,13 @@ export class Battle {
return stat;
}
+ calculatePP(move: Move, ppUps = 3) {
+ if (move.noPPBoosts) return move.pp;
+ let pp = move.pp * (5 + ppUps) / 5;
+ if (this.gen <= 2 && move.pp === 40) pp -= ppUps;
+ return pp;
+ }
+
finalModify(relayVar: number) {
relayVar = this.modify(relayVar, this.event.modifier);
this.event.modifier = 1;
diff --git a/sim/global-types.ts b/sim/global-types.ts
index 8eea0b7c38..74625c075a 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -384,6 +384,7 @@ interface ModdedBattleScriptsData extends Partial {
win?: (this: Battle, side?: SideID | '' | Side | null) => boolean;
faintMessages?: (this: Battle, lastFirst?: boolean, forceCheck?: boolean, checkWin?: boolean) => boolean | undefined;
tiebreak?: (this: Battle) => boolean;
+ calculatePP?: (this: Battle, move: Move, ppUps?: number) => number;
checkMoveMakesContact?: (
this: Battle, move: ActiveMove, attacker: Pokemon, defender: Pokemon, announcePads?: boolean
) => boolean;
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index d30ec7fb3b..9a355611f3 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -65,6 +65,8 @@ export class Pokemon {
readonly baseMoveSlots: MoveSlot[];
moveSlots: MoveSlot[];
+ /** Only track for base move slots */
+ ppUps: number[];
hpType: string;
hpPower: number;
@@ -343,6 +345,7 @@ export class Pokemon {
this.baseMoveSlots = [];
this.moveSlots = [];
+ this.ppUps = [];
if (!this.set.moves?.length) {
throw new Error(`Set ${this.name} has no moves`);
}
@@ -353,18 +356,19 @@ export class Pokemon {
if (!set.hpType) set.hpType = move.type;
move = this.battle.dex.moves.get('hiddenpower');
}
- let basepp = move.noPPBoosts ? move.pp : move.pp * 8 / 5;
- if (this.battle.gen < 3) basepp = Math.min(61, basepp);
+ const ppUps = move.noPPBoosts || move.id === 'trumpcard' ? 0 : 3;
+ const basePP = this.battle.calculatePP(move, ppUps);
this.baseMoveSlots.push({
move: move.name,
id: move.id,
- pp: basepp,
- maxpp: basepp,
+ pp: basePP,
+ maxpp: basePP,
target: move.target,
disabled: false,
disabledSource: '',
used: false,
});
+ this.ppUps.push(ppUps);
}
this.position = 0;
@@ -1301,16 +1305,18 @@ export class Pokemon {
this.hpType = (this.battle.gen >= 5 ? this.hpType : pokemon.hpType);
this.hpPower = (this.battle.gen >= 5 ? this.hpPower : pokemon.hpPower);
this.timesAttacked = pokemon.timesAttacked;
- for (const moveSlot of pokemon.moveSlots) {
+ for (const [i, moveSlot] of pokemon.moveSlots.entries()) {
let moveName = moveSlot.move;
if (moveSlot.id === 'hiddenpower') {
moveName = 'Hidden Power ' + this.hpType;
}
+ const move = this.battle.dex.moves.get(moveSlot.id);
+ const pp = Math.min(5, move.pp);
this.moveSlots.push({
move: moveName,
id: moveSlot.id,
- pp: moveSlot.maxpp === 1 ? 1 : 5,
- maxpp: this.battle.gen >= 5 ? (moveSlot.maxpp === 1 ? 1 : 5) : moveSlot.maxpp,
+ pp,
+ maxpp: this.battle.gen >= 5 ? pp : this.battle.calculatePP(move, this.ppUps[i] || 0),
target: moveSlot.target,
disabled: false,
used: false,
From b555f4d8ce7250e72939fe0c12cc5b303741d203 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 10 Apr 2026 20:29:01 -0600
Subject: [PATCH 212/233] Implement Champions (#11910)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Make a mod file
* Add Pokemon in Champions (#3)
* Add new Megas abilities (#4)
* Add new Megas abilities
* Apply suggestion from @KrisXV
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Add conditions for Champions (#5)
* Add conditions for Champions
* Add a turn limit to freeze
* Swap the order of the checks
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
---------
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
* Disable Fake Out if it is not the first active move action (#7)
* Disable Fake Out if it is not the first active move action
* Remove unnecessary code
---------
Co-authored-by: André Bastos Dias
* Implement Piercing Drill, Spicy Spray and Unseen Fist (#2)
* Add Piercing Drill and Spicy Spray
Fix ability numbers
Refactor condition
Disallow Piercing Drill/Spicy Spray in formats !Obtainable Abilities without +Future
Refactor condition
* Rename blockStatus
* CFZ-moves completely bypass Protect
* Update Gen 4 Protect
* Old gen Wide Guard and Quick Guard
* Fix Wide Guard
* Clean Mat Block implementation
* Nerf Unseen Fist
* Fix condition
* Update sim/battle.ts
---------
Co-authored-by: André Bastos Dias
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Implement PP mechanics (#8)
* Implement PP mechanics
* Clip all moves to 20 PP
* Apply suggestion from @KrisXV
* Update scripts.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Add Champions stat calculaiton
* Fix conflicts with smogon/master (#11)
* Fix stat formula (#12)
* Implement PP mechanics (#8)
* Implement PP mechanics
* Clip all moves to 20 PP
* Apply suggestion from @KrisXV
* Update scripts.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Fix stat formula
* For clarity like we do with friendship in letsgo
* If we don't allow IVs and Level to be modifiable, there is not point in having `Adjust Level = 50`
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Add Champions Items (#9)
* Remove Mega Raichus, Mega Z, and Greninja-Bond (#10)
* Remove Mega Raichus and Mega Z
* Remove Greninja-Bond
* Implement Mega Sol's activation message (#13)
* Implement Mega Sol's activation message
* Update ModdedBattlePokemon interface
* Implement move changes (#6)
* Implement move changes
* Re-implement Salt Cure changes
* Update moves
* Implement Blood Moon package
* Mimic https://github.com/smogon/pokemon-showdown/pull/11838/
https://github.com/smogon/pokemon-showdown/pull/11838/
* Implement accuracy and PP changes
* Mark Double Shock and Revival Blessing as Past moves
* Import learnsets from Serebii (#19)
* Import learnsets from serebii
* floette -> floetteeternal
* Update learnsets
* Apparently I forgot to give Gourgeist-Small its tier (#15)
* Move Pikachu to NFE (#21)
* Oops
* Add Pokemon I forgot the first time (#24)
* Add 'Past' moves (#23)
* Add past moves
* Fix move availability
* AfterHit effects should activate even if the source faints (#20)
* AfterHit effects should activate even if the source faints
* Change Gens 3-4 event order
* Ups
* Announce 4x and 0.25x effectiveness (#14)
* Reset Encore priority and choose random target (#17)
* Reset Encore priority and choose random target
* Allow onOverrideAction
* Quash + Encore interaction
* Don't send target
targetLoc was actually thing being checked but wtv
* Activate White Herb after choosing the Parting Shot switch (#26)
* Activate White Herb after choosing the Parting Shot switch
* Add comment
* Add formats
* Implement flag changes (#25)
* Implement flag changes
* Fix Gen 5 Rage Powder (remove poder immunity check)
* Add moves and abilities descriptions
* Apply suggestion from @KrisXV
* Comment Rage Powder
Leave this comment and I would choose the implementation depending on what we see from the healing flag.
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Announce status immunities from abilities (#22)
* Mega Sol boosts the damage of Fire-type moves as if they were under sun (#18)
* Remove hardcoded Utility Umbrella
* Check effective weather on attacker
* Don't activate Mega Sol under sun
* Add TODO comment
* TODO: check interaction with Utility Umbrella
* Move implementation to base mod
* Do not revert Mega Evolutions upon fainting (#16)
* Revert Mega Evolutions on fainting
* Allow diferent levels in the team builder
* TODO: confirm interaction with Revival Blessing
* Add Species Clause and Obtainable
* Update team-validator.ts
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Update abilities percentages (#27)
* Healer has a 50% chance of curing the status conditions of its allies
* Update Shed Skin
---------
Co-authored-by: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
* Fix crashes
* add custom game
* Fix typo
* update flat rules
* Update data/mods/champions/scripts.ts
Co-authored-by: Slayer95
---------
Co-authored-by: shrianshChari <30420527+shrianshChari@users.noreply.github.com>
Co-authored-by: André Bastos Dias <80102738+andrebastosdias@users.noreply.github.com>
Co-authored-by: André Bastos Dias
Co-authored-by: Karthik Bandagonda <32044378+Karthik99999@users.noreply.github.com>
Co-authored-by: Slayer95
---
config/formats.ts | 54 +-
data/abilities.ts | 31 +-
data/conditions.ts | 17 +-
data/mods/afd/moves.ts | 41 +-
data/mods/afd/scripts.ts | 2 +-
data/mods/champions/abilities.ts | 31 +
data/mods/champions/conditions.ts | 57 +
data/mods/champions/formats-data.ts | 5039 +++++++++
data/mods/champions/items.ts | 1041 ++
data/mods/champions/learnsets.ts | 13446 ++++++++++++++++++++++++
data/mods/champions/moves.ts | 1108 ++
data/mods/champions/rulesets.ts | 39 +
data/mods/champions/scripts.ts | 488 +
data/mods/chatbats/moves.ts | 5 +-
data/mods/gen4/moves.ts | 2 +-
data/mods/gen5/moves.ts | 18 +-
data/mods/gen6/moves.ts | 8 +-
data/mods/gen7/moves.ts | 5 +-
data/mods/gen9legendsou/abilities.ts | 8 +
data/mods/gen9legendsou/pokedex.ts | 65 -
data/mods/gen9regeneration/scripts.ts | 2 +-
data/mods/gen9ssb/moves.ts | 20 +-
data/mods/gen9ssb/scripts.ts | 2 +-
data/mods/mixandmega/scripts.ts | 2 +
data/mods/passiveaggressive/moves.ts | 6 +-
data/moves.ts | 93 +-
data/pokedex.ts | 33 +-
data/text/abilities.ts | 8 +
server/chat-commands/core.ts | 4 +-
server/rooms.ts | 1 +
sim/TEAMS.md | 2 +-
sim/battle-actions.ts | 13 +-
sim/battle.ts | 11 +
sim/dex-formats.ts | 5 +
sim/dex-items.ts | 1 +
sim/dex-moves.ts | 2 +-
sim/global-types.ts | 8 +-
sim/pokemon.ts | 12 +-
sim/team-validator.ts | 18 +-
sim/teams.ts | 7 +-
test/sim/data.js | 4 +-
41 files changed, 21499 insertions(+), 260 deletions(-)
create mode 100644 data/mods/champions/abilities.ts
create mode 100644 data/mods/champions/conditions.ts
create mode 100644 data/mods/champions/formats-data.ts
create mode 100644 data/mods/champions/items.ts
create mode 100644 data/mods/champions/learnsets.ts
create mode 100644 data/mods/champions/moves.ts
create mode 100644 data/mods/champions/rulesets.ts
create mode 100644 data/mods/champions/scripts.ts
diff --git a/config/formats.ts b/config/formats.ts
index a0cbe99536..2474334808 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -268,7 +268,50 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 100'],
},
- // S/V Doubles
+ // Champions
+ ///////////////////////////////////////////////////////////////////
+
+ {
+ section: "Champions",
+ },
+ {
+ name: "[Gen 9 Champions] OU",
+ mod: 'champions',
+ ruleset: ['Standard'],
+ banlist: ['AG', 'Uber', 'Baton Pass', 'Last Respects'],
+ },
+ {
+ name: "[Gen 9 Champions] BSS Reg M-A",
+ mod: 'champions',
+ bestOfDefault: true,
+ ruleset: ['Flat Rules', 'VGC Timer'],
+ },
+ {
+ name: "[Gen 9 Champions] VGC 2026 Reg M-A",
+ mod: 'champions',
+ gameType: 'doubles',
+ bestOfDefault: true,
+ ruleset: ['Flat Rules', 'VGC Timer', 'Open Team Sheets'],
+ },
+ {
+ name: "[Gen 9 Champions] VGC 2026 Reg M-A (Bo3)",
+ mod: 'champions',
+ gameType: 'doubles',
+ ruleset: ['Flat Rules', 'VGC Timer', 'Force Open Team Sheets', 'Best of = 3'],
+ },
+ {
+ name: "[Gen 9 Champions] Custom Game",
+ mod: 'champions',
+ searchShow: false,
+ debug: true,
+ battle: { trunc: Math.trunc },
+ ruleset: ['Team Preview', 'Cancel Mod', 'Max Team Size = 24', 'Max Move Count = 24', 'Max Level = 9999', 'Default Level = 50'],
+ onBegin() {
+ this.reportPercentages = true;
+ },
+ },
+
+ // Unofficial Metagames
///////////////////////////////////////////////////////////////////
{
@@ -444,6 +487,13 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['[Gen 9] NatDex Draft', 'Item Clause = 2', 'Little Cup'],
banlist: ['Dragon Rage', 'Sonic Boom'],
},
+ {
+ name: "[Gen 9 Champions] Draft",
+ mod: 'champions',
+ searchShow: false,
+ itemClauseDefault: true,
+ ruleset: ['Standard Draft'],
+ },
{
name: "[Gen 8] Draft",
mod: 'gen8',
@@ -2667,7 +2717,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
this.battle.add('-zbroken', target);
}
diff --git a/data/abilities.ts b/data/abilities.ts
index c084ad8b79..18fb82b555 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -1053,7 +1053,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
flags: {},
name: "Dragonize",
rating: 4,
- num: 312, // TODO confirm with generation shift
+ num: 312,
},
dragonsmaw: {
onModifyAtkPriority: 5,
@@ -1111,7 +1111,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
}
},
onWeather(target, source, effect) {
- if (target.hasItem('utilityumbrella')) return;
+ if (target.effectiveWeather() !== effect.id) return;
if (effect.id === 'raindance' || effect.id === 'primordialsea') {
this.heal(target.baseMaxhp / 8);
} else if (effect.id === 'sunnyday' || effect.id === 'desolateland') {
@@ -2524,7 +2524,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
flags: {},
name: "Mega Sol",
rating: 3,
- num: 311, // TODO confirm with generation shift
+ num: 315,
// Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts
},
merciless: {
@@ -3237,6 +3237,17 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 0.5,
num: 53,
},
+ piercingdrill: {
+ isNonstandard: "Future",
+ onModifyMove(move) {
+ if (move.flags['contact']) delete move.flags['protect'];
+ },
+ // breaking protect handled in Battle#checkMoveBreaksProtect()
+ flags: {},
+ name: "Piercing Drill",
+ rating: 1,
+ num: 311,
+ },
pixilate: {
onModifyTypePriority: -1,
onModifyType(move, pokemon) {
@@ -3702,7 +3713,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
raindish: {
onWeather(target, source, effect) {
- if (target.hasItem('utilityumbrella')) return;
+ if (target.effectiveWeather() !== effect.id) return;
if (effect.id === 'raindance' || effect.id === 'primordialsea') {
this.heal(target.baseMaxhp / 16);
}
@@ -4345,7 +4356,7 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
}
},
onWeather(target, source, effect) {
- if (target.hasItem('utilityumbrella')) return;
+ if (target.effectiveWeather() !== effect.id) return;
if (effect.id === 'sunnyday' || effect.id === 'desolateland') {
this.damage(target.baseMaxhp / 8, target, target);
}
@@ -4407,6 +4418,16 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
rating: 4.5,
num: 3,
},
+ spicyspray: {
+ isNonstandard: "Future",
+ onDamagingHit(damage, target, source, move) {
+ source.trySetStatus('brn', target);
+ },
+ flags: {},
+ name: "Spicy Spray",
+ rating: 3,
+ num: 318,
+ },
stakeout: {
onModifyAtkPriority: 5,
onModifyAtk(atk, attacker, defender) {
diff --git a/data/conditions.ts b/data/conditions.ts
index b8f0d3a75c..9db24cbb52 100644
--- a/data/conditions.ts
+++ b/data/conditions.ts
@@ -484,7 +484,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
return 5;
},
onWeatherModifyDamage(damage, attacker, defender, move) {
- if (defender.hasItem('utilityumbrella')) return;
+ if (defender.effectiveWeather() !== 'raindance') return;
if (move.type === 'Water') {
this.debug('rain water boost');
return this.chainModify(1.5);
@@ -525,7 +525,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
}
},
onWeatherModifyDamage(damage, attacker, defender, move) {
- if (defender.hasItem('utilityumbrella')) return;
+ if (defender.effectiveWeather() !== 'primordialsea') return;
if (move.type === 'Water') {
this.debug('Rain water boost');
return this.chainModify(1.5);
@@ -554,11 +554,12 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
return 5;
},
onWeatherModifyDamage(damage, attacker, defender, move) {
- if (move.id === 'hydrosteam' && !attacker.hasItem('utilityumbrella')) {
+ if (move.id === 'hydrosteam' && attacker.effectiveWeather() === 'sunnyday') {
this.debug('Sunny Day Hydro Steam boost');
return this.chainModify(1.5);
}
- if (defender.hasItem('utilityumbrella')) return;
+ // TODO: check interaction between Mega Sol and Utility Umbrella
+ if (defender.effectiveWeather() !== 'sunnyday' && !attacker.hasAbility('megasol')) return;
if (move.type === 'Fire') {
this.debug('Sunny Day fire boost');
return this.chainModify(1.5);
@@ -577,7 +578,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
}
},
onImmunity(type, pokemon) {
- if (pokemon.hasItem('utilityumbrella')) return;
+ if (pokemon.effectiveWeather() !== 'sunnyday') return;
if (type === 'frz') return false;
},
onFieldResidualOrder: 1,
@@ -603,9 +604,9 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
}
},
onWeatherModifyDamage(damage, attacker, defender, move) {
- if (defender.hasItem('utilityumbrella')) return;
+ if (defender.effectiveWeather() !== 'desolateland') return;
if (move.type === 'Fire') {
- this.debug('Sunny Day fire boost');
+ this.debug('Desolate Land fire boost');
return this.chainModify(1.5);
}
},
@@ -613,7 +614,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
this.add('-weather', 'DesolateLand', '[from] ability: ' + effect.name, `[of] ${source}`);
},
onImmunity(type, pokemon) {
- if (pokemon.hasItem('utilityumbrella')) return;
+ if (pokemon.effectiveWeather() !== 'desolateland') return;
if (type === 'frz') return false;
},
onFieldResidualOrder: 1,
diff --git a/data/mods/afd/moves.ts b/data/mods/afd/moves.ts
index 1bb56dbf5e..bffcc53259 100644
--- a/data/mods/afd/moves.ts
+++ b/data/mods/afd/moves.ts
@@ -4,11 +4,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -40,11 +36,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -76,11 +68,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -164,11 +152,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -200,11 +184,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -233,10 +213,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -268,11 +245,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts
index 97682cf621..39f538ca60 100644
--- a/data/mods/afd/scripts.ts
+++ b/data/mods/afd/scripts.ts
@@ -468,7 +468,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/champions/abilities.ts b/data/mods/champions/abilities.ts
new file mode 100644
index 0000000000..0ce4820418
--- /dev/null
+++ b/data/mods/champions/abilities.ts
@@ -0,0 +1,31 @@
+export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ healer: {
+ inherit: true,
+ onResidual(pokemon) {
+ for (const allyActive of pokemon.adjacentAllies()) {
+ if (allyActive.status && this.randomChance(1, 2)) {
+ this.add('-activate', pokemon, 'ability: Healer');
+ allyActive.cureStatus();
+ }
+ }
+ },
+ desc: "50% chance this Pokemon's ally has its non-volatile status condition cured at the end of each turn.",
+ shortDesc: "50% chance this Pokemon's ally has its status cured at the end of each turn.",
+ },
+ shedskin: {
+ inherit: true,
+ onResidual(pokemon) {
+ if (pokemon.hp && pokemon.status && this.randomChance(3, 10)) {
+ this.debug('shed skin');
+ this.add('-activate', pokemon, 'ability: Shed Skin');
+ pokemon.cureStatus();
+ }
+ },
+ desc: "This Pokemon has a 30% chance to have its non-volatile status condition cured at the end of each turn.",
+ shortDesc: "This Pokemon has a 30% chance to have its status cured at the end of each turn.",
+ },
+ unseenfist: {
+ inherit: true,
+ shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.",
+ },
+};
diff --git a/data/mods/champions/conditions.ts b/data/mods/champions/conditions.ts
new file mode 100644
index 0000000000..bd03a55294
--- /dev/null
+++ b/data/mods/champions/conditions.ts
@@ -0,0 +1,57 @@
+export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDataTable = {
+ par: {
+ inherit: true,
+ onBeforeMove(pokemon) {
+ if (this.randomChance(1, 8)) {
+ this.add('cant', pokemon, 'par');
+ return false;
+ }
+ },
+ },
+ slp: {
+ inherit: true,
+ onStart(target, source, sourceEffect) {
+ if (sourceEffect && sourceEffect.effectType === 'Ability') {
+ this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
+ } else if (sourceEffect && sourceEffect.effectType === 'Move') {
+ this.add('-status', target, 'slp', `[from] move: ${sourceEffect.name}`);
+ } else {
+ this.add('-status', target, 'slp');
+ }
+
+ // 1/3 chance for a Pokemon to wake up on turn 2
+ this.effectState.startTime = this.sample([2, 3, 3]);
+ this.effectState.time = this.effectState.startTime;
+
+ if (target.removeVolatile('nightmare')) {
+ this.add('-end', target, 'Nightmare', '[silent]');
+ }
+ },
+ },
+ frz: {
+ inherit: true,
+ onStart(target, source, sourceEffect) {
+ if (sourceEffect && sourceEffect.effectType === 'Ability') {
+ this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, `[of] ${source}`);
+ } else {
+ this.add('-status', target, 'frz');
+ }
+ if (target.species.name === 'Shaymin-Sky' && target.baseSpecies.baseSpecies === 'Shaymin') {
+ target.formeChange('Shaymin', this.effect, true);
+ }
+
+ this.effectState.startTime = 3;
+ this.effectState.time = this.effectState.startTime;
+ },
+ onBeforeMove(pokemon, target, move) {
+ if (move.flags['defrost'] && !(move.id === 'burnup' && !pokemon.hasType('Fire'))) return;
+ pokemon.statusState.time--;
+ if (pokemon.statusState.time <= 0 || this.randomChance(1, 4)) {
+ pokemon.cureStatus();
+ return;
+ }
+ this.add('cant', pokemon, 'frz');
+ return false;
+ },
+ },
+};
diff --git a/data/mods/champions/formats-data.ts b/data/mods/champions/formats-data.ts
new file mode 100644
index 0000000000..b94817cdd0
--- /dev/null
+++ b/data/mods/champions/formats-data.ts
@@ -0,0 +1,5039 @@
+export const FormatsData: import('../../../sim/dex-species').ModdedSpeciesFormatsDataTable = {
+ bulbasaur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ivysaur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ venusaur: {
+ tier: "OU",
+ },
+ venusaurmega: {
+ tier: "OU",
+ },
+ venusaurgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charmander: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charmeleon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charizard: {
+ tier: "OU",
+ },
+ charizardmegax: {
+ tier: "OU",
+ },
+ charizardmegay: {
+ tier: "OU",
+ },
+ charizardgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ squirtle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wartortle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blastoise: {
+ tier: "OU",
+ },
+ blastoisemega: {
+ tier: "OU",
+ },
+ blastoisegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ caterpie: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ metapod: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ butterfree: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ butterfreegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ weedle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kakuna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ beedrill: {
+ tier: "OU",
+ },
+ beedrillmega: {
+ tier: "OU",
+ },
+ pidgey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pidgeotto: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pidgeot: {
+ tier: "OU",
+ },
+ pidgeotmega: {
+ tier: "OU",
+ },
+ rattata: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rattataalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raticate: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raticatealola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raticatealolatotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spearow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fearow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ekans: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arbok: {
+ tier: "OU",
+ },
+ pichu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pichuspikyeared: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachu: {
+ tier: "NFE",
+ },
+ pikachucosplay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachurockstar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachubelle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachupopstar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachuphd: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachulibre: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachuoriginal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachuhoenn: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachusinnoh: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachuunova: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachukalos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachualola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachupartner: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachustarter: {
+ isNonstandard: "LGPE",
+ tier: "Illegal",
+ },
+ pikachugmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pikachuworld: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raichu: {
+ tier: "OU",
+ },
+ raichualola: {
+ tier: "OU",
+ },
+ raichumegax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raichumegay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandshrew: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandshrewalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandslash: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandslashalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidoranf: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidorina: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidoqueen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidoranm: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidorino: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nidoking: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cleffa: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ clefairy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ clefable: {
+ tier: "OU",
+ },
+ clefablemega: {
+ tier: "OU",
+ },
+ vulpix: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vulpixalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ninetales: {
+ tier: "OU",
+ },
+ ninetalesalola: {
+ tier: "OU",
+ },
+ igglybuff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jigglypuff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wigglytuff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zubat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golbat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crobat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oddish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gloom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vileplume: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bellossom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ paras: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ parasect: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ venonat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ venomoth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ diglett: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ diglettalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dugtrio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dugtrioalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowthalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowthgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowthgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ persian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ persianalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ perrserker: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ psyduck: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golduck: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mankey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ primeape: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ growlithe: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ growlithehisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arcanine: {
+ tier: "OU",
+ },
+ arcaninehisui: {
+ tier: "OU",
+ },
+ poliwag: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ poliwhirl: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ poliwrath: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ politoed: {
+ tier: "OU",
+ },
+ abra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kadabra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ alakazam: {
+ tier: "OU",
+ },
+ alakazammega: {
+ tier: "OU",
+ },
+ machop: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ machoke: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ machamp: {
+ tier: "OU",
+ },
+ machampgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bellsprout: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ weepinbell: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ victreebel: {
+ tier: "OU",
+ },
+ victreebelmega: {
+ tier: "OU",
+ },
+ tentacool: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tentacruel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ geodude: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ geodudealola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ graveler: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ graveleralola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golemalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ponyta: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ponytagalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rapidash: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rapidashgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slowpoke: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slowpokegalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slowbro: {
+ tier: "OU",
+ },
+ slowbromega: {
+ tier: "OU",
+ },
+ slowbrogalar: {
+ tier: "OU",
+ },
+ slowking: {
+ tier: "OU",
+ },
+ slowkinggalar: {
+ tier: "OU",
+ },
+ magnemite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magneton: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magnezone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ farfetchd: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ farfetchdgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sirfetchd: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ doduo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dodrio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dewgong: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grimer: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grimeralola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ muk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mukalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shellder: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cloyster: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gastly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ haunter: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gengar: {
+ tier: "OU",
+ },
+ gengarmega: {
+ tier: "OU",
+ },
+ gengargmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ onix: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ steelix: {
+ tier: "OU",
+ },
+ steelixmega: {
+ tier: "OU",
+ },
+ drowzee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hypno: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ krabby: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kingler: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kinglergmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ voltorb: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ voltorbhisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ electrode: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ electrodehisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ exeggcute: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ exeggutor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ exeggutoralola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cubone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ marowak: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ marowakalola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ marowakalolatotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tyrogue: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hitmonlee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hitmonchan: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hitmontop: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lickitung: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lickilicky: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ koffing: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ weezing: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ weezinggalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rhyhorn: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rhydon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rhyperior: {
+ tier: "OU",
+ },
+ happiny: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chansey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blissey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tangela: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tangrowth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kangaskhan: {
+ tier: "OU",
+ },
+ kangaskhanmega: {
+ tier: "OU",
+ },
+ horsea: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seadra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kingdra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ goldeen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seaking: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ staryu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ starmie: {
+ tier: "OU",
+ },
+ starmiemega: {
+ tier: "OU",
+ },
+ mimejr: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mrmime: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mrmimegalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mrrime: {
+ tier: "OU",
+ },
+ scyther: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scizor: {
+ tier: "OU",
+ },
+ scizormega: {
+ tier: "OU",
+ },
+ kleavor: {
+ tier: "OU",
+ },
+ smoochum: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jynx: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ elekid: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ electabuzz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ electivire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magby: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magmar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magmortar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pinsir: {
+ tier: "OU",
+ },
+ pinsirmega: {
+ tier: "OU",
+ },
+ tauros: {
+ tier: "OU",
+ },
+ taurospaldeacombat: {
+ tier: "OU",
+ },
+ taurospaldeablaze: {
+ tier: "OU",
+ },
+ taurospaldeaaqua: {
+ tier: "OU",
+ },
+ magikarp: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gyarados: {
+ tier: "OU",
+ },
+ gyaradosmega: {
+ tier: "OU",
+ },
+ lapras: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ laprasgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ditto: {
+ tier: "OU",
+ },
+ eevee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eeveestarter: {
+ isNonstandard: "LGPE",
+ tier: "Illegal",
+ },
+ eeveegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vaporeon: {
+ tier: "OU",
+ },
+ jolteon: {
+ tier: "OU",
+ },
+ flareon: {
+ tier: "OU",
+ },
+ espeon: {
+ tier: "OU",
+ },
+ umbreon: {
+ tier: "OU",
+ },
+ leafeon: {
+ tier: "OU",
+ },
+ glaceon: {
+ tier: "OU",
+ },
+ sylveon: {
+ tier: "OU",
+ },
+ porygon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ porygon2: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ porygonz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ omanyte: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ omastar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kabuto: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kabutops: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aerodactyl: {
+ tier: "OU",
+ },
+ aerodactylmega: {
+ tier: "OU",
+ },
+ munchlax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snorlax: {
+ tier: "OU",
+ },
+ snorlaxgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ articuno: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ articunogalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zapdos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zapdosgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ moltres: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ moltresgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dratini: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dragonair: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dragonite: {
+ tier: "OU",
+ },
+ dragonitemega: {
+ tier: "OU",
+ },
+ mewtwo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mewtwomegax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mewtwomegay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mew: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chikorita: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bayleef: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meganium: {
+ tier: "OU",
+ },
+ meganiummega: {
+ tier: "OU",
+ },
+ cyndaquil: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ quilava: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ typhlosion: {
+ tier: "OU",
+ },
+ typhlosionhisui: {
+ tier: "OU",
+ },
+ totodile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ croconaw: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ feraligatr: {
+ tier: "OU",
+ },
+ feraligatrmega: {
+ tier: "OU",
+ },
+ sentret: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ furret: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hoothoot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ noctowl: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ledyba: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ledian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spinarak: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ariados: {
+ tier: "OU",
+ },
+ chinchou: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lanturn: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ togepi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ togetic: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ togekiss: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ natu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ xatu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mareep: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ flaaffy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ampharos: {
+ tier: "OU",
+ },
+ ampharosmega: {
+ tier: "OU",
+ },
+ azurill: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ marill: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ azumarill: {
+ tier: "OU",
+ },
+ bonsly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sudowoodo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hoppip: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skiploom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jumpluff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aipom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ambipom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sunkern: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sunflora: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ yanma: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ yanmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wooper: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wooperpaldea: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ quagsire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ murkrow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ honchkrow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ misdreavus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mismagius: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ unown: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wynaut: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wobbuffet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ girafarig: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ farigiraf: {
+ tier: "OU",
+ },
+ pineco: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ forretress: {
+ tier: "OU",
+ },
+ dunsparce: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dudunsparce: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gligar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gliscor: {
+ tier: "OU",
+ },
+ snubbull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ granbull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ qwilfish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ qwilfishhisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ overqwil: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shuckle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ heracross: {
+ tier: "OU",
+ },
+ heracrossmega: {
+ tier: "OU",
+ },
+ sneasel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sneaselhisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ weavile: {
+ tier: "OU",
+ },
+ sneasler: {
+ tier: "OU",
+ },
+ teddiursa: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ursaring: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ursaluna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ursalunabloodmoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slugma: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magcargo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swinub: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ piloswine: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mamoswine: {
+ tier: "OU",
+ },
+ corsola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ corsolagalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cursola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ remoraid: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ octillery: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ delibird: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mantyke: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mantine: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skarmory: {
+ tier: "OU",
+ },
+ skarmorymega: {
+ tier: "OU",
+ },
+ houndour: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ houndoom: {
+ tier: "OU",
+ },
+ houndoommega: {
+ tier: "OU",
+ },
+ phanpy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ donphan: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stantler: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wyrdeer: {
+ tier: "OU",
+ },
+ smeargle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ miltank: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raikou: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ entei: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ suicune: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ larvitar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pupitar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tyranitar: {
+ tier: "OU",
+ },
+ tyranitarmega: {
+ tier: "OU",
+ },
+ lugia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hooh: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ celebi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ treecko: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grovyle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sceptile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sceptilemega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ torchic: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ combusken: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blaziken: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blazikenmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mudkip: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ marshtomp: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swampert: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swampertmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ poochyena: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mightyena: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zigzagoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zigzagoongalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ linoone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ linoonegalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ obstagoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wurmple: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silcoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ beautifly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cascoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dustox: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lotad: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lombre: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ludicolo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seedot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nuzleaf: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shiftry: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ taillow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swellow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wingull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pelipper: {
+ tier: "OU",
+ },
+ ralts: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kirlia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gardevoir: {
+ tier: "OU",
+ },
+ gardevoirmega: {
+ tier: "OU",
+ },
+ gallade: {
+ tier: "OU",
+ },
+ gallademega: {
+ tier: "OU",
+ },
+ surskit: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ masquerain: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shroomish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ breloom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slakoth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vigoroth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slaking: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nincada: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ninjask: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shedinja: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ whismur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ loudred: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ exploud: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ makuhita: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hariyama: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nosepass: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ probopass: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skitty: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ delcatty: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sableye: {
+ tier: "OU",
+ },
+ sableyemega: {
+ tier: "OU",
+ },
+ mawile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mawilemega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aron: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lairon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aggron: {
+ tier: "OU",
+ },
+ aggronmega: {
+ tier: "OU",
+ },
+ meditite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ medicham: {
+ tier: "OU",
+ },
+ medichammega: {
+ tier: "OU",
+ },
+ electrike: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ manectric: {
+ tier: "OU",
+ },
+ manectricmega: {
+ tier: "OU",
+ },
+ plusle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ minun: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ volbeat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ illumise: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ budew: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ roselia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ roserade: {
+ tier: "OU",
+ },
+ gulpin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swalot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ carvanha: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sharpedo: {
+ tier: "OU",
+ },
+ sharpedomega: {
+ tier: "OU",
+ },
+ wailmer: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wailord: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ numel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ camerupt: {
+ tier: "OU",
+ },
+ cameruptmega: {
+ tier: "OU",
+ },
+ torkoal: {
+ tier: "OU",
+ },
+ spoink: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grumpig: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spinda: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ trapinch: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vibrava: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ flygon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cacnea: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cacturne: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swablu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ altaria: {
+ tier: "OU",
+ },
+ altariamega: {
+ tier: "OU",
+ },
+ zangoose: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seviper: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lunatone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ solrock: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ barboach: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ whiscash: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ corphish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crawdaunt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ baltoy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ claydol: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lileep: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cradily: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ anorith: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ armaldo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ feebas: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ milotic: {
+ tier: "OU",
+ },
+ castform: {
+ tier: "OU",
+ },
+ castformsunny: {
+ isNonstandard: "Past",
+ },
+ castformrainy: {
+ isNonstandard: "Past",
+ },
+ castformsnowy: {
+ isNonstandard: "Past",
+ },
+ kecleon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shuppet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ banette: {
+ tier: "OU",
+ },
+ banettemega: {
+ tier: "OU",
+ },
+ duskull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dusclops: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dusknoir: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tropius: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chingling: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chimecho: {
+ tier: "OU",
+ },
+ chimechomega: {
+ tier: "OU",
+ },
+ absol: {
+ tier: "OU",
+ },
+ absolmega: {
+ tier: "OU",
+ },
+ absolmegaz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snorunt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ glalie: {
+ tier: "OU",
+ },
+ glaliemega: {
+ tier: "OU",
+ },
+ froslass: {
+ tier: "OU",
+ },
+ froslassmega: {
+ tier: "OU",
+ },
+ spheal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sealeo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ walrein: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ clamperl: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ huntail: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gorebyss: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ relicanth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ luvdisc: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bagon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shelgon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ salamence: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ salamencemega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ beldum: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ metang: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ metagross: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ metagrossmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ regirock: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ regice: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ registeel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ latias: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ latiasmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ latios: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ latiosmega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kyogre: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kyogreprimal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ groudon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ groudonprimal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rayquaza: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rayquazamega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jirachi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ deoxys: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ deoxysattack: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ deoxysdefense: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ deoxysspeed: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ turtwig: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grotle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ torterra: {
+ tier: "OU",
+ },
+ chimchar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ monferno: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ infernape: {
+ tier: "OU",
+ },
+ piplup: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ prinplup: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ empoleon: {
+ tier: "OU",
+ },
+ starly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ staravia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ staraptor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ staraptormega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ bidoof: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bibarel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kricketot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kricketune: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shinx: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ luxio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ luxray: {
+ tier: "OU",
+ },
+ cranidos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rampardos: {
+ tier: "OU",
+ },
+ shieldon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bastiodon: {
+ tier: "OU",
+ },
+ burmy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wormadam: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wormadamsandy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wormadamtrash: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mothim: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ combee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vespiquen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pachirisu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ buizel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ floatzel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cherubi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cherrim: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cherrimsunshine: {
+ isNonstandard: "Past",
+ },
+ shellos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gastrodon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drifloon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drifblim: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ buneary: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lopunny: {
+ tier: "OU",
+ },
+ lopunnymega: {
+ tier: "OU",
+ },
+ glameow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ purugly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stunky: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skuntank: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bronzor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bronzong: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chatot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spiritomb: {
+ tier: "OU",
+ },
+ gible: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gabite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ garchomp: {
+ tier: "OU",
+ },
+ garchompmega: {
+ tier: "OU",
+ },
+ garchompmegaz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ riolu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lucario: {
+ tier: "OU",
+ },
+ lucariomega: {
+ tier: "OU",
+ },
+ lucariomegaz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hippopotas: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hippowdon: {
+ tier: "OU",
+ },
+ skorupi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drapion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ croagunk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxicroak: {
+ tier: "OU",
+ },
+ carnivine: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ finneon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lumineon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snover: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ abomasnow: {
+ tier: "OU",
+ },
+ abomasnowmega: {
+ tier: "OU",
+ },
+ rotom: {
+ tier: "OU",
+ },
+ rotomheat: {
+ tier: "OU",
+ },
+ rotomwash: {
+ tier: "OU",
+ },
+ rotomfrost: {
+ tier: "OU",
+ },
+ rotomfan: {
+ tier: "OU",
+ },
+ rotommow: {
+ tier: "OU",
+ },
+ uxie: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mesprit: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ azelf: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dialga: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dialgaorigin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ palkia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ palkiaorigin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ heatran: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ heatranmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ regigigas: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ giratina: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ giratinaorigin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cresselia: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ phione: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ manaphy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darkrai: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darkraimega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ shaymin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shayminsky: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arceus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ victini: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snivy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ servine: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ serperior: {
+ tier: "OU",
+ },
+ tepig: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pignite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ emboar: {
+ tier: "OU",
+ },
+ emboarmega: {
+ tier: "OU",
+ },
+ oshawott: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dewott: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ samurott: {
+ tier: "OU",
+ },
+ samurotthisui: {
+ tier: "OU",
+ },
+ patrat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ watchog: {
+ tier: "OU",
+ },
+ lillipup: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ herdier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stoutland: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ purrloin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ liepard: {
+ tier: "OU",
+ },
+ pansage: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ simisage: {
+ tier: "OU",
+ },
+ pansear: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ simisear: {
+ tier: "OU",
+ },
+ panpour: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ simipour: {
+ tier: "OU",
+ },
+ munna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ musharna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pidove: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tranquill: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ unfezant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blitzle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zebstrika: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ roggenrola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ boldore: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gigalith: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ woobat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swoobat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drilbur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ excadrill: {
+ tier: "OU",
+ },
+ excadrillmega: {
+ tier: "OU",
+ },
+ audino: {
+ tier: "OU",
+ },
+ audinomega: {
+ tier: "OU",
+ },
+ timburr: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gurdurr: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ conkeldurr: {
+ tier: "OU",
+ },
+ tympole: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ palpitoad: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ seismitoad: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ throh: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sawk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sewaddle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swadloon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ leavanny: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ venipede: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ whirlipede: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scolipede: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scolipedemega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ cottonee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ whimsicott: {
+ tier: "OU",
+ },
+ petilil: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lilligant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lilliganthisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ basculin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ basculegion: {
+ tier: "OU",
+ },
+ basculegionf: {
+ tier: "OU",
+ },
+ sandile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ krokorok: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ krookodile: {
+ tier: "OU",
+ },
+ darumaka: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darumakagalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darmanitan: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darmanitanzen: {
+ isNonstandard: "Past",
+ },
+ darmanitangalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ darmanitangalarzen: {
+ isNonstandard: "Past",
+ },
+ maractus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dwebble: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crustle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scraggy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scrafty: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scraftymega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ sigilyph: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ yamask: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ yamaskgalar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cofagrigus: {
+ tier: "OU",
+ },
+ runerigus: {
+ tier: "OU",
+ },
+ tirtouga: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ carracosta: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ archen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ archeops: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ trubbish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ garbodor: {
+ tier: "OU",
+ },
+ garbodorgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zorua: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zoruahisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zoroark: {
+ tier: "OU",
+ },
+ zoroarkhisui: {
+ tier: "OU",
+ },
+ minccino: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cinccino: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gothita: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gothorita: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gothitelle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ solosis: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ duosion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ reuniclus: {
+ tier: "OU",
+ },
+ ducklett: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ swanna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vanillite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vanillish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vanilluxe: {
+ tier: "OU",
+ },
+ deerling: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sawsbuck: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ emolga: {
+ tier: "OU",
+ },
+ karrablast: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ escavalier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ foongus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ amoonguss: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ frillish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jellicent: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ alomomola: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ joltik: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ galvantula: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ferroseed: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ferrothorn: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ klink: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ klang: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ klinklang: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tynamo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eelektrik: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eelektross: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eelektrossmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ elgyem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ beheeyem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ litwick: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lampent: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chandelure: {
+ tier: "OU",
+ },
+ chandeluremega: {
+ tier: "OU",
+ },
+ axew: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fraxure: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ haxorus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cubchoo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ beartic: {
+ tier: "OU",
+ },
+ cryogonal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shelmet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ accelgor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stunfisk: {
+ tier: "OU",
+ },
+ stunfiskgalar: {
+ tier: "OU",
+ },
+ mienfoo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mienshao: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ druddigon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golett: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golurk: {
+ tier: "OU",
+ },
+ golurkmega: {
+ tier: "OU",
+ },
+ pawniard: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bisharp: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bouffalant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rufflet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ braviary: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ braviaryhisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vullaby: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mandibuzz: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ heatmor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ durant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ deino: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zweilous: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hydreigon: {
+ tier: "OU",
+ },
+ larvesta: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ volcarona: {
+ tier: "OU",
+ },
+ cobalion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ terrakion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ virizion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tornadus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tornadustherian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ thundurus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ thundurustherian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ reshiram: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zekrom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ landorus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ landorustherian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kyurem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kyuremblack: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kyuremwhite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ keldeo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meloetta: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ genesect: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ genesectburn: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ genesectchill: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ genesectdouse: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ genesectshock: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chespin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ quilladin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chesnaught: {
+ tier: "OU",
+ },
+ chesnaughtmega: {
+ tier: "OU",
+ },
+ fennekin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ braixen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ delphox: {
+ tier: "OU",
+ },
+ delphoxmega: {
+ tier: "OU",
+ },
+ froakie: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ frogadier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greninja: {
+ tier: "OU",
+ },
+ greninjaash: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greninjabond: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greninjamega: {
+ tier: "OU",
+ },
+ bunnelby: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ diggersby: {
+ tier: "OU",
+ },
+ fletchling: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fletchinder: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ talonflame: {
+ tier: "OU",
+ },
+ scatterbug: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spewpa: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vivillon: {
+ tier: "OU",
+ },
+ litleo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pyroar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pyroarmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ flabebe: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ floette: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ floetteeternal: {
+ tier: "OU",
+ },
+ floettemega: {
+ tier: "OU",
+ },
+ florges: {
+ tier: "OU",
+ },
+ skiddo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gogoat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pancham: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pangoro: {
+ tier: "OU",
+ },
+ furfrou: {
+ tier: "OU",
+ },
+ espurr: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowstic: {
+ tier: "OU",
+ },
+ meowsticmmega: {
+ tier: "OU",
+ },
+ meowsticfmega: {
+ tier: "OU",
+ },
+ honedge: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ doublade: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aegislash: {
+ tier: "OU",
+ },
+ aegislashblade: {
+ isNonstandard: "Past",
+ },
+ spritzee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aromatisse: {
+ tier: "OU",
+ },
+ swirlix: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slurpuff: {
+ tier: "OU",
+ },
+ inkay: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ malamar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ malamarmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ binacle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ barbaracle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ barbaraclemega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ skrelp: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dragalge: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dragalgemega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ clauncher: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ clawitzer: {
+ tier: "OU",
+ },
+ helioptile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ heliolisk: {
+ tier: "OU",
+ },
+ tyrunt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tyrantrum: {
+ tier: "OU",
+ },
+ amaura: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ aurorus: {
+ tier: "OU",
+ },
+ hawlucha: {
+ tier: "OU",
+ },
+ hawluchamega: {
+ tier: "OU",
+ },
+ dedenne: {
+ tier: "OU",
+ },
+ carbink: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ goomy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sliggoo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sliggoohisui: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ goodra: {
+ tier: "OU",
+ },
+ goodrahisui: {
+ tier: "OU",
+ },
+ klefki: {
+ tier: "OU",
+ },
+ phantump: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ trevenant: {
+ tier: "OU",
+ },
+ pumpkaboo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pumpkaboosmall: {
+ isNonstandard: "Past",
+ },
+ pumpkaboolarge: {
+ isNonstandard: "Past",
+ },
+ pumpkaboosuper: {
+ isNonstandard: "Past",
+ },
+ gourgeist: {
+ tier: "OU",
+ },
+ gourgeistsmall: {
+ tier: "OU",
+ },
+ gourgeistlarge: {
+ tier: "OU",
+ },
+ gourgeistsuper: {
+ tier: "OU",
+ },
+ bergmite: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ avalugg: {
+ tier: "OU",
+ },
+ avalugghisui: {
+ tier: "OU",
+ },
+ noibat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ noivern: {
+ tier: "OU",
+ },
+ xerneas: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ xerneasneutral: {
+ isNonstandard: "Custom", // can't be used in battle
+ tier: "Illegal",
+ },
+ yveltal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zygarde: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zygarde10: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zygardecomplete: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zygardemega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ diancie: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dianciemega: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hoopa: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hoopaunbound: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ volcanion: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rowlet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dartrix: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ decidueye: {
+ tier: "OU",
+ },
+ decidueyehisui: {
+ tier: "OU",
+ },
+ litten: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ torracat: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ incineroar: {
+ tier: "OU",
+ },
+ popplio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ brionne: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ primarina: {
+ tier: "OU",
+ },
+ pikipek: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ trumbeak: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toucannon: {
+ tier: "OU",
+ },
+ yungoos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gumshoos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gumshoostotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grubbin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ charjabug: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vikavolt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ vikavolttotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crabrawler: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crabominable: {
+ tier: "OU",
+ },
+ crabominablemega: {
+ tier: "OU",
+ },
+ oricorio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oricoriopompom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oricoriopau: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oricoriosensu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cutiefly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ribombee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ribombeetotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rockruff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rockruffdusk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lycanroc: {
+ tier: "OU",
+ },
+ lycanrocmidnight: {
+ tier: "OU",
+ },
+ lycanrocdusk: {
+ tier: "OU",
+ },
+ wishiwashi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wishiwashischool: {
+ isNonstandard: "Past",
+ },
+ mareanie: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxapex: {
+ tier: "OU",
+ },
+ mudbray: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mudsdale: {
+ tier: "OU",
+ },
+ dewpider: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ araquanid: {
+ tier: "OU",
+ },
+ araquanidtotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fomantis: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lurantis: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lurantistotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ morelull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ shiinotic: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ salandit: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ salazzle: {
+ tier: "OU",
+ },
+ salazzletotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stufful: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bewear: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bounsweet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ steenee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tsareena: {
+ tier: "OU",
+ },
+ comfey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oranguru: {
+ tier: "OU",
+ },
+ passimian: {
+ tier: "OU",
+ },
+ wimpod: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golisopod: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ golisopodmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ sandygast: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ palossand: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pyukumuku: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ typenull: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvally: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallybug: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallydark: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallydragon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyelectric: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyfairy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyfighting: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyfire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyflying: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyghost: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallygrass: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyground: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyice: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallypoison: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallypsychic: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallyrock: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallysteel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silvallywater: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ minior: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ komala: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ turtonator: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ togedemaru: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ togedemarutotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mimikyu: {
+ tier: "OU",
+ },
+ mimikyutotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mimikyubustedtotem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bruxish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drampa: {
+ tier: "OU",
+ },
+ drampamega: {
+ tier: "OU",
+ },
+ dhelmise: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ jangmoo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hakamoo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kommoo: {
+ tier: "OU",
+ },
+ kommoototem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tapukoko: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tapulele: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tapubulu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tapufini: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cosmog: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cosmoem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ solgaleo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lunala: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nihilego: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ buzzwole: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pheromosa: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ xurkitree: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ celesteela: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kartana: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ guzzlord: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ necrozma: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ necrozmaduskmane: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ necrozmadawnwings: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ necrozmaultra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magearna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ magearnamega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ magearnaoriginalmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ marshadow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ poipole: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ naganadel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stakataka: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blacephalon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zeraora: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zeraoramega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ meltan: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ melmetal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ melmetalgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grookey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ thwackey: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rillaboom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rillaboomgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scorbunny: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ raboot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cinderace: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cinderacegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sobble: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drizzile: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ inteleon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ inteleongmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skwovet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greedent: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rookidee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ corvisquire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ corviknight: {
+ tier: "OU",
+ },
+ corviknightgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ blipbug: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dottler: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ orbeetle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ orbeetlegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nickit: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ thievul: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gossifleur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eldegoss: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wooloo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dubwool: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chewtle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drednaw: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drednawgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ yamper: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ boltund: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rolycoly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ carkol: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ coalossal: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ coalossalgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ applin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ flapple: {
+ tier: "OU",
+ },
+ flapplegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ appletun: {
+ tier: "OU",
+ },
+ appletungmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dipplin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ silicobra: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandaconda: {
+ tier: "OU",
+ },
+ sandacondagmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cramorant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arrokuda: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ barraskewda: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxtricity: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxtricitygmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toxtricitylowkeygmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sizzlipede: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ centiskorch: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ centiskorchgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ clobbopus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grapploct: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sinistea: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ polteageist: {
+ tier: "OU",
+ },
+ hatenna: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hattrem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ hatterene: {
+ tier: "OU",
+ },
+ hatterenegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ impidimp: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ morgrem: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grimmsnarl: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grimmsnarlgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ milcery: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ alcremie: {
+ tier: "OU",
+ },
+ alcremiegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ falinks: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ falinksmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ pincurchin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ snom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ frosmoth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ stonjourner: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eiscue: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ indeedee: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ indeedeef: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ morpeko: {
+ tier: "OU",
+ },
+ cufant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ copperajah: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ copperajahgmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dracozolt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arctozolt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dracovish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arctovish: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ duraludon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ duraludongmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dreepy: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ drakloak: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dragapult: {
+ tier: "OU",
+ },
+ zacian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zaciancrowned: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zamazenta: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zamazentacrowned: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eternatus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ eternatuseternamax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kubfu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ urshifu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ urshifurapidstrike: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ urshifugmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ urshifurapidstrikegmax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ zarude: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ regieleki: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ regidrago: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ glastrier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spectrier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ calyrex: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ calyrexice: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ calyrexshadow: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ enamorus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ enamorustherian: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sprigatito: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ floragato: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ meowscarada: {
+ tier: "OU",
+ },
+ fuecoco: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ crocalor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ skeledirge: {
+ tier: "OU",
+ },
+ quaxly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ quaxwell: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ quaquaval: {
+ tier: "OU",
+ },
+ lechonk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oinkologne: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ oinkolognef: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tarountula: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ spidops: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nymble: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ lokix: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rellor: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ rabsca: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greavard: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ houndstone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ flittle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ espathra: {
+ tier: "OU",
+ },
+ wiglett: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wugtrio: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dondozo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ veluza: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ finizen: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ palafin: {
+ tier: "OU",
+ },
+ smoliv: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dolliv: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arboliva: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ capsakid: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ scovillain: {
+ tier: "OU",
+ },
+ scovillainmega: {
+ tier: "OU",
+ },
+ tadbulb: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bellibolt: {
+ tier: "OU",
+ },
+ varoom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ revavroom: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ orthworm: {
+ tier: "OU",
+ },
+ tandemaus: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ maushold: {
+ tier: "OU",
+ },
+ cetoddle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ cetitan: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ frigibax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ arctibax: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ baxcalibur: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ baxcaliburmega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ tatsugiri: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tatsugiricurlymega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ tatsugiridroopymega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ tatsugiristretchymega: {
+ isNonstandard: "Future",
+ tier: "Illegal",
+ },
+ cyclizar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pawmi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pawmo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pawmot: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wattrel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kilowattrel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bombirdier: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ squawkabilly: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ flamigo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ klawf: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ nacli: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ naclstack: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ garganacl: {
+ tier: "OU",
+ },
+ glimmet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ glimmora: {
+ tier: "OU",
+ },
+ glimmoramega: {
+ tier: "OU",
+ },
+ shroodle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ grafaiai: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fidough: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ dachsbun: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ maschiff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ mabosstiff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ bramblin: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ brambleghast: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gimmighoul: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gimmighoulroaming: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ gholdengo: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ greattusk: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ brutebonnet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sandyshocks: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ screamtail: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fluttermane: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ slitherwing: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ roaringmoon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ irontreads: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironmoth: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironhands: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironjugulis: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironthorns: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironbundle: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironvaliant: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tinglu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chienpao: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ wochien: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ chiyu: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ koraidon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ miraidon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tinkatink: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tinkatuff: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ tinkaton: {
+ tier: "OU",
+ },
+ charcadet: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ armarouge: {
+ tier: "OU",
+ },
+ ceruledge: {
+ tier: "OU",
+ },
+ toedscool: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ toedscruel: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ kingambit: {
+ tier: "OU",
+ },
+ clodsire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ annihilape: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ walkingwake: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironleaves: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ poltchageist: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ sinistcha: {
+ tier: "OU",
+ },
+ okidogi: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ munkidori: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ fezandipiti: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ogerpon: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ogerponwellspring: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ogerponhearthflame: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ogerponcornerstone: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ archaludon: {
+ tier: "OU",
+ },
+ hydrapple: {
+ tier: "OU",
+ },
+ gougingfire: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ragingbolt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironboulder: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ ironcrown: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ terapagos: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ terapagosstellar: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+ pecharunt: {
+ isNonstandard: "Past",
+ tier: "Illegal",
+ },
+};
diff --git a/data/mods/champions/items.ts b/data/mods/champions/items.ts
new file mode 100644
index 0000000000..5d682a80a1
--- /dev/null
+++ b/data/mods/champions/items.ts
@@ -0,0 +1,1041 @@
+export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
+ abilityshield: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ abomasite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ absolite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ absorbbulb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ adamantcrystal: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ adamantorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ adrenalineorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ aerodactylite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ aggronite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ aguavberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ airballoon: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ alakazite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ ampharosite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ apicotberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ assaultvest: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ audinite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ auspiciousarmor: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ banettite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ beastball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ beedrillite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ berrysweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bignugget: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bigroot: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bindingband: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ blacksludge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ blastoisinite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ blunderpolicy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ boosterenergy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bottlecap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ cameruptite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ cellbattery: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ chandelurite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ charizarditex: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ charizarditey: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ chesnaughtite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ chimechite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ chippedpot: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ choiceband: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ choicespecs: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ clearamulet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ clefablite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ cloversweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ cornerstonemask: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ covertcloak: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ crabominite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ crackedpot: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ custapberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ damprock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ darkranite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dawnstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ delphoxite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ destinyknot: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ diveball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dracoplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dragalgite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dragoninite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ dragonscale: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ drampanite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ dreadplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dreamball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dubiousdisc: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ duskball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ duskstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ earthplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ eelektrossite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ejectbutton: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ejectpack: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ electirizer: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ emboarite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ enigmaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ eviolite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ excadrite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ expertbelt: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ falinksite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fastball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ feraligite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ figyberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ firestone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fistplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ flameorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ flameplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ floatstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ floettite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ flowersweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ friendball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ froslassite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ galaricacuff: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ galaricawreath: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ galladite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ ganlonberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ garchompite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ gardevoirite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ gengarite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ glalitite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ glimmoranite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ goldbottlecap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ golisopite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ golurkite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ grassyseed: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ greatball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ greninjite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ grepaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ gripclaw: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ griseouscore: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ griseousorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ gyaradosite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ hawluchanite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ healball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ hearthflamemask: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heatranite: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heatrock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heavyball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heavydutyboots: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heracronite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ hondewberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ houndoominite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ iapapaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ icestone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ icicleplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ icyrock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ insectplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ironball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ironplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ jabocaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ kangaskhanite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ keeberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ kelpsyberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ laggingtail: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lansatberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ leafstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ levelball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ liechiberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lifeorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lightclay: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ loadeddice: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lopunnite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ loveball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lovesweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lucarionite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ luminousmoss: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lureball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lustrousglobe: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lustrousorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ luxuryball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ magmarizer: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ magoberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ maliciousarmor: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ manectite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ marangaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ masterball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ masterpieceteacup: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ meadowplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ medichamite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ meganiumite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ meowsticite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ metalalloy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ metronome: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ micleberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mindplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mirrorherb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mistyseed: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ moonball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ moonstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ muscleband: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ nestball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ netball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ovalstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ parkball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ petayaberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ pidgeotite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ pinsirite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ pixieplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ pokeball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ pomegberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ poweranklet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerband: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerbelt: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerbracer: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerherb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerlens: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powerweight: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ premierball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ prettyfeather: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ prismscale: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ protectivepads: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ protector: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ psychicseed: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ punchingglove: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ qualotberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ quickball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rarebone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ razorclaw: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ razorfang: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ reapercloth: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ redcard: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ repeatball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ribbonsweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ringtarget: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rockyhelmet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ roomservice: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rowapberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rustedshield: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rustedsword: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sablenite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ safariball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ safetygoggles: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ salacberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ scizorite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ scovillainite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ sharpedonite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ shedshell: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ shinystone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ skarmorite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ skyplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ slowbronite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ smoothrock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ snowball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ souldew: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ spelltag: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ splashplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ spookyplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sportball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ starfberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ starminite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ starsweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ steelixite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ stickybarb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ stoneplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ strangeball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ strawberrysweet: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sunstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sweetapple: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ syrupyapple: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tamatoberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tartapple: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ terrainextender: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ throatspray: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ thunderstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ timerball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ toxicorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ toxicplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tyranitarite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ ultraball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ unremarkableteacup: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ upgrade: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ utilityumbrella: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ venusaurite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ victreebelite: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ waterstone: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ weaknesspolicy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wellspringmask: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ whiteherb: {
+ inherit: true,
+ onAnyAfterMove() {
+ // Desync: proceed from Parting Shot's point of view
+ this.queue.insertChoice({
+ choice: 'event',
+ event: 'WhiteHerb',
+ order: 99, // before switches
+ pokemon: this.effectState.target,
+ });
+ },
+ onWhiteHerb(pokemon) {
+ ((this.effect as any).onStart as (p: Pokemon) => void).call(this, this.effectState.target);
+ },
+ },
+ widelens: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wikiberry: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wiseglasses: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ zapplate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ zoomlens: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+};
diff --git a/data/mods/champions/learnsets.ts b/data/mods/champions/learnsets.ts
new file mode 100644
index 0000000000..ccea97a3df
--- /dev/null
+++ b/data/mods/champions/learnsets.ts
@@ -0,0 +1,13446 @@
+export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTable = {
+ venusaur: {
+ learnset: {
+ acidspray: ["9M"],
+ amnesia: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ ingrain: ["9M"],
+ knockoff: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ outrage: ["9M"],
+ petalblizzard: ["9M"],
+ petaldance: ["9M"],
+ poisonjab: ["9M"],
+ poisonpowder: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ roar: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeppowder: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetscent: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ terrainpulse: ["9M"],
+ toxic: ["9M"],
+ trailblaze: ["9M"],
+ venoshock: ["9M"],
+ weatherball: ["9M"],
+ worryseed: ["9M"],
+ },
+ },
+ charizard: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ ancientpower: ["9M"],
+ beatup: ["9M"],
+ bellydrum: ["9M"],
+ bite: ["9M"],
+ blastburn: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ inferno: ["9M"],
+ irontail: ["9M"],
+ megakick: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ temperflare: ["9M"],
+ thunderpunch: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ blastoise: {
+ learnset: {
+ aquajet: ["9M"],
+ aquaring: ["9M"],
+ aquatail: ["9M"],
+ aurasphere: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bulldoze: ["9M"],
+ brickbreak: ["9M"],
+ bodyslam: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ dragonpulse: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lifedew: ["9M"],
+ liquidation: ["9M"],
+ megakick: ["9M"],
+ mirrorcoat: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shellsmash: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ terrainpulse: ["9M"],
+ waterpulse: ["9M"],
+ waterspout: ["9M"],
+ waterfall: ["9M"],
+ wavecrash: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ beedrill: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ crosspoison: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ dualwingbeat: ["9M"],
+ electroweb: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fellstinger: ["9M"],
+ focusenergy: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ knockoff: ["9M"],
+ lunge: ["9M"],
+ payback: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ pollenpuff: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ screech: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stringshot: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ uturn: ["9M"],
+ venoshock: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ pidgeot: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ airslash: ["9M"],
+ attract: ["9M"],
+ bravebird: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ quickattack: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ whirlwind: ["9M"],
+ },
+ },
+ arbok: {
+ learnset: {
+ acidspray: ["9M"],
+ beatup: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ coil: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ gastroacid: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ glare: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ hyperbeam: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ leechlife: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ poisonfang: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spitup: ["9M"],
+ spite: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swallow: ["9M"],
+ switcheroo: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ venoshock: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ pikachu: {
+ learnset: {
+ agility: ["9M"],
+ alluringvoice: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ doubleteam: ["9M"],
+ drainingkiss: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focuspunch: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ nuzzle: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ sweetkiss: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ voltswitch: ["9M"],
+ volttackle: ["9M"],
+ wildcharge: ["9M"],
+ wish: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ raichu: {
+ learnset: {
+ agility: ["9M"],
+ alluringvoice: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ doubleteam: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ nuzzle: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ sweetkiss: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ voltswitch: ["9M"],
+ volttackle: ["9M"],
+ wildcharge: ["9M"],
+ wish: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ raichualola: {
+ learnset: {
+ agility: ["9M"],
+ alluringvoice: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ calmmind: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ doubleteam: ["9M"],
+ drainingkiss: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ nuzzle: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ speedswap: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ sweetkiss: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ voltswitch: ["9M"],
+ volttackle: ["9M"],
+ wildcharge: ["9M"],
+ wish: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ clefable: {
+ learnset: {
+ afteryou: ["9M"],
+ airslash: ["9M"],
+ alluringvoice: ["9M"],
+ amnesia: ["9M"],
+ batonpass: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ cosmicpower: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ dualwingbeat: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ followme: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ healpulse: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ meteorbeam: ["9M"],
+ meteormash: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ moonlight: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ sing: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetkiss: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ wish: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ ninetales: {
+ learnset: {
+ agility: ["9M"],
+ attract: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bodyslam: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ doubleedge: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flail: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ healingwish: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ imprison: ["9M"],
+ inferno: ["9M"],
+ irontail: ["9M"],
+ memento: ["9M"],
+ mysticalfire: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ overheat: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psyshock: ["9M"],
+ quickattack: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tailslap: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ ninetalesalola: {
+ learnset: {
+ agility: ["9M"],
+ attract: ["9M"],
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ doubleedge: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ foulplay: ["9M"],
+ freezedry: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icebeam: ["9M"],
+ iceshard: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irontail: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ nastyplot: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ tailslap: ["9M"],
+ tripleaxel: ["9M"],
+ weatherball: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ arcanine: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ burnup: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ covet: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonpulse: ["9M"],
+ endure: ["9M"],
+ extremespeed: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ morningsun: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ ragingfury: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ thunderfang: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ arcaninehisui: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ burnup: ["9M"],
+ closecombat: ["9M"],
+ covet: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonpulse: ["9M"],
+ endure: ["9M"],
+ extremespeed: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ morningsun: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ ragingfury: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ smartstrike: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ thunderfang: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ alakazam: {
+ learnset: {
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ dazzlinggleam: ["9M"],
+ disable: ["9M"],
+ doubleteam: ["9M"],
+ drainpunch: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ guardsplit: ["9M"],
+ guardswap: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ imprison: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psychocut: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ speedswap: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ machamp: {
+ learnset: {
+ assurance: ["9M"],
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletpunch: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ crosschop: ["9M"],
+ crosspoison: ["9M"],
+ darkestlariat: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seismictoss: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ stormthrow: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ tickle: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ victreebel: {
+ learnset: {
+ acidspray: ["9M"],
+ bodyslam: ["9M"],
+ bugbite: ["9M"],
+ bulletseed: ["9M"],
+ clearsmog: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ gastroacid: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ hyperbeam: ["9M"],
+ ingrain: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ leechlife: ["9M"],
+ lunge: ["9M"],
+ poisonjab: ["9M"],
+ poisonpowder: ["9M"],
+ pounce: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeppowder: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spitup: ["9M"],
+ stockpile: ["9M"],
+ strengthsap: ["9M"],
+ stunspore: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swallow: ["9M"],
+ sweetscent: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ thief: ["9M"],
+ tickle: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ venoshock: ["9M"],
+ weatherball: ["9M"],
+ worryseed: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ slowbro: {
+ learnset: {
+ amnesia: ["9M"],
+ avalanche: ["9M"],
+ belch: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ dive: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nastyplot: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scald: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ thunderwave: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ slowbrogalar: {
+ learnset: {
+ acidspray: ["9M"],
+ amnesia: ["9M"],
+ avalanche: ["9M"],
+ belch: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nastyplot: ["9M"],
+ poisonjab: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psychup: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ shellsidearm: ["9M"],
+ skillswap: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ thunderwave: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ venoshock: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ gengar: {
+ learnset: {
+ acidspray: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ clearsmog: ["9M"],
+ confuseray: ["9M"],
+ corrosivegas: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ drainpunch: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ meanlook: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ perishsong: ["9M"],
+ phantomforce: ["9M"],
+ poisonjab: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ raindance: ["9M"],
+ reflecttype: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ venoshock: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ kangaskhan: {
+ learnset: {
+ assurance: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ beatup: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ circlethrow: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ hammerarm: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandstorm: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ terrainpulse: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ starmie: {
+ learnset: {
+ agility: ["9M"],
+ allyswitch: ["9M"],
+ ancientpower: ["9M"],
+ aquajet: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bulkup: ["9M"],
+ chargebeam: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ cosmicpower: ["9M"],
+ dazzlinggleam: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ gyroball: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ meteorbeam: ["9M"],
+ minimize: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychocut: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ recover: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scald: ["9M"],
+ selfdestruct: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ pinsir: {
+ learnset: {
+ aerialace: ["9M"],
+ attract: ["9M"],
+ bind: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bugbite: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ circlethrow: ["9M"],
+ closecombat: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doublehit: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ guillotine: ["9M"],
+ hardpress: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ lunge: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ seismictoss: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stoneedge: ["9M"],
+ stormthrow: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ tauros: {
+ learnset: {
+ assurance: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ megahorn: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ ragingbull: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ whirlpool: ["9M"],
+ wildcharge: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ taurospaldeacombat: {
+ learnset: {
+ assurance: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ gigaimpact: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ megahorn: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ ragingbull: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ taurospaldeablaze: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ megahorn: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ ragingbull: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ taurospaldeaaqua: {
+ learnset: {
+ aquajet: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ gigaimpact: ["9M"],
+ highhorsepower: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ liquidation: ["9M"],
+ megahorn: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ ragingbull: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ wavecrash: ["9M"],
+ whirlpool: ["9M"],
+ wildcharge: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ gyarados: {
+ learnset: {
+ aquatail: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ dragoncheer: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flail: ["9M"],
+ flamethrower: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scald: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thrash: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ ditto: {
+ learnset: {
+ transform: ["9M"],
+ },
+ },
+ vaporeon: {
+ learnset: {
+ acidarmor: ["9M"],
+ alluringvoice: ["9M"],
+ aquaring: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ flipturn: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ liquidation: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scald: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ jolteon: {
+ learnset: {
+ agility: ["9M"],
+ alluringvoice: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ doubleedge: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ metalsound: ["9M"],
+ mudslap: ["9M"],
+ pinmissile: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ voltswitch: ["9M"],
+ weatherball: ["9M"],
+ wildcharge: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ flareon: {
+ learnset: {
+ alluringvoice: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flail: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lastresort: ["9M"],
+ lavaplume: ["9M"],
+ mudslap: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ temperflare: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ aerodactyl: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ ancientpower: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ bite: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dualwingbeat: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ flamethrower: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ icefang: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ meteorbeam: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ steelwing: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderfang: ["9M"],
+ whirlwind: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ snorlax: {
+ learnset: {
+ amnesia: ["9M"],
+ attract: ["9M"],
+ belch: ["9M"],
+ bellydrum: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ covet: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gastroacid: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ hammerarm: ["9M"],
+ hardpress: ["9M"],
+ heatcrash: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ lastresort: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ supercellslam: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swallow: ["9M"],
+ terrainpulse: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ dragonite: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ dive: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ extremespeed: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ steelwing: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ tailwind: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlwind: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ meganium: {
+ learnset: {
+ ancientpower: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ dazzlinggleam: ["9M"],
+ doubleedge: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ ingrain: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ petalblizzard: ["9M"],
+ petaldance: ["9M"],
+ poisonpowder: ["9M"],
+ pollenpuff: ["9M"],
+ protect: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetscent: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ trailblaze: ["9M"],
+ weatherball: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ typhlosion: {
+ learnset: {
+ aerialace: ["9M"],
+ blastburn: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ burnup: ["9M"],
+ burningjealousy: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ eruption: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ inferno: ["9M"],
+ ironhead: ["9M"],
+ lavaplume: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ overheat: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ temperflare: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ typhlosionhisui: {
+ learnset: {
+ aerialace: ["9M"],
+ blastburn: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ burnup: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ eruption: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ heatwave: ["9M"],
+ hex: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ infernalparade: ["9M"],
+ inferno: ["9M"],
+ ironhead: ["9M"],
+ lavaplume: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ overheat: ["9M"],
+ playrough: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ temperflare: ["9M"],
+ thunderpunch: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ feraligatr: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ ancientpower: ["9M"],
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ ariados: {
+ learnset: {
+ acidspray: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ crosspoison: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fellstinger: ["9M"],
+ firstimpression: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ infestation: ["9M"],
+ knockoff: ["9M"],
+ leechlife: ["9M"],
+ lunge: ["9M"],
+ megahorn: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ ragepowder: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowsneak: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ stickyweb: ["9M"],
+ stompingtantrum: ["9M"],
+ stringshot: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ toxicthread: ["9M"],
+ trailblaze: ["9M"],
+ venoshock: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ ampharos: {
+ learnset: {
+ afteryou: ["9M"],
+ agility: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ cottonguard: ["9M"],
+ cottonspore: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ doubleedge: ["9M"],
+ dragoncheer: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ magneticflux: ["9M"],
+ megakick: ["9M"],
+ meteorbeam: ["9M"],
+ outrage: ["9M"],
+ paraboliccharge: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ supercellslam: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ azumarill: {
+ learnset: {
+ alluringvoice: ["9M"],
+ amnesia: ["9M"],
+ aquajet: ["9M"],
+ aquaring: ["9M"],
+ aquatail: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ perishsong: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ sing: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ politoed: {
+ learnset: {
+ amnesia: ["9M"],
+ attract: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ perishsong: ["9M"],
+ pound: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ espeon: {
+ learnset: {
+ alluringvoice: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ dazzlinggleam: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ imprison: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ morningsun: ["9M"],
+ mudslap: ["9M"],
+ powergem: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicfangs: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thunderwave: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ weatherball: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ umbreon: {
+ learnset: {
+ alluringvoice: ["9M"],
+ assurance: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ guardswap: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lashout: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ meanlook: ["9M"],
+ moonlight: ["9M"],
+ mudslap: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderwave: ["9M"],
+ tickle: ["9M"],
+ torment: ["9M"],
+ toxic: ["9M"],
+ trailblaze: ["9M"],
+ weatherball: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ slowking: {
+ learnset: {
+ amnesia: ["9M"],
+ avalanche: ["9M"],
+ belch: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ chillyreception: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ dive: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nastyplot: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scald: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ slowkinggalar: {
+ learnset: {
+ acidspray: ["9M"],
+ amnesia: ["9M"],
+ avalanche: ["9M"],
+ belch: ["9M"],
+ bellydrum: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ chillyreception: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ dive: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ eeriespell: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ lowsweep: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nastyplot: ["9M"],
+ poisonjab: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stompingtantrum: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ triattack: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ venoshock: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ forretress: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ gyroball: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icespinner: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lightscreen: ["9M"],
+ lunge: ["9M"],
+ magnetrise: ["9M"],
+ metalsound: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ pounce: ["9M"],
+ powertrick: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ seedbomb: ["9M"],
+ selfdestruct: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelroller: ["9M"],
+ stoneedge: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thunderwave: ["9M"],
+ toxicspikes: ["9M"],
+ venoshock: ["9M"],
+ voltswitch: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ steelix: {
+ learnset: {
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ bind: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ headsmash: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icefang: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ magnetrise: ["9M"],
+ meteorbeam: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockpolish: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ screech: ["9M"],
+ selfdestruct: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelroller: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thunderfang: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ scizor: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ bulletpunch: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ defog: ["9M"],
+ doublehit: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ hardpress: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ lunge: ["9M"],
+ nightslash: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychocut: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ steelbeam: ["9M"],
+ steelwing: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ vacuumwave: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ heracross: {
+ learnset: {
+ aerialace: ["9M"],
+ assurance: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ circlethrow: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ knockoff: ["9M"],
+ lowkick: ["9M"],
+ lunge: ["9M"],
+ megahorn: ["9M"],
+ nightslash: ["9M"],
+ pinmissile: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ seismictoss: ["9M"],
+ shadowclaw: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ stoneedge: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ },
+ },
+ skarmory: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ bodypress: ["9M"],
+ bravebird: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ drillpeck: ["9M"],
+ drillrun: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ flashcannon: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ metalsound: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ whirlwind: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ houndoom: {
+ learnset: {
+ beatup: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ burningjealousy: ["9M"],
+ comeuppance: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ doubleedge: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ inferno: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ overheat: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ torment: ["9M"],
+ toxic: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ tyranitar: {
+ learnset: {
+ aerialace: ["9M"],
+ ancientpower: ["9M"],
+ assurance: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thrash: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ pelipper: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ aquaring: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bravebird: ["9M"],
+ chillingwater: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ knockoff: ["9M"],
+ liquidation: ["9M"],
+ muddywater: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ spitup: ["9M"],
+ steelwing: ["9M"],
+ stockpile: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swallow: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ gardevoir: {
+ learnset: {
+ alluringvoice: ["9M"],
+ aurasphere: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ dazzlinggleam: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ doubleteam: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ guardswap: ["9M"],
+ healpulse: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ meanlook: ["9M"],
+ memento: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ tripleaxel: ["9M"],
+ vacuumwave: ["9M"],
+ willowisp: ["9M"],
+ wish: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ sableye: {
+ learnset: {
+ aerialace: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ drainpunch: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ feint: ["9M"],
+ firepunch: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ gyroball: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ meanlook: ["9M"],
+ megakick: ["9M"],
+ metalburst: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poisonjab: ["9M"],
+ poltergeist: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ quash: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ torment: ["9M"],
+ trick: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ aggron: {
+ learnset: {
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ metalburst: ["9M"],
+ metalsound: ["9M"],
+ meteorbeam: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelroller: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ medicham: {
+ learnset: {
+ acupressure: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aurasphere: ["9M"],
+ axekick: ["9M"],
+ batonpass: ["9M"],
+ blazekick: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulletpunch: ["9M"],
+ calmmind: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ detect: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ feint: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ guardswap: ["9M"],
+ helpinghand: ["9M"],
+ highjumpkick: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ imprison: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ poisonjab: ["9M"],
+ powerswap: ["9M"],
+ powertrick: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psychocut: ["9M"],
+ psyshock: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ manectric: {
+ learnset: {
+ agility: ["9M"],
+ attract: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ discharge: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ flamethrower: ["9M"],
+ gigaimpact: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ overheat: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ supercellslam: ["9M"],
+ switcheroo: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ sharpedo: {
+ learnset: {
+ agility: ["9M"],
+ ancientpower: ["9M"],
+ aquajet: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bounce: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flipturn: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icywind: ["9M"],
+ liquidation: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ poisonfang: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scald: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thrash: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ camerupt: {
+ learnset: {
+ amnesia: ["9M"],
+ ancientpower: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ burningjealousy: ["9M"],
+ charm: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ eruption: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ fissure: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ flashcannon: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ growth: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ lashout: ["9M"],
+ lavaplume: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ selfdestruct: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spitup: ["9M"],
+ stealthrock: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swallow: ["9M"],
+ temperflare: ["9M"],
+ trailblaze: ["9M"],
+ willowisp: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ torkoal: {
+ learnset: {
+ amnesia: ["9M"],
+ ancientpower: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ burningjealousy: ["9M"],
+ clearsmog: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ eruption: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ inferno: ["9M"],
+ irondefense: ["9M"],
+ lavaplume: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ rapidspin: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scorchingsands: ["9M"],
+ selfdestruct: ["9M"],
+ shellsmash: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ temperflare: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ altaria: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ alluringvoice: ["9M"],
+ bodyslam: ["9M"],
+ bravebird: ["9M"],
+ breakingswipe: ["9M"],
+ bulldoze: ["9M"],
+ cottonguard: ["9M"],
+ dazzlinggleam: ["9M"],
+ defog: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dualwingbeat: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamethrower: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ moonblast: ["9M"],
+ outrage: ["9M"],
+ perishsong: ["9M"],
+ playrough: ["9M"],
+ pluck: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sing: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ milotic: {
+ learnset: {
+ alluringvoice: ["9M"],
+ aquaring: ["9M"],
+ aquatail: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ coil: ["9M"],
+ confuseray: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ dragoncheer: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ mirrorcoat: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scald: ["9M"],
+ scaleshot: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ tickle: ["9M"],
+ tripleaxel: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ castform: {
+ learnset: {
+ amnesia: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ chillingwater: ["9M"],
+ cosmicpower: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ futuresight: ["9M"],
+ guardswap: ["9M"],
+ hex: ["9M"],
+ hurricane: ["9M"],
+ hydropump: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scald: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ banette: {
+ learnset: {
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ magicroom: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ torment: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ chimecho: {
+ learnset: {
+ allyswitch: ["9M"],
+ batonpass: ["9M"],
+ boomburst: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ cosmicpower: ["9M"],
+ curse: ["9M"],
+ dazzlinggleam: ["9M"],
+ disable: ["9M"],
+ doubleedge: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flashcannon: ["9M"],
+ futuresight: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ healbell: ["9M"],
+ healpulse: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ metalsound: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ recycle: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ screech: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thunderwave: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ uproar: ["9M"],
+ wish: ["9M"],
+ wrap: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ absol: {
+ learnset: {
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brutalswing: ["9M"],
+ calmmind: ["9M"],
+ closecombat: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ meanlook: ["9M"],
+ megahorn: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ perishsong: ["9M"],
+ phantomforce: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychocut: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ willowisp: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ glalie: {
+ learnset: {
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ disable: ["9M"],
+ doubleteam: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ foulplay: ["9M"],
+ freezedry: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ lightscreen: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ sheercold: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spikes: ["9M"],
+ spite: ["9M"],
+ steelroller: ["9M"],
+ substitute: ["9M"],
+ switcheroo: ["9M"],
+ taunt: ["9M"],
+ trailblaze: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ torterra: {
+ learnset: {
+ amnesia: ["9M"],
+ attract: ["9M"],
+ bite: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ hardpress: ["9M"],
+ headlongrush: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ seedbomb: ["9M"],
+ shellsmash: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spitup: ["9M"],
+ stealthrock: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swallow: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ thrash: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ wideguard: ["9M"],
+ woodhammer: ["9M"],
+ worryseed: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ infernape: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ attract: ["9M"],
+ aurasphere: ["9M"],
+ blastburn: ["9M"],
+ blazekick: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ machpunch: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ overheat: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ ragingfury: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ switcheroo: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ torment: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ uproar: ["9M"],
+ vacuumwave: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ empoleon: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ aquajet: ["9M"],
+ aquaring: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ drillpeck: ["9M"],
+ dualwingbeat: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ liquidation: ["9M"],
+ metalsound: ["9M"],
+ mudslap: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ throatchop: ["9M"],
+ tripleaxel: ["9M"],
+ uproar: ["9M"],
+ vacuumwave: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ wavecrash: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ luxray: {
+ learnset: {
+ agility: ["9M"],
+ babydolleyes: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ discharge: ["9M"],
+ doubleedge: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ firefang: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ nightslash: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ supercellslam: ["9M"],
+ superpower: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ roserade: {
+ learnset: {
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ cottonspore: ["9M"],
+ dazzlinggleam: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ hyperbeam: ["9M"],
+ ingrain: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lifedew: ["9M"],
+ petalblizzard: ["9M"],
+ petaldance: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ sleeppowder: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ stunspore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetscent: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ venoshock: ["9M"],
+ weatherball: ["9M"],
+ worryseed: ["9M"],
+ },
+ },
+ rampardos: {
+ learnset: {
+ ancientpower: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ hammerarm: ["9M"],
+ headsmash: ["9M"],
+ heavyslam: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ meteorbeam: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ supercellslam: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ whirlwind: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ bastiodon: {
+ learnset: {
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ fissure: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ guardsplit: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ metalburst: ["9M"],
+ metalsound: ["9M"],
+ meteorbeam: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ steelroller: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thunder: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ lopunny: {
+ learnset: {
+ acrobatics: ["9M"],
+ afteryou: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ aurasphere: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ blizzard: ["9M"],
+ bounce: ["9M"],
+ brutalswing: ["9M"],
+ charm: ["9M"],
+ circlethrow: ["9M"],
+ closecombat: ["9M"],
+ copycat: ["9M"],
+ cosmicpower: ["9M"],
+ cottonguard: ["9M"],
+ dig: ["9M"],
+ doublehit: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ dynamicpunch: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ firepunch: ["9M"],
+ flail: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ highjumpkick: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ irontail: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ machpunch: ["9M"],
+ megakick: ["9M"],
+ mirrorcoat: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetkiss: ["9M"],
+ switcheroo: ["9M"],
+ swordsdance: ["9M"],
+ teeterdance: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ tripleaxel: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ spiritomb: {
+ learnset: {
+ allyswitch: ["9M"],
+ bodyslam: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ lashout: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ toxic: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ uproar: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ garchomp: {
+ learnset: {
+ aerialace: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ outrage: ["9M"],
+ poisonjab: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ thrash: ["9M"],
+ thunderfang: ["9M"],
+ },
+ },
+ lucario: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aurasphere: ["9M"],
+ bite: ["9M"],
+ blazekick: ["9M"],
+ bodyslam: ["9M"],
+ bonerush: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletpunch: ["9M"],
+ calmmind: ["9M"],
+ circlethrow: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ copycat: ["9M"],
+ counter: ["9M"],
+ crosschop: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ dragonpulse: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ extremespeed: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ finalgambit: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ highjumpkick: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ irondefense: ["9M"],
+ irontail: ["9M"],
+ lifedew: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ metalsound: ["9M"],
+ meteormash: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ steelbeam: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ terrainpulse: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ waterpulse: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ hippowdon: {
+ learnset: {
+ amnesia: ["9M"],
+ bite: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ fissure: ["9M"],
+ gigaimpact: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ ironhead: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scorchingsands: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spitup: ["9M"],
+ stealthrock: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swallow: ["9M"],
+ thunderfang: ["9M"],
+ whirlwind: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ toxicroak: {
+ learnset: {
+ acidspray: ["9M"],
+ aerialace: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ belch: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletpunch: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ corrosivegas: ["9M"],
+ counter: ["9M"],
+ crosschop: ["9M"],
+ crosspoison: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ feint: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ toxic: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ venoshock: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ abomasnow: {
+ learnset: {
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ chillingwater: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ frostbreath: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ growth: ["9M"],
+ hardpress: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icehammer: ["9M"],
+ icepunch: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ ingrain: ["9M"],
+ irontail: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ sheercold: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ trailblaze: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ woodhammer: ["9M"],
+ },
+ },
+ weavile: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ avalanche: ["9M"],
+ batonpass: ["9M"],
+ beatup: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ brickbreak: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doublehit: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychocut: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ trailblaze: ["9M"],
+ tripleaxel: ["9M"],
+ upperhand: ["9M"],
+ waterpulse: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ rhyperior: {
+ learnset: {
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ guardsplit: ["9M"],
+ hammerarm: ["9M"],
+ heatcrash: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ horndrill: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ megakick: ["9M"],
+ megahorn: ["9M"],
+ metalburst: ["9M"],
+ meteorbeam: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockpolish: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ rockwrecker: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ supercellslam: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ leafeon: {
+ learnset: {
+ aerialace: ["9M"],
+ alluringvoice: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ bulletseed: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ knockoff: ["9M"],
+ lastresort: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ weatherball: ["9M"],
+ wish: ["9M"],
+ xscissor: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ glaceon: {
+ learnset: {
+ alluringvoice: ["9M"],
+ avalanche: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ freezedry: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ iceshard: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ lastresort: ["9M"],
+ mirrorcoat: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ tripleaxel: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ gliscor: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ crabhammer: ["9M"],
+ crosspoison: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dualwingbeat: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ firefang: ["9M"],
+ fling: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lunge: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ steelwing: ["9M"],
+ stoneedge: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ uturn: ["9M"],
+ venoshock: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ mamoswine: {
+ learnset: {
+ amnesia: ["9M"],
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ freezedry: ["9M"],
+ gigaimpact: ["9M"],
+ hardpress: ["9M"],
+ haze: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ iceshard: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ knockoff: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ trailblaze: ["9M"],
+ },
+ },
+ gallade: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ airslash: ["9M"],
+ alluringvoice: ["9M"],
+ aquacutter: ["9M"],
+ aurasphere: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ confuseray: ["9M"],
+ dazzlinggleam: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ doubleteam: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ magicroom: ["9M"],
+ meanlook: ["9M"],
+ megakick: ["9M"],
+ memento: ["9M"],
+ mistyterrain: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ painsplit: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psychocut: ["9M"],
+ psyshock: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sacredsword: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarblade: ["9M"],
+ stoneedge: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ tripleaxel: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ wideguard: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ froslass: {
+ learnset: {
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ doubleteam: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ lightscreen: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spikes: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ switcheroo: ["9M"],
+ taunt: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ tripleaxel: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ rotom: {
+ learnset: {
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ darkpulse: ["9M"],
+ discharge: ["9M"],
+ doubleteam: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ foulplay: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hypervoice: ["9M"],
+ lightscreen: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trick: ["9M"],
+ uproar: ["9M"],
+ voltswitch: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ rotomheat: {
+ learnset: {
+ overheat: ["9R"],
+ },
+ },
+ rotomwash: {
+ learnset: {
+ hydropump: ["9R"],
+ },
+ },
+ rotomfrost: {
+ learnset: {
+ blizzard: ["9R"],
+ },
+ },
+ rotomfan: {
+ learnset: {
+ airslash: ["9R"],
+ },
+ },
+ rotommow: {
+ learnset: {
+ leafstorm: ["9R"],
+ },
+ },
+ serperior: {
+ learnset: {
+ aerialace: ["9M"],
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulletseed: ["9M"],
+ calmmind: ["9M"],
+ coil: ["9M"],
+ doubleedge: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ frenzyplant: ["9M"],
+ gastroacid: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ glare: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ meanlook: ["9M"],
+ mirrorcoat: ["9M"],
+ outrage: ["9M"],
+ petalblizzard: ["9M"],
+ protect: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetscent: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ taunt: ["9M"],
+ trailblaze: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ emboar: {
+ learnset: {
+ assurance: ["9M"],
+ blastburn: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ burnup: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gyroball: ["9M"],
+ hammerarm: ["9M"],
+ hardpress: ["9M"],
+ headsmash: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudslap: ["9M"],
+ overheat: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scald: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ stormthrow: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thrash: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ samurott: {
+ learnset: {
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ aquacutter: ["9M"],
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ assurance: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ drillrun: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ liquidation: ["9M"],
+ megahorn: ["9M"],
+ nightslash: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ sacredsword: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ samurotthisui: {
+ learnset: {
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ aquacutter: ["9M"],
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ assurance: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ ceaselessedge: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ drillrun: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ liquidation: ["9M"],
+ megahorn: ["9M"],
+ nightslash: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ razorshell: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ sacredsword: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ smartstrike: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ whirlpool: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ watchog: {
+ learnset: {
+ afteryou: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bulletseed: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icepunch: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ meanlook: ["9M"],
+ mudshot: ["9M"],
+ nastyplot: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ swordsdance: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ liepard: {
+ learnset: {
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ burningjealousy: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ doubleteam: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ firefang: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ nastyplot: ["9M"],
+ nightslash: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ psychocut: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ torment: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ uturn: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ simisage: {
+ learnset: {
+ acrobatics: ["9M"],
+ attract: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ brickbreak: ["9M"],
+ bulletseed: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ stuffcheeks: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ torment: ["9M"],
+ trailblaze: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ simisear: {
+ learnset: {
+ acrobatics: ["9M"],
+ amnesia: ["9M"],
+ attract: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ blazekick: ["9M"],
+ brickbreak: ["9M"],
+ burningjealousy: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ overheat: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stuffcheeks: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ uproar: ["9M"],
+ willowisp: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ simipour: {
+ learnset: {
+ acrobatics: ["9M"],
+ aquaring: ["9M"],
+ attract: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ brickbreak: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scald: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stuffcheeks: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ uproar: ["9M"],
+ waterfall: ["9M"],
+ },
+ },
+ excadrill: {
+ learnset: {
+ aerialace: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crushclaw: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fissure: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ horndrill: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ megahorn: ["9M"],
+ metalsound: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ rapidspin: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ smartstrike: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ throatchop: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ audino: {
+ learnset: {
+ afteryou: ["9M"],
+ allyswitch: ["9M"],
+ amnesia: ["9M"],
+ attract: ["9M"],
+ babydolleyes: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ healpulse: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mistyterrain: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ simplebeam: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ sweetkiss: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trickroom: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ conkeldurr: {
+ learnset: {
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ defog: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ hammerarm: ["9M"],
+ hardpress: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ knockoff: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ machpunch: ["9M"],
+ megakick: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ upperhand: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ whimsicott: {
+ learnset: {
+ attract: ["9M"],
+ beatup: ["9M"],
+ charm: ["9M"],
+ cottonguard: ["9M"],
+ cottonspore: ["9M"],
+ dazzlinggleam: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ memento: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ playrough: ["9M"],
+ poisonpowder: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stunspore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ switcheroo: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ tickle: ["9M"],
+ trickroom: ["9M"],
+ uturn: ["9M"],
+ worryseed: ["9M"],
+ },
+ },
+ krookodile: {
+ learnset: {
+ aerialace: ["9M"],
+ aquatail: ["9M"],
+ assurance: ["9M"],
+ beatup: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ fissure: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ smackdown: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ torment: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ cofagrigus: {
+ learnset: {
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ bodypress: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ guardsplit: ["9M"],
+ guardswap: ["9M"],
+ haze: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ meanlook: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ powersplit: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ thief: ["9M"],
+ toxicspikes: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ garbodor: {
+ learnset: {
+ acidspray: ["9M"],
+ amnesia: ["9M"],
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ belch: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ clearsmog: ["9M"],
+ corrosivegas: ["9M"],
+ crosspoison: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ drainpunch: ["9M"],
+ endure: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ hyperbeam: ["9M"],
+ mudshot: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ round: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ selfdestruct: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ stockpile: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swallow: ["9M"],
+ thief: ["9M"],
+ thunderbolt: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ venoshock: ["9M"],
+ },
+ },
+ zoroark: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightdaze: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ torment: ["9M"],
+ toxic: ["9M"],
+ trick: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ zoroarkhisui: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ bittermalice: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ comeuppance: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ torment: ["9M"],
+ trick: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ reuniclus: {
+ learnset: {
+ acidarmor: ["9M"],
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ drainpunch: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ guardswap: ["9M"],
+ gyroball: ["9M"],
+ hammerarm: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ steelroller: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ vanilluxe: {
+ learnset: {
+ acidarmor: ["9M"],
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ beatup: ["9M"],
+ blizzard: ["9M"],
+ chillingwater: ["9M"],
+ endure: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ freezedry: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ lightscreen: ["9M"],
+ magnetrise: ["9M"],
+ mirrorcoat: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ selfdestruct: ["9M"],
+ sheercold: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ substitute: ["9M"],
+ taunt: ["9M"],
+ uproar: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ emolga: {
+ learnset: {
+ acrobatics: ["9M"],
+ agility: ["9M"],
+ airslash: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ covet: ["9M"],
+ defog: ["9M"],
+ discharge: ["9M"],
+ doubleteam: ["9M"],
+ dualwingbeat: ["9M"],
+ eerieimpulse: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ helpinghand: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ nuzzle: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ speedswap: ["9M"],
+ substitute: ["9M"],
+ taunt: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ uturn: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ chandelure: {
+ learnset: {
+ acidarmor: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ clearsmog: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ doubleteam: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ heatwave: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ inferno: ["9M"],
+ lashout: ["9M"],
+ memento: ["9M"],
+ minimize: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ overheat: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ poltergeist: ["9M"],
+ powersplit: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ beartic: {
+ learnset: {
+ aerialace: ["9M"],
+ aquajet: ["9M"],
+ assurance: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icepunch: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nightslash: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowclaw: ["9M"],
+ sheercold: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ trailblaze: ["9M"],
+ waterpulse: ["9M"],
+ xscissor: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ stunfisk: {
+ learnset: {
+ attract: ["9M"],
+ bounce: ["9M"],
+ bulldoze: ["9M"],
+ charge: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ foulplay: ["9M"],
+ lashout: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflecttype: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scald: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ surf: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ uproar: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ stunfiskgalar: {
+ learnset: {
+ attract: ["9M"],
+ bind: ["9M"],
+ bounce: ["9M"],
+ bulldoze: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ foulplay: ["9M"],
+ icefang: ["9M"],
+ irondefense: ["9M"],
+ lashout: ["9M"],
+ metalsound: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflecttype: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scald: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snaptrap: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ surf: ["9M"],
+ terrainpulse: ["9M"],
+ thunderwave: ["9M"],
+ uproar: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ golurk: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ chargebeam: ["9M"],
+ closecombat: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ gyroball: ["9M"],
+ hammerarm: ["9M"],
+ hardpress: ["9M"],
+ headlongrush: ["9M"],
+ heatcrash: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ knockoff: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mudslap: ["9M"],
+ nightshade: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scorchingsands: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shadowpunch: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ trick: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ hydreigon: {
+ learnset: {
+ acrobatics: ["9M"],
+ assurance: ["9M"],
+ beatup: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ doublehit: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ dualwingbeat: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ nastyplot: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ steelwing: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ triattack: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ volcarona: {
+ learnset: {
+ acrobatics: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ amnesia: ["9M"],
+ bodyslam: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ calmmind: ["9M"],
+ doubleedge: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fierydance: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fly: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ leechlife: ["9M"],
+ lightscreen: ["9M"],
+ lunge: ["9M"],
+ morningsun: ["9M"],
+ mysticalfire: ["9M"],
+ overheat: ["9M"],
+ poisonjab: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ quiverdance: ["9M"],
+ ragepowder: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ screech: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stringshot: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tailwind: ["9M"],
+ thrash: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ whirlwind: ["9M"],
+ wildcharge: ["9M"],
+ willowisp: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ chesnaught: {
+ learnset: {
+ aerialace: ["9M"],
+ bellydrum: ["9M"],
+ bite: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dragonclaw: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ gyroball: ["9M"],
+ hammerarm: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ spikyshield: ["9M"],
+ steelroller: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ taunt: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ wideguard: ["9M"],
+ woodhammer: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ delphox: {
+ learnset: {
+ agility: ["9M"],
+ blastburn: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ copycat: ["9M"],
+ dazzlinggleam: ["9M"],
+ doubleteam: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ howl: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ imprison: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ magicroom: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ mysticalfire: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ switcheroo: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ wish: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ greninja: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ blizzard: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ dive: ["9M"],
+ doubleteam: ["9M"],
+ endure: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ nightslash: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ shadowsneak: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgewave: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ spikes: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ switcheroo: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ waterpulse: ["9M"],
+ watershuriken: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ diggersby: {
+ learnset: {
+ agility: ["9M"],
+ attract: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ dig: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fissure: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ hammerarm: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scorchingsands: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ superfang: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ talonflame: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ blazekick: ["9M"],
+ bravebird: ["9M"],
+ bulkup: ["9M"],
+ defog: ["9M"],
+ doubleedge: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flail: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ whirlwind: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ vivillon: {
+ learnset: {
+ acrobatics: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ lightscreen: ["9M"],
+ poisonpowder: ["9M"],
+ pollenpuff: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ quiverdance: ["9M"],
+ ragepowder: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ skittersmack: ["9M"],
+ sleeppowder: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stringshot: ["9M"],
+ strugglebug: ["9M"],
+ stunspore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ weatherball: ["9M"],
+ whirlwind: ["9M"],
+ },
+ },
+ floetteeternal: {
+ learnset: {
+ alluringvoice: ["9M"],
+ batonpass: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainingkiss: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ grassknot: ["9M"],
+ grassyterrain: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ lightofruin: ["9M"],
+ lightscreen: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ petalblizzard: ["9M"],
+ petaldance: ["9M"],
+ pollenpuff: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ safeguard: ["9M"],
+ seedbomb: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ synthesis: ["9M"],
+ tearfullook: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ wish: ["9M"],
+ },
+ },
+ florges: {
+ learnset: {
+ alluringvoice: ["9M"],
+ batonpass: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainingkiss: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ lightscreen: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ petalblizzard: ["9M"],
+ petaldance: ["9M"],
+ pollenpuff: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ seedbomb: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ synthesis: ["9M"],
+ tearfullook: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ wish: ["9M"],
+ },
+ },
+ pangoro: {
+ learnset: {
+ attract: ["9M"],
+ beatup: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ bulletpunch: ["9M"],
+ circlethrow: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ comeuppance: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ darkestlariat: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ dragonclaw: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ hammerarm: ["9M"],
+ headlongrush: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icepunch: ["9M"],
+ ironhead: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ nightslash: ["9M"],
+ outrage: ["9M"],
+ partingshot: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ quash: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seismictoss: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ stormthrow: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ uproar: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ furfrou: {
+ learnset: {
+ attract: ["9M"],
+ babydolleyes: ["9M"],
+ bite: ["9M"],
+ charm: ["9M"],
+ cottonguard: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ thunderfang: ["9M"],
+ thunderwave: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ meowstic: {
+ learnset: {
+ alluringvoice: ["9M"],
+ batonpass: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ covet: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ meanlook: ["9M"],
+ mistyterrain: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psychup: ["9M"],
+ psyshock: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ tailslap: ["9M"],
+ thunderbolt: ["9M"],
+ thunderwave: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wish: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ meowsticf: {
+ learnset: {
+ alluringvoice: ["9M"],
+ batonpass: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ covet: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psychup: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ tailslap: ["9M"],
+ thunderbolt: ["9M"],
+ thunderwave: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ aegislash: {
+ learnset: {
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ attract: ["9M"],
+ block: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ closecombat: ["9M"],
+ destinybond: ["9M"],
+ doublehit: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ headsmash: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ kingsshield: ["9M"],
+ metalsound: ["9M"],
+ nightslash: ["9M"],
+ poltergeist: ["9M"],
+ powertrick: ["9M"],
+ protect: ["9M"],
+ psychocut: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ sacredsword: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarblade: ["9M"],
+ steelbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ wideguard: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ aromatisse: {
+ learnset: {
+ afteryou: ["9M"],
+ alluringvoice: ["9M"],
+ allyswitch: ["9M"],
+ aromaticmist: ["9M"],
+ attract: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ dazzlinggleam: ["9M"],
+ disable: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ lightscreen: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ nastyplot: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ sweetkiss: ["9M"],
+ sweetscent: ["9M"],
+ thunder: ["9M"],
+ thunderbolt: ["9M"],
+ trickroom: ["9M"],
+ wish: ["9M"],
+ },
+ },
+ slurpuff: {
+ learnset: {
+ afteryou: ["9M"],
+ amnesia: ["9M"],
+ attract: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ cottonguard: ["9M"],
+ cottonspore: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flamethrower: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ lightscreen: ["9M"],
+ mistyexplosion: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stickyweb: ["9M"],
+ stringshot: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ sweetscent: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderbolt: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ clawitzer: {
+ learnset: {
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ aurasphere: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ chillingwater: ["9M"],
+ crabhammer: ["9M"],
+ darkpulse: ["9M"],
+ dive: ["9M"],
+ dragonpulse: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ flashcannon: ["9M"],
+ flipturn: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ healpulse: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ terrainpulse: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ venoshock: ["9M"],
+ waterfall: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ heliolisk: {
+ learnset: {
+ agility: ["9M"],
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electrify: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ glare: ["9M"],
+ grassknot: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ morningsun: ["9M"],
+ mudslap: ["9M"],
+ paraboliccharge: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ shedtail: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ voltswitch: ["9M"],
+ weatherball: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ tyrantrum: {
+ learnset: {
+ ancientpower: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ highhorsepower: ["9M"],
+ horndrill: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icefang: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lashout: ["9M"],
+ meteorbeam: ["9M"],
+ outrage: ["9M"],
+ playrough: ["9M"],
+ poisonfang: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockpolish: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ thrash: ["9M"],
+ thunderfang: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ aurorus: {
+ learnset: {
+ ancientpower: ["9M"],
+ attract: ["9M"],
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chillingwater: ["9M"],
+ darkpulse: ["9M"],
+ discharge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ freezedry: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ meteorbeam: ["9M"],
+ mirrorcoat: ["9M"],
+ mudshot: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandstorm: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ weatherball: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ sylveon: {
+ learnset: {
+ alluringvoice: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ copycat: ["9M"],
+ covet: ["9M"],
+ curse: ["9M"],
+ dazzlinggleam: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ flail: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ mudslap: ["9M"],
+ mysticalfire: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ tickle: ["9M"],
+ trailblaze: ["9M"],
+ weatherball: ["9M"],
+ wish: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+ hawlucha: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bounce: ["9M"],
+ bravebird: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ crosschop: ["9M"],
+ defog: ["9M"],
+ detect: ["9M"],
+ dig: ["9M"],
+ drainpunch: ["9M"],
+ dualwingbeat: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ feint: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ flyingpress: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ highjumpkick: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ lunge: ["9M"],
+ meanlook: ["9M"],
+ megakick: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ steelwing: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ uproar: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ dedenne: {
+ learnset: {
+ agility: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ charm: ["9M"],
+ covet: ["9M"],
+ dazzlinggleam: ["9M"],
+ dig: ["9M"],
+ discharge: ["9M"],
+ drainingkiss: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irontail: ["9M"],
+ lightscreen: ["9M"],
+ magnetrise: ["9M"],
+ mistyterrain: ["9M"],
+ nuzzle: ["9M"],
+ paraboliccharge: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ tearfullook: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ goodra: {
+ learnset: {
+ acidarmor: ["9M"],
+ acidspray: ["9M"],
+ aquatail: ["9M"],
+ assurance: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flail: ["9M"],
+ flamethrower: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lifedew: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ scald: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ tearfullook: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ toxic: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ goodrahisui: {
+ learnset: {
+ acidspray: ["9M"],
+ ancientpower: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fireblast: ["9M"],
+ firepunch: ["9M"],
+ flail: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ heavyslam: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lifedew: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ shelter: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ steelbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ tearfullook: ["9M"],
+ thunder: ["9M"],
+ thunderpunch: ["9M"],
+ thunderbolt: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ },
+ },
+ klefki: {
+ learnset: {
+ calmmind: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fairylock: ["9M"],
+ flashcannon: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ magnetrise: ["9M"],
+ metalsound: ["9M"],
+ mistyterrain: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ recycle: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandstorm: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spikes: ["9M"],
+ steelbeam: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ switcheroo: ["9M"],
+ thief: ["9M"],
+ thunderwave: ["9M"],
+ torment: ["9M"],
+ trickroom: ["9M"],
+ },
+ },
+ trevenant: {
+ learnset: {
+ allyswitch: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ burningjealousy: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ focusblast: ["9M"],
+ forestscurse: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ haze: ["9M"],
+ hex: ["9M"],
+ hornleech: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ ingrain: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ phantomforce: ["9M"],
+ poisonjab: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ toxic: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ woodhammer: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ gourgeist: {
+ learnset: {
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ brutalswing: ["9M"],
+ bulletseed: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ gyroball: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ imprison: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ moonblast: ["9M"],
+ mysticalfire: ["9M"],
+ nastyplot: ["9M"],
+ painsplit: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shadowsneak: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ trickortreat: ["9M"],
+ willowisp: ["9M"],
+ worryseed: ["9M"],
+ },
+ },
+ avalugg: {
+ learnset: {
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ frostbreath: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icespinner: ["9M"],
+ iciclecrash: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ mirrorcoat: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ avalugghisui: {
+ learnset: {
+ ancientpower: ["9M"],
+ auroraveil: ["9M"],
+ avalanche: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icespinner: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ meteorbeam: ["9M"],
+ mirrorcoat: ["9M"],
+ mountaingale: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snowscape: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ noivern: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ boomburst: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ darkpulse: ["9M"],
+ defog: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flamethrower: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ irontail: ["9M"],
+ leechlife: ["9M"],
+ moonlight: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ switcheroo: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ whirlwind: ["9M"],
+ wildcharge: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ decidueye: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ batonpass: ["9M"],
+ bravebird: ["9M"],
+ bulletseed: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ defog: ["9M"],
+ doubleteam: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ phantomforce: ["9M"],
+ pluck: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychocut: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ spiritshackle: ["9M"],
+ spite: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ tailwind: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ },
+ },
+ decidueyehisui: {
+ learnset: {
+ aerialace: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ aurasphere: ["9M"],
+ batonpass: ["9M"],
+ bravebird: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulletseed: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ confuseray: ["9M"],
+ defog: ["9M"],
+ doubleteam: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ knockoff: ["9M"],
+ leafblade: ["9M"],
+ leafstorm: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ pluck: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rocktomb: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ synthesis: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ trailblaze: ["9M"],
+ triplearrows: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ },
+ },
+ incineroar: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ assurance: ["9M"],
+ attract: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ blastburn: ["9M"],
+ blazekick: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ burningjealousy: ["9M"],
+ closecombat: ["9M"],
+ crosschop: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ darkestlariat: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ lashout: ["9M"],
+ leechlife: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ partingshot: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swagger: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ primarina: {
+ learnset: {
+ acrobatics: ["9M"],
+ alluringvoice: ["9M"],
+ amnesia: ["9M"],
+ aquajet: ["9M"],
+ aquaring: ["9M"],
+ attract: ["9M"],
+ babydolleyes: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ dazzlinggleam: ["9M"],
+ dive: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ irontail: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ moonblast: ["9M"],
+ perishsong: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sing: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ sparklingaria: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ tripleaxel: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ weatherball: ["9M"],
+ whirlpool: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ toucannon: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ attract: ["9M"],
+ beakblast: ["9M"],
+ boomburst: ["9M"],
+ bravebird: ["9M"],
+ brickbreak: ["9M"],
+ bulletseed: ["9M"],
+ drillpeck: ["9M"],
+ dualwingbeat: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ flamecharge: ["9M"],
+ flashcannon: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ knockoff: ["9M"],
+ overheat: ["9M"],
+ pluck: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ seedbomb: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ crabominable: {
+ learnset: {
+ amnesia: ["9M"],
+ avalanche: ["9M"],
+ blizzard: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ crabhammer: ["9M"],
+ dig: ["9M"],
+ drainpunch: ["9M"],
+ dynamicpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ hardpress: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icehammer: ["9M"],
+ icepunch: ["9M"],
+ icespinner: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ knockoff: ["9M"],
+ liquidation: ["9M"],
+ machpunch: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swagger: ["9M"],
+ thief: ["9M"],
+ thunderpunch: ["9M"],
+ upperhand: ["9M"],
+ wideguard: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ lycanroc: {
+ learnset: {
+ accelerock: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hypervoice: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ mudslap: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailslap: ["9M"],
+ taunt: ["9M"],
+ thrash: ["9M"],
+ thunderfang: ["9M"],
+ trailblaze: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ lycanrocmidnight: {
+ learnset: {
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focuspunch: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hypervoice: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ lastresort: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ thunderpunch: ["9M"],
+ trailblaze: ["9M"],
+ upperhand: ["9M"],
+ uproar: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ lycanrocdusk: {
+ learnset: {
+ accelerock: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ charm: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ crunch: ["9M"],
+ crushclaw: ["9M"],
+ dig: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ howl: ["9M"],
+ hypervoice: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lastresort: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ swordsdance: ["9M"],
+ tailslap: ["9M"],
+ taunt: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunderfang: ["9M"],
+ trailblaze: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ toxapex: {
+ learnset: {
+ acidspray: ["9M"],
+ banefulbunker: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ chillingwater: ["9M"],
+ crosspoison: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ haze: ["9M"],
+ hex: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ infestation: ["9M"],
+ irondefense: ["9M"],
+ lightscreen: ["9M"],
+ liquidation: ["9M"],
+ lunge: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ pinmissile: ["9M"],
+ poisonjab: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ spitup: ["9M"],
+ stockpile: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swallow: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ venoshock: ["9M"],
+ waterpulse: ["9M"],
+ wideguard: ["9M"],
+ },
+ },
+ mudsdale: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fissure: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ heavyslam: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ },
+ },
+ araquanid: {
+ learnset: {
+ aquaring: ["9M"],
+ attract: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ chillingwater: ["9M"],
+ crunch: ["9M"],
+ dive: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ infestation: ["9M"],
+ irondefense: ["9M"],
+ leechlife: ["9M"],
+ liquidation: ["9M"],
+ lunge: ["9M"],
+ magicroom: ["9M"],
+ mirrorcoat: ["9M"],
+ poisonjab: ["9M"],
+ pounce: ["9M"],
+ powersplit: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ soak: ["9M"],
+ spitup: ["9M"],
+ stickyweb: ["9M"],
+ stockpile: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ trailblaze: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ wideguard: ["9M"],
+ wonderroom: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ salazzle: {
+ learnset: {
+ acidspray: ["9M"],
+ acrobatics: ["9M"],
+ agility: ["9M"],
+ beatup: ["9M"],
+ belch: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ burningjealousy: ["9M"],
+ corrosivegas: ["9M"],
+ crosspoison: ["9M"],
+ disable: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firelash: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ leechlife: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ overheat: ["9M"],
+ payback: ["9M"],
+ poisonfang: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ shadowclaw: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ sweetscent: ["9M"],
+ taunt: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thunderwave: ["9M"],
+ torment: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ venoshock: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ tsareena: {
+ learnset: {
+ acrobatics: ["9M"],
+ acupressure: ["9M"],
+ aromaticmist: ["9M"],
+ bounce: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainingkiss: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ fling: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ helpinghand: ["9M"],
+ highjumpkick: ["9M"],
+ hyperbeam: ["9M"],
+ knockoff: ["9M"],
+ leafstorm: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ payback: ["9M"],
+ petalblizzard: ["9M"],
+ playrough: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ rapidspin: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ solarblade: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ sweetscent: ["9M"],
+ synthesis: ["9M"],
+ taunt: ["9M"],
+ teeterdance: ["9M"],
+ trailblaze: ["9M"],
+ tripleaxel: ["9M"],
+ tropkick: ["9M"],
+ uturn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ oranguru: {
+ learnset: {
+ afteryou: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ chillingwater: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ imprison: ["9M"],
+ instruct: ["9M"],
+ knockoff: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ megakick: ["9M"],
+ nastyplot: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ quash: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ terrainpulse: ["9M"],
+ thunder: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wonderroom: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ passimian: {
+ learnset: {
+ acrobatics: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ beatup: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ curse: ["9M"],
+ doubleedge: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ gyroball: ["9M"],
+ hyperbeam: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ knockoff: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ seismictoss: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snore: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ uproar: ["9M"],
+ vacuumwave: ["9M"],
+ },
+ },
+ mimikyu: {
+ learnset: {
+ babydolleyes: ["9M"],
+ beatup: ["9M"],
+ bulkup: ["9M"],
+ burningjealousy: ["9M"],
+ charm: ["9M"],
+ confuseray: ["9M"],
+ copycat: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ destinybond: ["9M"],
+ doubleteam: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ leechlife: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ mistyterrain: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ playrough: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ woodhammer: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ drampa: {
+ learnset: {
+ amnesia: ["9M"],
+ attract: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ fling: ["9M"],
+ fly: ["9M"],
+ focusblast: ["9M"],
+ gigaimpact: ["9M"],
+ glare: ["9M"],
+ grassknot: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icywind: ["9M"],
+ lashout: ["9M"],
+ lightscreen: ["9M"],
+ outrage: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ scaleshot: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ surf: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ triattack: ["9M"],
+ uproar: ["9M"],
+ whirlwind: ["9M"],
+ },
+ },
+ kommoo: {
+ learnset: {
+ aerialace: ["9M"],
+ attract: ["9M"],
+ aurasphere: ["9M"],
+ bellydrum: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ boomburst: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulkup: ["9M"],
+ bulldoze: ["9M"],
+ clangingscales: ["9M"],
+ clangoroussoul: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ drainpunch: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ flamethrower: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icepunch: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ lowkick: ["9M"],
+ megakick: ["9M"],
+ metalsound: ["9M"],
+ nobleroar: ["9M"],
+ outrage: ["9M"],
+ payback: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ upperhand: ["9M"],
+ uproar: ["9M"],
+ vacuumwave: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ corviknight: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bravebird: ["9M"],
+ bulkup: ["9M"],
+ curse: ["9M"],
+ defog: ["9M"],
+ doubleedge: ["9M"],
+ drillpeck: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ featherdance: ["9M"],
+ flashcannon: ["9M"],
+ fly: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ heavyslam: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lightscreen: ["9M"],
+ metalsound: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ pluck: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roost: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ screech: ["9M"],
+ skyattack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ steelbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ tailwind: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ uturn: ["9M"],
+ },
+ },
+ flapple: {
+ learnset: {
+ acidspray: ["9M"],
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ bulletseed: ["9M"],
+ dracometeor: ["9M"],
+ dragondance: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dualwingbeat: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fly: ["9M"],
+ focusenergy: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ gravapple: ["9M"],
+ growth: ["9M"],
+ heavyslam: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ outrage: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ recycle: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ },
+ },
+ appletun: {
+ learnset: {
+ amnesia: ["9M"],
+ appleacid: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ bulletseed: ["9M"],
+ curse: ["9M"],
+ dracometeor: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ gyroball: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lightscreen: ["9M"],
+ outrage: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ recycle: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ superpower: ["9M"],
+ sweetscent: ["9M"],
+ trailblaze: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ sandaconda: {
+ learnset: {
+ belch: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ coil: ["9M"],
+ dig: ["9M"],
+ dragonrush: ["9M"],
+ drillrun: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ firefang: ["9M"],
+ gigaimpact: ["9M"],
+ glare: ["9M"],
+ highhorsepower: ["9M"],
+ hurricane: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lastresort: ["9M"],
+ minimize: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ screech: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ thunderfang: ["9M"],
+ wrap: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ polteageist: {
+ learnset: {
+ allyswitch: ["9M"],
+ aromaticmist: ["9M"],
+ batonpass: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ lightscreen: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shellsmash: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ strengthsap: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sweetscent: ["9M"],
+ teatime: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ hatterene: {
+ learnset: {
+ afteryou: ["9M"],
+ agility: ["9M"],
+ aromaticmist: ["9M"],
+ batonpass: ["9M"],
+ brutalswing: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ darkpulse: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainingkiss: ["9M"],
+ endure: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ futuresight: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ guardswap: ["9M"],
+ healpulse: ["9M"],
+ healingwish: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ lifedew: ["9M"],
+ lightscreen: ["9M"],
+ magicpowder: ["9M"],
+ magicroom: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ mysticalfire: ["9M"],
+ nuzzle: ["9M"],
+ painsplit: ["9M"],
+ playrough: ["9M"],
+ powerswap: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psychocut: ["9M"],
+ psyshock: ["9M"],
+ quash: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ swordsdance: ["9M"],
+ thunderwave: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ mrrime: {
+ learnset: {
+ afteryou: ["9M"],
+ allyswitch: ["9M"],
+ attract: ["9M"],
+ avalanche: ["9M"],
+ batonpass: ["9M"],
+ blizzard: ["9M"],
+ block: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ copycat: ["9M"],
+ dazzlinggleam: ["9M"],
+ drainpunch: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ freezedry: ["9M"],
+ frostbreath: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ guardswap: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ iceshard: ["9M"],
+ icespinner: ["9M"],
+ iciclespear: ["9M"],
+ icywind: ["9M"],
+ irondefense: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ megakick: ["9M"],
+ mirrorcoat: ["9M"],
+ mistyterrain: ["9M"],
+ nastyplot: ["9M"],
+ payback: ["9M"],
+ powersplit: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ recycle: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roleplay: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ sheercold: ["9M"],
+ skillswap: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ snowscape: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ teeterdance: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ torment: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ tripleaxel: ["9M"],
+ uproar: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ runerigus: {
+ learnset: {
+ allyswitch: ["9M"],
+ amnesia: ["9M"],
+ attract: ["9M"],
+ bodypress: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ dragonpulse: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ guardsplit: ["9M"],
+ guardswap: ["9M"],
+ haze: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ meanlook: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ payback: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ powersplit: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ selfdestruct: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowpunch: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ toxicspikes: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ willowisp: ["9M"],
+ wonderroom: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ alcremie: {
+ learnset: {
+ acidarmor: ["9M"],
+ alluringvoice: ["9M"],
+ aromaticmist: ["9M"],
+ attract: ["9M"],
+ babydolleyes: ["9M"],
+ calmmind: ["9M"],
+ charm: ["9M"],
+ dazzlinggleam: ["9M"],
+ decorate: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ entrainment: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ magicroom: ["9M"],
+ mistyexplosion: ["9M"],
+ mistyterrain: ["9M"],
+ mysticalfire: ["9M"],
+ painsplit: ["9M"],
+ playrough: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psyshock: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ safeguard: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sweetkiss: ["9M"],
+ sweetscent: ["9M"],
+ triattack: ["9M"],
+ wonderroom: ["9M"],
+ },
+ },
+ morpeko: {
+ learnset: {
+ agility: ["9M"],
+ assurance: ["9M"],
+ aurawheel: ["9M"],
+ batonpass: ["9M"],
+ bite: ["9M"],
+ brickbreak: ["9M"],
+ bulletseed: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ crunch: ["9M"],
+ darkpulse: ["9M"],
+ doubleedge: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ firefang: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ foulplay: ["9M"],
+ icefang: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ nastyplot: ["9M"],
+ outrage: ["9M"],
+ partingshot: ["9M"],
+ payback: ["9M"],
+ powertrip: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quash: ["9M"],
+ quickattack: ["9M"],
+ rapidspin: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ risingvoltage: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ snore: ["9M"],
+ spite: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ superfang: ["9M"],
+ swagger: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ thunder: ["9M"],
+ thunderfang: ["9M"],
+ thunderpunch: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ tickle: ["9M"],
+ torment: ["9M"],
+ uproar: ["9M"],
+ voltswitch: ["9M"],
+ wildcharge: ["9M"],
+ },
+ },
+ dragapult: {
+ learnset: {
+ acrobatics: ["9M"],
+ agility: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ beatup: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ disable: ["9M"],
+ dive: ["9M"],
+ doublehit: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragondance: ["9M"],
+ dragondarts: ["9M"],
+ dragonpulse: ["9M"],
+ dragonrush: ["9M"],
+ dragontail: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ flamethrower: ["9M"],
+ fly: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ infestation: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ lockon: ["9M"],
+ nightshade: ["9M"],
+ outrage: ["9M"],
+ phantomforce: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ quickattack: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ round: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snore: ["9M"],
+ solarbeam: ["9M"],
+ steelwing: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ surf: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ triattack: ["9M"],
+ uturn: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ wyrdeer: {
+ learnset: {
+ agility: ["9M"],
+ bite: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ disable: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ extrasensory: ["9M"],
+ facade: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ hypnosis: ["9M"],
+ imprison: ["9M"],
+ lightscreen: ["9M"],
+ lunge: ["9M"],
+ megahorn: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicnoise: ["9M"],
+ psyshieldbash: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ roleplay: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ thrash: ["9M"],
+ throatchop: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ uproar: ["9M"],
+ wildcharge: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ kleavor: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ ancientpower: ["9M"],
+ batonpass: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bugbite: ["9M"],
+ bugbuzz: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ defog: ["9M"],
+ doublehit: ["9M"],
+ doubleteam: ["9M"],
+ doubleedge: ["9M"],
+ dualwingbeat: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ feint: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ lightscreen: ["9M"],
+ lunge: ["9M"],
+ nightslash: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ stealthrock: ["9M"],
+ stoneaxe: ["9M"],
+ stoneedge: ["9M"],
+ strugglebug: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ tailwind: ["9M"],
+ thief: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ vacuumwave: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ basculegion: {
+ learnset: {
+ agility: ["9M"],
+ aquajet: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ doubleedge: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ hex: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icywind: ["9M"],
+ lastrespects: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nightshade: ["9M"],
+ outrage: ["9M"],
+ painsplit: ["9M"],
+ phantomforce: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ thrash: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ wavecrash: ["9M"],
+ whirlpool: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ basculegionf: {
+ learnset: {
+ agility: ["9M"],
+ aquajet: ["9M"],
+ bite: ["9M"],
+ blizzard: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ doubleedge: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flail: ["9M"],
+ flipturn: ["9M"],
+ gigaimpact: ["9M"],
+ headsmash: ["9M"],
+ hex: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icebeam: ["9M"],
+ icefang: ["9M"],
+ icywind: ["9M"],
+ lastrespects: ["9M"],
+ liquidation: ["9M"],
+ mudshot: ["9M"],
+ muddywater: ["9M"],
+ nightshade: ["9M"],
+ outrage: ["9M"],
+ painsplit: ["9M"],
+ phantomforce: ["9M"],
+ protect: ["9M"],
+ psychicfangs: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ scaleshot: ["9M"],
+ scaryface: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ snowscape: ["9M"],
+ soak: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ thrash: ["9M"],
+ uproar: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ wavecrash: ["9M"],
+ whirlpool: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ sneasler: {
+ learnset: {
+ acidspray: ["9M"],
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ calmmind: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ dig: ["9M"],
+ direclaw: ["9M"],
+ doublehit: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ feint: ["9M"],
+ firepunch: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gunkshot: ["9M"],
+ hyperbeam: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ nastyplot: ["9M"],
+ nightslash: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickattack: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ screech: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ spite: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ switcheroo: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ vacuumwave: ["9M"],
+ venoshock: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ meowscarada: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ allyswitch: ["9M"],
+ aurasphere: ["9M"],
+ bite: ["9M"],
+ brickbreak: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ darkpulse: ["9M"],
+ doubleteam: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ fling: ["9M"],
+ flowertrick: ["9M"],
+ foulplay: ["9M"],
+ frenzyplant: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ knockoff: ["9M"],
+ lashout: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudslap: ["9M"],
+ nastyplot: ["9M"],
+ nightslash: ["9M"],
+ petalblizzard: ["9M"],
+ playrough: ["9M"],
+ pollenpuff: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ quickattack: ["9M"],
+ rest: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderpunch: ["9M"],
+ toxicspikes: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ tripleaxel: ["9M"],
+ uturn: ["9M"],
+ worryseed: ["9M"],
+ },
+ },
+ skeledirge: {
+ learnset: {
+ alluringvoice: ["9M"],
+ belch: ["9M"],
+ bite: ["9M"],
+ blastburn: ["9M"],
+ bodyslam: ["9M"],
+ burnup: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigaimpact: ["9M"],
+ heatcrash: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ imprison: ["9M"],
+ mudslap: ["9M"],
+ nightshade: ["9M"],
+ outrage: ["9M"],
+ overheat: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ round: ["9M"],
+ scaryface: ["9M"],
+ scorchingsands: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ sing: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ solarbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ temperflare: ["9M"],
+ thunderfang: ["9M"],
+ torchsong: ["9M"],
+ willowisp: ["9M"],
+ yawn: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ quaquaval: {
+ learnset: {
+ acrobatics: ["9M"],
+ aerialace: ["9M"],
+ agility: ["9M"],
+ aircutter: ["9M"],
+ airslash: ["9M"],
+ aquacutter: ["9M"],
+ aquajet: ["9M"],
+ aquastep: ["9M"],
+ batonpass: ["9M"],
+ bravebird: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ coaching: ["9M"],
+ counter: ["9M"],
+ detect: ["9M"],
+ doublehit: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusenergy: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hurricane: ["9M"],
+ hydrocannon: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ icespinner: ["9M"],
+ icywind: ["9M"],
+ knockoff: ["9M"],
+ lastresort: ["9M"],
+ liquidation: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ megakick: ["9M"],
+ mistyterrain: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ rapidspin: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ roost: ["9M"],
+ sleeptalk: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ tripleaxel: ["9M"],
+ uturn: ["9M"],
+ upperhand: ["9M"],
+ waterpulse: ["9M"],
+ wavecrash: ["9M"],
+ whirlpool: ["9M"],
+ },
+ },
+ maushold: {
+ learnset: {
+ aerialace: ["9M"],
+ afteryou: ["9M"],
+ agility: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ beatup: ["9M"],
+ bite: ["9M"],
+ bulletseed: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ copycat: ["9M"],
+ crunch: ["9M"],
+ dig: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ encore: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ followme: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ playrough: ["9M"],
+ populationbomb: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ seedbomb: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ switcheroo: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ thunderwave: ["9M"],
+ tickle: ["9M"],
+ tidyup: ["9M"],
+ trailblaze: ["9M"],
+ uturn: ["9M"],
+ waterpulse: ["9M"],
+ },
+ },
+ garganacl: {
+ learnset: {
+ ancientpower: ["9M"],
+ avalanche: ["9M"],
+ block: ["9M"],
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ brickbreak: ["9M"],
+ bulldoze: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ dynamicpunch: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ firepunch: ["9M"],
+ fissure: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ gravity: ["9M"],
+ hammerarm: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ icepunch: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ meteorbeam: ["9M"],
+ mudshot: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockpolish: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ saltcure: ["9M"],
+ sandstorm: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ stealthrock: ["9M"],
+ stompingtantrum: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thunderpunch: ["9M"],
+ wideguard: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ armarouge: {
+ learnset: {
+ acidspray: ["9M"],
+ allyswitch: ["9M"],
+ armorcannon: ["9M"],
+ aurasphere: ["9M"],
+ burnup: ["9M"],
+ calmmind: ["9M"],
+ clearsmog: ["9M"],
+ confuseray: ["9M"],
+ darkpulse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ dragonpulse: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ lavaplume: ["9M"],
+ lightscreen: ["9M"],
+ meteorbeam: ["9M"],
+ mysticalfire: ["9M"],
+ nightshade: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ scorchingsands: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ taunt: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ weatherball: ["9M"],
+ wideguard: ["9M"],
+ willowisp: ["9M"],
+ },
+ },
+ ceruledge: {
+ learnset: {
+ allyswitch: ["9M"],
+ bitterblade: ["9M"],
+ brickbreak: ["9M"],
+ bulkup: ["9M"],
+ burnup: ["9M"],
+ clearsmog: ["9M"],
+ closecombat: ["9M"],
+ confuseray: ["9M"],
+ curse: ["9M"],
+ destinybond: ["9M"],
+ disable: ["9M"],
+ dragonclaw: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firespin: ["9M"],
+ flamecharge: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ fling: ["9M"],
+ gigaimpact: ["9M"],
+ heatwave: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lavaplume: ["9M"],
+ lightscreen: ["9M"],
+ nightshade: ["9M"],
+ nightslash: ["9M"],
+ overheat: ["9M"],
+ phantomforce: ["9M"],
+ poisonjab: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychocut: ["9M"],
+ quickguard: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ shadowball: ["9M"],
+ shadowclaw: ["9M"],
+ shadowsneak: ["9M"],
+ sleeptalk: ["9M"],
+ solarblade: ["9M"],
+ spite: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ throatchop: ["9M"],
+ vacuumwave: ["9M"],
+ willowisp: ["9M"],
+ xscissor: ["9M"],
+ },
+ },
+ bellibolt: {
+ learnset: {
+ acidspray: ["9M"],
+ charge: ["9M"],
+ chargebeam: ["9M"],
+ chillingwater: ["9M"],
+ confuseray: ["9M"],
+ discharge: ["9M"],
+ eerieimpulse: ["9M"],
+ electricterrain: ["9M"],
+ electroball: ["9M"],
+ electroweb: ["9M"],
+ endure: ["9M"],
+ flail: ["9M"],
+ gigaimpact: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ lightscreen: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ muddywater: ["9M"],
+ paraboliccharge: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ slackoff: ["9M"],
+ sleeptalk: ["9M"],
+ soak: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ supercellslam: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ toxic: ["9M"],
+ voltswitch: ["9M"],
+ waterpulse: ["9M"],
+ weatherball: ["9M"],
+ wildcharge: ["9M"],
+ zapcannon: ["9M"],
+ },
+ },
+ scovillain: {
+ learnset: {
+ bite: ["9M"],
+ bulletseed: ["9M"],
+ burningjealousy: ["9M"],
+ crunch: ["9M"],
+ doublehit: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ fireblast: ["9M"],
+ firefang: ["9M"],
+ firespin: ["9M"],
+ flamethrower: ["9M"],
+ flareblitz: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ helpinghand: ["9M"],
+ hyperbeam: ["9M"],
+ ingrain: ["9M"],
+ lashout: ["9M"],
+ leafstorm: ["9M"],
+ leechseed: ["9M"],
+ overheat: ["9M"],
+ protect: ["9M"],
+ ragepowder: ["9M"],
+ rest: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ spicyextract: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ superfang: ["9M"],
+ swagger: ["9M"],
+ temperflare: ["9M"],
+ thief: ["9M"],
+ thunderfang: ["9M"],
+ trailblaze: ["9M"],
+ willowisp: ["9M"],
+ worryseed: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ espathra: {
+ learnset: {
+ aerialace: ["9M"],
+ agility: ["9M"],
+ allyswitch: ["9M"],
+ babydolleyes: ["9M"],
+ batonpass: ["9M"],
+ bodyslam: ["9M"],
+ bravebird: ["9M"],
+ calmmind: ["9M"],
+ confuseray: ["9M"],
+ dazzlinggleam: ["9M"],
+ doubleedge: ["9M"],
+ drillpeck: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ featherdance: ["9M"],
+ flashcannon: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ helpinghand: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ hypnosis: ["9M"],
+ lastresort: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ luminacrash: ["9M"],
+ mudslap: ["9M"],
+ nightshade: ["9M"],
+ pluck: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ quickattack: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roost: ["9M"],
+ sandstorm: ["9M"],
+ seedbomb: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ uturn: ["9M"],
+ uproar: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ tinkaton: {
+ learnset: {
+ babydolleyes: ["9M"],
+ brickbreak: ["9M"],
+ brutalswing: ["9M"],
+ bulldoze: ["9M"],
+ covet: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fakeout: ["9M"],
+ faketears: ["9M"],
+ feint: ["9M"],
+ flashcannon: ["9M"],
+ flatter: ["9M"],
+ fling: ["9M"],
+ foulplay: ["9M"],
+ gigatonhammer: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ icehammer: ["9M"],
+ knockoff: ["9M"],
+ lightscreen: ["9M"],
+ metalsound: ["9M"],
+ playrough: ["9M"],
+ pounce: ["9M"],
+ protect: ["9M"],
+ quash: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ screech: ["9M"],
+ skillswap: ["9M"],
+ skittersmack: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sweetkiss: ["9M"],
+ swordsdance: ["9M"],
+ thief: ["9M"],
+ thunderwave: ["9M"],
+ woodhammer: ["9M"],
+ },
+ },
+ palafin: {
+ learnset: {
+ acrobatics: ["9M"],
+ agility: ["9M"],
+ aquajet: ["9M"],
+ aquatail: ["9M"],
+ aurasphere: ["9M"],
+ blizzard: ["9M"],
+ bodyslam: ["9M"],
+ boomburst: ["9M"],
+ bounce: ["9M"],
+ bulkup: ["9M"],
+ charm: ["9M"],
+ chillingwater: ["9M"],
+ closecombat: ["9M"],
+ counter: ["9M"],
+ dive: ["9M"],
+ doublehit: ["9M"],
+ drainpunch: ["9M"],
+ drainingkiss: ["9M"],
+ encore: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ fling: ["9M"],
+ flipturn: ["9M"],
+ focusblast: ["9M"],
+ focusenergy: ["9M"],
+ focuspunch: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ hardpress: ["9M"],
+ haze: ["9M"],
+ helpinghand: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ icebeam: ["9M"],
+ icepunch: ["9M"],
+ icywind: ["9M"],
+ ironhead: ["9M"],
+ jetpunch: ["9M"],
+ liquidation: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ sleeptalk: ["9M"],
+ substitute: ["9M"],
+ surf: ["9M"],
+ taunt: ["9M"],
+ throatchop: ["9M"],
+ tickle: ["9M"],
+ waterpulse: ["9M"],
+ waterfall: ["9M"],
+ wavecrash: ["9M"],
+ whirlpool: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ orthworm: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ coil: ["9M"],
+ curse: ["9M"],
+ dig: ["9M"],
+ doubleedge: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ heavyslam: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ irontail: ["9M"],
+ metalburst: ["9M"],
+ metalsound: ["9M"],
+ mudshot: ["9M"],
+ mudslap: ["9M"],
+ protect: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ shedtail: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ spikes: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stompingtantrum: ["9M"],
+ substitute: ["9M"],
+ wrap: ["9M"],
+ },
+ },
+ glimmora: {
+ learnset: {
+ acidarmor: ["9M"],
+ acidspray: ["9M"],
+ ancientpower: ["9M"],
+ confuseray: ["9M"],
+ dazzlinggleam: ["9M"],
+ earthpower: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ explosion: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ gigaimpact: ["9M"],
+ gunkshot: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ lightscreen: ["9M"],
+ memento: ["9M"],
+ meteorbeam: ["9M"],
+ mortalspin: ["9M"],
+ mudshot: ["9M"],
+ powergem: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ rockblast: ["9M"],
+ rockpolish: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ sandtomb: ["9M"],
+ sandstorm: ["9M"],
+ selfdestruct: ["9M"],
+ sleeptalk: ["9M"],
+ sludgebomb: ["9M"],
+ sludgewave: ["9M"],
+ smackdown: ["9M"],
+ solarbeam: ["9M"],
+ spikes: ["9M"],
+ spikyshield: ["9M"],
+ stealthrock: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ toxic: ["9M"],
+ toxicspikes: ["9M"],
+ venoshock: ["9M"],
+ },
+ },
+ farigiraf: {
+ learnset: {
+ agility: ["9M"],
+ allyswitch: ["9M"],
+ amnesia: ["9M"],
+ assurance: ["9M"],
+ batonpass: ["9M"],
+ beatup: ["9M"],
+ bodyslam: ["9M"],
+ bulldoze: ["9M"],
+ calmmind: ["9M"],
+ chargebeam: ["9M"],
+ confuseray: ["9M"],
+ crunch: ["9M"],
+ curse: ["9M"],
+ dazzlinggleam: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ earthquake: ["9M"],
+ endeavor: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ expandingforce: ["9M"],
+ facade: ["9M"],
+ foulplay: ["9M"],
+ futuresight: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ gravity: ["9M"],
+ guardswap: ["9M"],
+ helpinghand: ["9M"],
+ highhorsepower: ["9M"],
+ hyperbeam: ["9M"],
+ hypervoice: ["9M"],
+ imprison: ["9M"],
+ ironhead: ["9M"],
+ lightscreen: ["9M"],
+ lowkick: ["9M"],
+ meanlook: ["9M"],
+ mirrorcoat: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ powerswap: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ psychic: ["9M"],
+ psychicfangs: ["9M"],
+ psychicnoise: ["9M"],
+ psychicterrain: ["9M"],
+ psyshock: ["9M"],
+ raindance: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ shadowball: ["9M"],
+ skillswap: ["9M"],
+ sleeptalk: ["9M"],
+ stompingtantrum: ["9M"],
+ storedpower: ["9M"],
+ substitute: ["9M"],
+ sunnyday: ["9M"],
+ thief: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ trailblaze: ["9M"],
+ trick: ["9M"],
+ trickroom: ["9M"],
+ twinbeam: ["9M"],
+ uproar: ["9M"],
+ wish: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ kingambit: {
+ learnset: {
+ aerialace: ["9M"],
+ airslash: ["9M"],
+ assurance: ["9M"],
+ brickbreak: ["9M"],
+ darkpulse: ["9M"],
+ dig: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ fling: ["9M"],
+ focusblast: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ guillotine: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ kowtowcleave: ["9M"],
+ lashout: ["9M"],
+ lowkick: ["9M"],
+ lowsweep: ["9M"],
+ meanlook: ["9M"],
+ metalburst: ["9M"],
+ metalsound: ["9M"],
+ nightslash: ["9M"],
+ poisonjab: ["9M"],
+ protect: ["9M"],
+ quickguard: ["9M"],
+ raindance: ["9M"],
+ rest: ["9M"],
+ reversal: ["9M"],
+ rocktomb: ["9M"],
+ sandstorm: ["9M"],
+ scaryface: ["9M"],
+ shadowclaw: ["9M"],
+ sleeptalk: ["9M"],
+ snarl: ["9M"],
+ spite: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ swordsdance: ["9M"],
+ taunt: ["9M"],
+ thief: ["9M"],
+ throatchop: ["9M"],
+ thunderwave: ["9M"],
+ torment: ["9M"],
+ xscissor: ["9M"],
+ zenheadbutt: ["9M"],
+ },
+ },
+ sinistcha: {
+ learnset: {
+ calmmind: ["9M"],
+ curse: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ foulplay: ["9M"],
+ gigadrain: ["9M"],
+ grassyterrain: ["9M"],
+ hex: ["9M"],
+ hyperbeam: ["9M"],
+ imprison: ["9M"],
+ irondefense: ["9M"],
+ leafstorm: ["9M"],
+ lifedew: ["9M"],
+ matchagotcha: ["9M"],
+ memento: ["9M"],
+ nastyplot: ["9M"],
+ nightshade: ["9M"],
+ painsplit: ["9M"],
+ phantomforce: ["9M"],
+ poltergeist: ["9M"],
+ protect: ["9M"],
+ psychup: ["9M"],
+ ragepowder: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ scald: ["9M"],
+ shadowball: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ spite: ["9M"],
+ strengthsap: ["9M"],
+ stunspore: ["9M"],
+ substitute: ["9M"],
+ trickroom: ["9M"],
+ uproar: ["9M"],
+ },
+ },
+ archaludon: {
+ learnset: {
+ aurasphere: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ brickbreak: ["9M"],
+ darkpulse: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonclaw: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthquake: ["9M"],
+ electroshot: ["9M"],
+ endure: ["9M"],
+ facade: ["9M"],
+ flashcannon: ["9M"],
+ focusenergy: ["9M"],
+ foulplay: ["9M"],
+ gigaimpact: ["9M"],
+ gyroball: ["9M"],
+ hardpress: ["9M"],
+ heavyslam: ["9M"],
+ hyperbeam: ["9M"],
+ irondefense: ["9M"],
+ ironhead: ["9M"],
+ lightscreen: ["9M"],
+ metalburst: ["9M"],
+ metalsound: ["9M"],
+ meteorbeam: ["9M"],
+ mirrorcoat: ["9M"],
+ nightslash: ["9M"],
+ outrage: ["9M"],
+ protect: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ roar: ["9M"],
+ rockslide: ["9M"],
+ rocktomb: ["9M"],
+ scaryface: ["9M"],
+ sleeptalk: ["9M"],
+ smackdown: ["9M"],
+ snarl: ["9M"],
+ solarbeam: ["9M"],
+ stealthrock: ["9M"],
+ steelbeam: ["9M"],
+ stoneedge: ["9M"],
+ substitute: ["9M"],
+ swordsdance: ["9M"],
+ thunder: ["9M"],
+ thunderwave: ["9M"],
+ thunderbolt: ["9M"],
+ },
+ },
+ hydrapple: {
+ learnset: {
+ bodypress: ["9M"],
+ bodyslam: ["9M"],
+ breakingswipe: ["9M"],
+ bugbite: ["9M"],
+ bulletseed: ["9M"],
+ curse: ["9M"],
+ doublehit: ["9M"],
+ doubleedge: ["9M"],
+ dracometeor: ["9M"],
+ dragoncheer: ["9M"],
+ dragonpulse: ["9M"],
+ dragontail: ["9M"],
+ earthpower: ["9M"],
+ earthquake: ["9M"],
+ endure: ["9M"],
+ energyball: ["9M"],
+ facade: ["9M"],
+ ficklebeam: ["9M"],
+ gigadrain: ["9M"],
+ gigaimpact: ["9M"],
+ grassknot: ["9M"],
+ grassyglide: ["9M"],
+ grassyterrain: ["9M"],
+ growth: ["9M"],
+ gyroball: ["9M"],
+ heavyslam: ["9M"],
+ hydropump: ["9M"],
+ hyperbeam: ["9M"],
+ infestation: ["9M"],
+ leafstorm: ["9M"],
+ nastyplot: ["9M"],
+ outrage: ["9M"],
+ pollenpuff: ["9M"],
+ pounce: ["9M"],
+ powerwhip: ["9M"],
+ protect: ["9M"],
+ raindance: ["9M"],
+ recover: ["9M"],
+ recycle: ["9M"],
+ reflect: ["9M"],
+ rest: ["9M"],
+ seedbomb: ["9M"],
+ sleeptalk: ["9M"],
+ solarbeam: ["9M"],
+ substitute: ["9M"],
+ suckerpunch: ["9M"],
+ sunnyday: ["9M"],
+ sweetscent: ["9M"],
+ syrupbomb: ["9M"],
+ uproar: ["9M"],
+ yawn: ["9M"],
+ },
+ },
+};
diff --git a/data/mods/champions/moves.ts b/data/mods/champions/moves.ts
new file mode 100644
index 0000000000..414e065e45
--- /dev/null
+++ b/data/mods/champions/moves.ts
@@ -0,0 +1,1108 @@
+export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
+ absorb: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ acid: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ aeroblast: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ anchorshot: {
+ inherit: true,
+ basePower: 90,
+ },
+ appleacid: {
+ inherit: true,
+ basePower: 90,
+ },
+ armthrust: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ astonish: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ astralbarrage: {
+ inherit: true,
+ basePower: 110,
+ isNonstandard: "Past",
+ },
+ attackorder: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ aurorabeam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ banefulbunker: {
+ inherit: true,
+ pp: 5,
+ },
+ barbbarrage: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ beakblast: {
+ inherit: true,
+ basePower: 120,
+ pp: 5,
+ },
+ behemothbash: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ behemothblade: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ blazingtorque: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bleakwindstorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bloodmoon: {
+ inherit: true,
+ basePower: 130,
+ isNonstandard: "Past",
+ },
+ blueflare: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ boltbeak: {
+ inherit: true,
+ basePower: 80,
+ },
+ boltstrike: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bonerush: {
+ inherit: true,
+ basePower: 30,
+ },
+ branchpoke: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ brine: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ bubblebeam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ burningbulwark: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ burnup: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ celebrate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ chloroblast: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ clangoroussoul: {
+ inherit: true,
+ accuracy: true,
+ },
+ collisioncourse: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ combattorque: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ confide: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ confusion: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ conversion: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ conversion2: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ corrosivegas: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ courtchange: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ crabhammer: {
+ inherit: true,
+ accuracy: 95,
+ },
+ crushclaw: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
+ },
+ crushgrip: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ cut: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ darkvoid: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ defendorder: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ defensecurl: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ diamondstorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ direclaw: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
+ secondary: {
+ chance: 30,
+ onHit(target, source) {
+ const status = this.sample(['psn', 'par', 'slp']);
+ target.trySetStatus(status, source);
+ },
+ },
+ desc: "Has a 30% chance to cause the target to either fall asleep, become poisoned, or become paralyzed.",
+ shortDesc: "30% chance to sleep, poison, or paralyze target.",
+ },
+ disarmingvoice: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ doodle: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ doomdesire: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ doublekick: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ doubleshock: {
+ inherit: true,
+ isNonstandard: "Custom",
+ },
+ dragonascent: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dragonbreath: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dragoncheer: {
+ inherit: true,
+ flags: { bypasssub: 1, allyanim: 1, metronome: 1, sound: 1 },
+ },
+ dragonclaw: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
+ },
+ dragonenergy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dragonhammer: {
+ inherit: true,
+ basePower: 100,
+ isNonstandard: "Past",
+ },
+ dreameater: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ drumbeating: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ dynamaxcannon: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ echoedvoice: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ electrify: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ electrodrift: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ember: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ encore: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onStart(target) {
+ let move: Move | ActiveMove | null = target.lastMove;
+ if (!move || target.volatiles['dynamax']) return false;
+
+ // Encore only works on Max Moves if the base move is not itself a Max Move
+ if (move.isMax && move.baseMove) move = this.dex.moves.get(move.baseMove);
+ const moveSlot = target.getMoveData(move.id);
+ if (move.isZ || move.isMax || move.flags['failencore'] || !moveSlot || moveSlot.pp <= 0) {
+ // it failed
+ return false;
+ }
+ this.effectState.move = move.id;
+ this.add('-start', target, 'Encore');
+ const action = this.queue.willMove(target);
+ if (!action) {
+ this.effectState.duration!++;
+ } else {
+ this.queue.changeAction(target, {
+ choice: 'move',
+ // target: undefined,
+ // targetLoc: undefined,
+ moveid: move.id,
+ order: action.order, // TODO: check Quash + Encore interaction
+ });
+ }
+ },
+ },
+ },
+ esperwing: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fairywind: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ falsesurrender: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ falseswipe: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fierywrath: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ filletaway: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ firelash: {
+ inherit: true,
+ basePower: 90,
+ },
+ firepledge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ firstimpression: {
+ inherit: true,
+ basePower: 100,
+ },
+ fishiousrend: {
+ inherit: true,
+ basePower: 80,
+ },
+ flamewheel: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fleurcannon: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ floralhealing: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ forcepalm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ freezeshock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ freezingglare: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ furyattack: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ furycutter: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ furyswipes: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fusionbolt: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ fusionflare: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ geargrind: {
+ inherit: true,
+ accuracy: 90,
+ basePower: 60,
+ },
+ glaciallance: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ glaciate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ glaiverush: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ grasspledge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ gravapple: {
+ inherit: true,
+ basePower: 90,
+ },
+ growl: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ growth: {
+ inherit: true,
+ type: "Grass",
+ },
+ gust: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ happyhour: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ harden: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ headbutt: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ heartswap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ holdback: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ holdhands: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ honeclaws: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ hornattack: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ hydrosteam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ hyperdrill: {
+ inherit: true,
+ basePower: 120,
+ isNonstandard: "Past",
+ },
+ hyperspacefury: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ hyperspacehole: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ iceburn: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ incinerate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ infernalparade: {
+ inherit: true,
+ basePower: 65,
+ },
+ ironhead: {
+ inherit: true,
+ secondary: {
+ chance: 20,
+ volatileStatus: 'flinch',
+ },
+ desc: "Has a 20% chance to make the target flinch.",
+ shortDesc: "20% chance to make the target flinch.",
+ },
+ ivycudgel: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ jawlock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ judgment: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ junglehealing: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ kingsshield: {
+ inherit: true,
+ isNonstandard: null,
+ pp: 5,
+ },
+ leafage: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ leer: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lick: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lightofruin: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ lunarblessing: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lunardance: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ lusterpurge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ magicalleaf: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ magicaltorque: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ magmastorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ makeitrain: {
+ inherit: true,
+ accuracy: 95,
+ isNonstandard: "Past",
+ },
+ malignantchain: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ megadrain: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ megapunch: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ metalclaw: {
+ inherit: true,
+ isNonstandard: "Past",
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
+ },
+ metronome: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mightycleave: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mimic: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mist: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mistball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ moonblast: {
+ inherit: true,
+ secondary: {
+ chance: 10,
+ boosts: {
+ spa: -1,
+ },
+ },
+ desc: "Has a 10% chance to lower the target's Special Attack by 1 stage.",
+ shortDesc: "10% chance to lower the target's Sp. Atk by 1.",
+ },
+ moongeistbeam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ mountaingale: {
+ inherit: true,
+ basePower: 120,
+ },
+ mysticalpower: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ nightdaze: {
+ inherit: true,
+ basePower: 90,
+ },
+ nightslash: {
+ inherit: true,
+ pp: 20,
+ },
+ nihillight: {
+ inherit: true,
+ pp: 5,
+ },
+ noretreat: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ noxioustorque: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ obstruct: {
+ inherit: true,
+ pp: 5,
+ },
+ orderup: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ originpulse: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ overdrive: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ payday: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ peck: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ photongeyser: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ playnice: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ poisongas: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ poisonsting: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ poisontail: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powdersnow: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ powershift: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ precipiceblades: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ present: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ prismaticlaser: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ protect: {
+ inherit: true,
+ pp: 5,
+ },
+ psybeam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ psyblade: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ psychoboost: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ psyshieldbash: {
+ inherit: true,
+ basePower: 90,
+ },
+ psystrike: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ purify: {
+ inherit: true,
+ pp: 5,
+ },
+ pyroball: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ragefist: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ // ragepowder: {
+ // inherit: true,
+ // flags: { noassist: 1, failcopycat: 1 },
+ // },
+ razorleaf: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ relicsong: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ retaliate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ revelationdance: {
+ inherit: true,
+ basePower: 100,
+ isNonstandard: "Past",
+ },
+ revivalblessing: {
+ inherit: true,
+ isNonstandard: "Custom",
+ },
+ roaroftime: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rocksmash: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rockthrow: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ rollout: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ ruination: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sacredfire: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ saltcure: {
+ inherit: true,
+ condition: {
+ inherit: true,
+ onResidual(pokemon) {
+ this.damage(pokemon.baseMaxhp / (pokemon.hasType(['Water', 'Steel']) ? 8 : 16));
+ },
+ },
+ desc: "Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the target is Steel or Water type), rounded down, at the end of each turn during effect. This effect ends when the target is no longer active.",
+ shortDesc: "Deals 1/16 max HP each turn; 1/8 on Steel, Water.",
+ },
+ sandattack: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sandsearstorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sandstorm: {
+ inherit: true,
+ pp: 5,
+ },
+ scratch: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ secretsword: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ seedflare: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ shadowclaw: {
+ inherit: true,
+ flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
+ },
+ shadowforce: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ shelltrap: {
+ inherit: true,
+ pp: 10,
+ },
+ shiftgear: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ shockwave: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ shoreup: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ silktrap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sketch: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ slam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ slash: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sludge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ smog: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ smokescreen: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ snaptrap: {
+ inherit: true,
+ isNonstandard: null,
+ type: "Steel",
+ },
+ snipeshot: {
+ inherit: true,
+ basePower: 85,
+ isNonstandard: "Past",
+ },
+ snowscape: {
+ inherit: true,
+ pp: 5,
+ },
+ spacialrend: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ spark: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ spikyshield: {
+ inherit: true,
+ pp: 5,
+ },
+ spinout: {
+ inherit: true,
+ isNonstandard: "Past",
+ pp: 10,
+ },
+ spiritbreak: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ spiritshackle: {
+ inherit: true,
+ basePower: 90,
+ },
+ splash: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ springtidestorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ steameruption: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ stomp: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ stormthrow: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ strangesteam: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ strength: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ sunsteelstrike: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ supersonic: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ surgingstrikes: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ swift: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ syrupbomb: {
+ inherit: true,
+ accuracy: 90,
+ },
+ tachyoncutter: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tackle: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tailglow: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tailwhip: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ takedown: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ takeheart: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tarshot: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ teleport: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ terablast: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ terastarstorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ thundercage: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ thunderclap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ thunderouskick: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ thundershock: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ topsyturvy: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ toxicthread: {
+ inherit: true,
+ boosts: {
+ spe: -2,
+ },
+ desc: "Lowers the target's Speed by 2 stages and poisons it.",
+ shortDesc: "Lowers the target's Speed by 2 and poisons it.",
+ },
+ trickortreat: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ tripledive: {
+ inherit: true,
+ basePower: 35,
+ isNonstandard: "Past",
+ },
+ triplekick: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ tropkick: {
+ inherit: true,
+ basePower: 85,
+ },
+ twister: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ vcreate: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ victorydance: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ vinewhip: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ visegrip: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ watergun: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ waterpledge: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wickedblow: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wickedtorque: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wildboltstorm: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ wingattack: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ withdraw: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ workup: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+ zingzap: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
+};
diff --git a/data/mods/champions/rulesets.ts b/data/mods/champions/rulesets.ts
new file mode 100644
index 0000000000..5ca3785e6d
--- /dev/null
+++ b/data/mods/champions/rulesets.ts
@@ -0,0 +1,39 @@
+export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable = {
+ standardag: {
+ inherit: true,
+ ruleset: [
+ 'Obtainable', 'Team Preview', 'Cancel Mod', 'Endless Battle Clause',
+ 'Adjust Level = 50', 'Item Clause = 1',
+ ],
+ onBegin() {
+ this.reportPercentages = true;
+ },
+ },
+ standard: {
+ inherit: true,
+ ruleset: [
+ 'Standard AG',
+ 'Sleep Moves Clause', 'Species Clause', 'Nickname Clause', 'OHKO Clause',
+ ],
+ },
+ standarddraft: {
+ inherit: true,
+ ruleset: [
+ 'Standard AG',
+ 'Nickname Clause', 'Beat Up Nicknames Mod', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause',
+ ],
+ onBegin() {
+ this.reportPercentages = true;
+ },
+ // timer: {starting: 60 * 60, grace: 0, addPerTurn: 10, maxPerTurn: 100, timeoutAutoChoose: true},
+ },
+ flatrules: {
+ inherit: true,
+ desc: "The in-game Flat Rules: Adjust Level 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.",
+ ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ banlist: ['Mythical', 'Restricted Legendary'],
+ onBegin() {
+ this.reportPercentages = true;
+ },
+ },
+};
diff --git a/data/mods/champions/scripts.ts b/data/mods/champions/scripts.ts
new file mode 100644
index 0000000000..b673b5c8d2
--- /dev/null
+++ b/data/mods/champions/scripts.ts
@@ -0,0 +1,488 @@
+export const Scripts: ModdedBattleScriptsData = {
+ gen: 9,
+ init() {
+ for (const i in this.data.Moves) {
+ if (this.data.Moves[i].pp > 20) {
+ this.modData('Moves', i).pp = 20;
+ }
+ }
+ },
+ statModify(baseStats, set, statName) {
+ const tr = this.trunc;
+ let stat = baseStats[statName];
+ const evs = set.evs[statName];
+ if (statName === 'hp') {
+ return stat + evs + 75;
+ }
+ stat = stat + evs + 20;
+ const nature = this.dex.natures.get(set.nature);
+ // Natures are calculated with 16-bit truncation.
+ // This only affects Eternatus-Eternamax in Pure Hackmons.
+ if (nature.plus === statName) {
+ stat = this.ruleTable.has('overflowstatmod') ? Math.min(stat, 595) : stat;
+ stat = tr(tr(stat * 110, 16) / 100);
+ } else if (nature.minus === statName) {
+ stat = this.ruleTable.has('overflowstatmod') ? Math.min(stat, 728) : stat;
+ stat = tr(tr(stat * 90, 16) / 100);
+ }
+ return stat;
+ },
+ calculatePP(move, ppUps) {
+ return move.noPPBoosts ? move.pp : (move.pp / 5 + 1) * 4;
+ },
+ checkMoveBreaksProtect(move, attacker, defender, blockStatus = true) {
+ if (move.flags['protect'] && (move.category !== 'Status' || blockStatus)) {
+ return false;
+ }
+ if ((move.isZOrMaxPowered || attacker.hasAbility(['piercingdrill', 'unseenfist'])) &&
+ !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) {
+ defender.getMoveHitData(move).brokeProtect = true;
+ }
+ return true;
+ },
+ pokemon: {
+ // Don't revert Mega Evolutions after fainting
+ // TODO: confirm interaction with Revival Blessing
+ formeChange(speciesId, source, isPermanent, abilitySlot = '0', message) {
+ const rawSpecies = this.battle.dex.species.get(speciesId);
+
+ const species = this.setSpecies(rawSpecies, source);
+ if (!species) return false;
+
+ if (this.battle.gen <= 2) return true;
+
+ // The species the opponent sees
+ const apparentSpecies =
+ this.illusion ? this.illusion.species.name : species.baseSpecies;
+ if (isPermanent) {
+ this.baseSpecies = rawSpecies;
+ this.details = this.getUpdatedDetails();
+ let details = (this.illusion || this).details;
+ if (this.terastallized) details += `, tera:${this.terastallized}`;
+ this.battle.add('detailschange', this, details);
+ this.updateMaxHp();
+ if (!source) {
+ // Tera forme
+ // Ogerpon/Terapagos text goes here
+ this.formeRegression = true;
+ } else if (source.effectType === 'Item') {
+ this.canTerastallize = null; // National Dex behavior
+ if (source.zMove) {
+ this.battle.add('-burst', this, apparentSpecies, species.requiredItem);
+ this.moveThisTurnResult = true; // Ultra Burst counts as an action for Truant
+ } else if (source.isPrimalOrb) {
+ if (this.illusion) {
+ this.ability = '';
+ this.battle.add('-primal', this.illusion, species.requiredItem);
+ } else {
+ this.battle.add('-primal', this, species.requiredItem);
+ }
+ } else {
+ this.battle.add('-mega', this, apparentSpecies, species.requiredItem);
+ this.moveThisTurnResult = true; // Mega Evolution counts as an action for Truant
+ }
+ } else if (source.effectType === 'Status') {
+ // Shaymin-Sky -> Shaymin
+ this.battle.add('-formechange', this, species.name, message);
+ }
+ } else {
+ if (source?.effectType === 'Ability') {
+ this.battle.add('-formechange', this, species.name, message, `[from] ability: ${source.name}`);
+ } else {
+ this.battle.add('-formechange', this, this.illusion ? this.illusion.species.name : species.name, message);
+ }
+ }
+ if (isPermanent && (!source || !['disguise', 'iceface'].includes(source.id))) {
+ if (this.illusion && source) {
+ // Tera forme by Ogerpon or Terapagos breaks the Illusion
+ this.ability = ''; // Don't allow Illusion to wear off
+ }
+ const ability = species.abilities[abilitySlot] || species.abilities['0'];
+ // Ogerpon's forme change doesn't override permanent abilities
+ if (source || !this.getAbility().flags['cantsuppress']) this.setAbility(ability, null, null, true);
+ // However, its ability does reset upon switching out
+ this.baseAbility = this.battle.toID(ability);
+ }
+ if (this.terastallized) {
+ this.knownType = true;
+ this.apparentType = this.terastallized;
+ }
+ return true;
+ },
+ // Announce status immunities from abilities without revealing the ability
+ // TODO: check if this happens to other abilities besides Spicy Spray (Static, Poison Touch, etc.)
+ setStatus(status, source, sourceEffect, ignoreImmunities) {
+ if (!this.hp) return false;
+ status = this.battle.dex.conditions.get(status);
+ if (this.battle.event) {
+ if (!source) source = this.battle.event.source;
+ if (!sourceEffect) sourceEffect = this.battle.effect;
+ }
+ if (!source) source = this;
+
+ if (this.status === status.id) {
+ if ((sourceEffect as Move)?.status === this.status) {
+ this.battle.add('-fail', this, this.status);
+ } else if ((sourceEffect as Move)?.status) {
+ this.battle.add('-fail', source);
+ this.battle.attrLastMove('[still]');
+ }
+ return false;
+ }
+
+ if (
+ !ignoreImmunities && status.id && !(source?.hasAbility('corrosion') && ['tox', 'psn'].includes(status.id))
+ ) {
+ // the game currently never ignores immunities
+ if (!this.runStatusImmunity(status.id === 'tox' ? 'psn' : status.id)) {
+ this.battle.debug('immune to status');
+ if ((sourceEffect as Move)?.status || sourceEffect?.effectType === 'Ability') {
+ this.battle.add('-immune', this);
+ }
+ return false;
+ }
+ }
+ const prevStatus = this.status;
+ const prevStatusState = this.statusState;
+ if (status.id) {
+ const result: boolean = this.battle.runEvent('SetStatus', this, source, sourceEffect, status);
+ if (!result) {
+ this.battle.debug('set status [' + status.id + '] interrupted');
+ return result;
+ }
+ }
+
+ this.status = status.id;
+ this.statusState = this.battle.initEffectState({ id: status.id, target: this });
+ if (source) this.statusState.source = source;
+ if (status.duration) this.statusState.duration = status.duration;
+ if (status.durationCallback) {
+ this.statusState.duration = status.durationCallback.call(this.battle, this, source, sourceEffect);
+ }
+
+ if (status.id && !this.battle.singleEvent('Start', status, this.statusState, this, source, sourceEffect)) {
+ this.battle.debug('status start [' + status.id + '] interrupted');
+ // cancel the setstatus
+ this.status = prevStatus;
+ this.statusState = prevStatusState;
+ return false;
+ }
+ if (status.id && !this.battle.runEvent('AfterSetStatus', this, source, sourceEffect, status)) {
+ return false;
+ }
+ return true;
+ },
+ // Disable Fake Out if the user has already acted since switching in
+ getMoves(lockedMove, restrictData) {
+ if (lockedMove) {
+ lockedMove = this.battle.toID(lockedMove);
+ if (lockedMove === 'recharge') {
+ return [{
+ move: 'Recharge',
+ id: 'recharge' as ID,
+ }];
+ }
+ for (const moveSlot of this.moveSlots) {
+ if (moveSlot.id !== lockedMove) continue;
+ return [{
+ move: moveSlot.move,
+ id: moveSlot.id,
+ }];
+ }
+ // does this happen?
+ return [{
+ move: this.battle.dex.moves.get(lockedMove).name,
+ id: lockedMove,
+ }];
+ }
+ const moves = [];
+ let hasValidMove = false;
+ for (const moveSlot of this.moveSlots) {
+ let moveName = moveSlot.move;
+ if (moveSlot.id === 'hiddenpower') {
+ moveName = `Hidden Power ${this.hpType}`;
+ if (this.battle.gen < 6) moveName += ` ${this.hpPower}`;
+ } else if (moveSlot.id === 'return' || moveSlot.id === 'frustration') {
+ const basePowerCallback = this.battle.dex.moves.get(moveSlot.id).basePowerCallback as (pokemon: Pokemon) => number;
+ moveName += ` ${basePowerCallback(this)}`;
+ }
+ let target = moveSlot.target;
+ switch (moveSlot.id) {
+ case 'curse':
+ if (!this.hasType('Ghost')) {
+ target = this.battle.dex.moves.get('curse').nonGhostTarget;
+ }
+ break;
+ case 'pollenpuff':
+ // Heal Block only prevents Pollen Puff from targeting an ally when the user has Heal Block
+ if (this.volatiles['healblock']) {
+ target = 'adjacentFoe';
+ }
+ break;
+ case 'terastarstorm':
+ if (this.species.name === 'Terapagos-Stellar') {
+ target = 'allAdjacentFoes';
+ }
+ break;
+ }
+ let disabled = moveSlot.disabled;
+ if (this.volatiles['dynamax']) {
+ // if each of a Pokemon's base moves are disabled by one of these effects, it will Struggle
+ const canCauseStruggle = ['Encore', 'Disable', 'Taunt', 'Assault Vest', 'Belch', 'Stuff Cheeks'];
+ disabled = this.maxMoveDisabled(moveSlot.id) || disabled && canCauseStruggle.includes(moveSlot.disabledSource!);
+ } else if (moveSlot.pp <= 0 || (moveSlot.id === 'fakeout' && this.activeMoveActions > 0)) {
+ disabled = true;
+ }
+
+ if (disabled === 'hidden') {
+ disabled = !restrictData;
+ }
+ if (!disabled) {
+ hasValidMove = true;
+ }
+
+ moves.push({
+ move: moveName,
+ id: moveSlot.id,
+ pp: moveSlot.pp,
+ maxpp: moveSlot.maxpp,
+ target,
+ disabled,
+ });
+ }
+ return hasValidMove ? moves : [];
+ },
+ },
+ actions: {
+ canTerastallize(pokemon) {
+ return null;
+ },
+ // Announce 4x and 0.25x effectiveness
+ modifyDamage(baseDamage, pokemon, target, move, suppressMessages) {
+ const tr = this.battle.trunc;
+ if (!move.type) move.type = '???';
+ const type = move.type;
+
+ baseDamage += 2;
+
+ if (move.spreadHit) {
+ // multi-target modifier (doubles only)
+ const spreadModifier = this.battle.gameType === 'freeforall' ? 0.5 : 0.75;
+ this.battle.debug(`Spread modifier: ${spreadModifier}`);
+ baseDamage = this.battle.modify(baseDamage, spreadModifier);
+ } else if (move.multihitType === 'parentalbond' && move.hit > 1) {
+ // Parental Bond modifier
+ const bondModifier = this.battle.gen > 6 ? 0.25 : 0.5;
+ this.battle.debug(`Parental Bond modifier: ${bondModifier}`);
+ baseDamage = this.battle.modify(baseDamage, bondModifier);
+ }
+
+ // weather modifier
+ baseDamage = this.battle.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage);
+
+ // crit - not a modifier
+ const isCrit = target.getMoveHitData(move).crit;
+ if (isCrit) {
+ baseDamage = tr(baseDamage * (move.critModifier || (this.battle.gen >= 6 ? 1.5 : 2)));
+ }
+
+ // random factor - also not a modifier
+ baseDamage = this.battle.randomizer(baseDamage);
+
+ // STAB
+ // The "???" type never gets STAB
+ // Not even if you Roost in Gen 4 and somehow manage to use
+ // Struggle in the same turn.
+ // (On second thought, it might be easier to get a MissingNo.)
+ if (type !== '???') {
+ let stab: number | [number, number] = 1;
+
+ const isSTAB = move.forceSTAB || pokemon.hasType(type) || pokemon.getTypes(false, true).includes(type);
+ if (isSTAB) {
+ stab = 1.5;
+ }
+
+ // The Stellar tera type makes this incredibly confusing
+ // If the move's type does not match one of the user's base types,
+ // the Stellar tera type applies a one-time 1.2x damage boost for that type.
+ //
+ // If the move's type does match one of the user's base types,
+ // then the Stellar tera type applies a one-time 2x STAB boost for that type,
+ // and then goes back to using the regular 1.5x STAB boost for those types.
+ if (pokemon.terastallized === 'Stellar') {
+ if (!pokemon.stellarBoostedTypes.includes(type) || move.stellarBoosted) {
+ stab = isSTAB ? 2 : [4915, 4096];
+ move.stellarBoosted = true;
+ if (pokemon.species.name !== 'Terapagos-Stellar') {
+ pokemon.stellarBoostedTypes.push(type);
+ }
+ }
+ } else {
+ if (pokemon.terastallized === type && pokemon.getTypes(false, true).includes(type)) {
+ stab = 2;
+ }
+ stab = this.battle.runEvent('ModifySTAB', pokemon, target, move, stab);
+ }
+
+ baseDamage = this.battle.modify(baseDamage, stab);
+ }
+
+ // types
+ let typeMod = target.runEffectiveness(move);
+ typeMod = this.battle.clampIntRange(typeMod, -6, 6);
+ target.getMoveHitData(move).typeMod = typeMod;
+ if (typeMod > 0) {
+ if (!suppressMessages) this.battle.add('-supereffective', target, Math.min(typeMod, 2));
+
+ for (let i = 0; i < typeMod; i++) {
+ baseDamage *= 2;
+ }
+ }
+ if (typeMod < 0) {
+ if (!suppressMessages) this.battle.add('-resisted', target, Math.min(-typeMod, 2));
+
+ for (let i = 0; i > typeMod; i--) {
+ baseDamage = tr(baseDamage / 2);
+ }
+ }
+
+ if (isCrit && !suppressMessages) this.battle.add('-crit', target);
+
+ if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) {
+ if (this.battle.gen < 6 || move.id !== 'facade') {
+ baseDamage = this.battle.modify(baseDamage, 0.5);
+ }
+ }
+
+ // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers
+ if (this.battle.gen === 5 && !baseDamage) baseDamage = 1;
+
+ // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
+ baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
+
+ if (target.getMoveHitData(move).brokeProtect) {
+ baseDamage = this.battle.modify(baseDamage, 0.25);
+ if (move.isZOrMaxPowered) this.battle.add('-zbroken', target);
+ }
+
+ // Generation 6-7 moves the check for minimum 1 damage after the final modifier...
+ if (this.battle.gen !== 5 && !baseDamage) return 1;
+
+ // ...but 16-bit truncation happens even later, and can truncate to 0
+ return tr(baseDamage, 16);
+ },
+ // Run `AfterHit` events even if the source fainted
+ spreadMoveHit(targets, pokemon, moveOrMoveName, hitEffect?, isSecondary?, isSelf?) {
+ // Hardcoded for single-target purposes
+ // (no spread moves have any kind of onTryHit handler)
+ const target = targets[0];
+ let damage: (number | boolean | undefined)[] = [];
+ for (const i of targets.keys()) {
+ damage[i] = true;
+ }
+ const move = this.dex.getActiveMove(moveOrMoveName);
+ let hitResult: boolean | number | null = true;
+ let moveData = hitEffect!;
+ if (!moveData) moveData = move;
+ if (!moveData.flags) moveData.flags = {};
+ if (move.target === 'all' && !isSelf) {
+ hitResult = this.battle.singleEvent('TryHitField', moveData, {}, target || null, pokemon, move);
+ } else if ((move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') && !isSelf) {
+ hitResult = this.battle.singleEvent('TryHitSide', moveData, {}, target || null, pokemon, move);
+ } else if (target) {
+ hitResult = this.battle.singleEvent('TryHit', moveData, {}, target, pokemon, move);
+ }
+ if (!hitResult) {
+ if (hitResult === false) {
+ this.battle.add('-fail', pokemon);
+ this.battle.attrLastMove('[still]');
+ }
+ return [[false], targets]; // single-target only
+ }
+
+ // 0. check for substitute
+ if (!isSecondary && !isSelf) {
+ if (move.target !== 'all' && move.target !== 'allyTeam' && move.target !== 'allySide' && move.target !== 'foeSide') {
+ damage = this.tryPrimaryHitEvent(damage, targets, pokemon, move, moveData, isSecondary);
+ }
+ }
+
+ for (const i of targets.keys()) {
+ if (damage[i] === this.battle.HIT_SUBSTITUTE) {
+ damage[i] = true;
+ targets[i] = null;
+ }
+ if (targets[i] && isSecondary && !moveData.self) {
+ damage[i] = true;
+ }
+ if (!damage[i]) targets[i] = false;
+ }
+ // 1. call to this.battle.getDamage
+ damage = this.getSpreadDamage(damage, targets, pokemon, move, moveData, isSecondary, isSelf);
+
+ for (const i of targets.keys()) {
+ if (damage[i] === false) targets[i] = false;
+ }
+
+ // 2. call to this.battle.spreadDamage
+ damage = this.battle.spreadDamage(damage, targets, pokemon, move);
+
+ for (const i of targets.keys()) {
+ if (damage[i] === false) targets[i] = false;
+ }
+
+ // 3. onHit event happens here
+ damage = this.runMoveEffects(damage, targets, pokemon, move, moveData, isSecondary, isSelf);
+
+ for (const i of targets.keys()) {
+ if (!damage[i] && damage[i] !== 0) targets[i] = false;
+ }
+
+ // steps 4 and 5 can mess with this.battle.activeTarget, which needs to be preserved for Dancer
+ const activeTarget = this.battle.activeTarget;
+
+ // 4. self drops (start checking for targets[i] === false here)
+ if (moveData.self && !move.selfDropped) this.selfDrops(targets, pokemon, move, moveData, isSecondary);
+
+ // 5. secondary effects
+ if (moveData.secondaries) this.secondaries(targets, pokemon, move, moveData, isSelf);
+
+ this.battle.activeTarget = activeTarget;
+
+ // 6. force switch
+ if (moveData.forceSwitch) damage = this.forceSwitch(damage, targets, pokemon, move);
+
+ for (const i of targets.keys()) {
+ if (!damage[i] && damage[i] !== 0) targets[i] = false;
+ }
+
+ const damagedTargets: Pokemon[] = [];
+ const damagedDamage = [];
+ for (const [i, t] of targets.entries()) {
+ if (typeof damage[i] === 'number' && t) {
+ damagedTargets.push(t);
+ damagedDamage.push(damage[i]);
+ }
+ }
+ const pokemonOriginalHP = pokemon.hp;
+ if (damagedDamage.length && !isSecondary && !isSelf) {
+ if (this.battle.gen >= 5) {
+ this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
+ }
+ if (moveData.onAfterHit) {
+ for (const t of damagedTargets) {
+ this.battle.singleEvent('AfterHit', moveData, {}, t, pokemon, move);
+ }
+ }
+ if (this.battle.gen < 5) {
+ this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
+ }
+ if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) {
+ this.battle.runEvent('EmergencyExit', pokemon);
+ }
+ }
+
+ return [damage, targets];
+ },
+ },
+};
diff --git a/data/mods/chatbats/moves.ts b/data/mods/chatbats/moves.ts
index 5a09a1c96f..05372a44e8 100644
--- a/data/mods/chatbats/moves.ts
+++ b/data/mods/chatbats/moves.ts
@@ -1106,10 +1106,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index e2816b4541..ce94d9012a 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1019,7 +1019,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect']) return;
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
this.add('-activate', target, 'Protect');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts
index bb0f793430..4c0eff62aa 100644
--- a/data/mods/gen5/moves.ts
+++ b/data/mods/gen5/moves.ts
@@ -663,12 +663,13 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
condition: {
inherit: true,
- onTryHit(target, source, effect) {
+ onTryHit(target, source, move) {
// Quick Guard only blocks moves with a natural positive priority
// (e.g. it doesn't block 0 priority moves boosted by Prankster)
- if (effect && (effect.id === 'feint' || this.dex.moves.get(effect.id).priority <= 0)) {
+ if (move.id === 'feint' || this.dex.moves.get(move.id).priority <= 0) {
return;
}
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
this.add('-activate', target, 'Quick Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
@@ -685,6 +686,19 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
priority: 3,
flags: { noassist: 1, failcopycat: 1 },
+ condition: {
+ inherit: true,
+ onFoeRedirectTarget(target, source, source2, move) {
+ const ragePowderUser = this.effectState.target;
+ if (ragePowderUser.isSkyDropped()) return;
+
+ if (this.validTarget(ragePowderUser, source, move.target)) {
+ if (move.smartTarget) move.smartTarget = false;
+ this.debug("Rage Powder redirected target of move");
+ return ragePowderUser;
+ }
+ },
+ },
},
reflect: {
inherit: true,
diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts
index 81483dc239..dbbbc5d088 100644
--- a/data/mods/gen6/moves.ts
+++ b/data/mods/gen6/moves.ts
@@ -169,14 +169,12 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
condition: {
inherit: true,
- onTryHit(target, source, effect) {
+ onTryHit(target, source, move) {
// Wide Guard blocks damaging spread moves
- if (
- effect &&
- (effect.category === 'Status' || (effect.target !== 'allAdjacent' && effect.target !== 'allAdjacentFoes'))
- ) {
+ if (move.category === 'Status' || (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes')) {
return;
}
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Wide Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts
index c19919fa33..1978d7defd 100644
--- a/data/mods/gen7/moves.ts
+++ b/data/mods/gen7/moves.ts
@@ -498,10 +498,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Protect');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen9legendsou/abilities.ts b/data/mods/gen9legendsou/abilities.ts
index 69612df64f..770a01461d 100644
--- a/data/mods/gen9legendsou/abilities.ts
+++ b/data/mods/gen9legendsou/abilities.ts
@@ -7,4 +7,12 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
inherit: true,
isNonstandard: null,
},
+ piercingdrill: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ spicyspray: {
+ inherit: true,
+ isNonstandard: null,
+ },
};
diff --git a/data/mods/gen9legendsou/pokedex.ts b/data/mods/gen9legendsou/pokedex.ts
index e746555e29..41913e5045 100644
--- a/data/mods/gen9legendsou/pokedex.ts
+++ b/data/mods/gen9legendsou/pokedex.ts
@@ -1,12 +1,4 @@
export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable = {
- clefablemega: {
- inherit: true,
- abilities: { 0: "Prankster" },
- },
- victreebelmega: {
- inherit: true,
- abilities: { 0: "Triage" },
- },
raichumegax: {
inherit: true,
abilities: { 0: "Levitate" },
@@ -15,11 +7,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Transistor" },
},
- starmiemega: {
- inherit: true,
- baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 },
- abilities: { 0: "Pure Power" },
- },
ampharosmega: {
inherit: true,
abilities: { 0: "Fluffy" },
@@ -28,14 +15,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Technician" },
},
- chimechomega: {
- inherit: true,
- abilities: { 0: "Levitate" },
- },
- skarmorymega: {
- inherit: true,
- abilities: { 0: "Tough Claws" },
- },
mawilemega: {
inherit: true,
baseStats: { hp: 50, atk: 105, def: 125, spa: 55, spd: 95, spe: 50 },
@@ -68,14 +47,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Dark Aura" },
},
- excadrillmega: {
- inherit: true,
- abilities: { 0: "Sand Rush" },
- },
- golurkmega: {
- inherit: true,
- abilities: { 0: "Adaptability" },
- },
audinomega: {
inherit: true,
abilities: { 0: "Regenerator" },
@@ -92,18 +63,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Hadron Engine" },
},
- chandeluremega: {
- inherit: true,
- abilities: { 0: "Magic Guard" },
- },
- meowsticmmega: {
- inherit: true,
- abilities: { 0: "Psychic Surge" },
- },
- meowsticfmega: {
- inherit: true,
- abilities: { 0: "Psychic Surge" },
- },
pyroarmega: {
inherit: true,
abilities: { 0: "Drought" },
@@ -112,10 +71,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Regenerator" },
},
- floettemega: {
- inherit: true,
- abilities: { 0: "Regenerator" },
- },
malamarmega: {
inherit: true,
abilities: { 0: "Contrary" },
@@ -124,26 +79,14 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Tough Claws" },
},
- hawluchamega: {
- inherit: true,
- abilities: { 0: "Stamina" },
- },
zygardemega: {
inherit: true,
abilities: { 0: "Aura Break" },
},
- crabominablemega: {
- inherit: true,
- abilities: { 0: "Ice Scales" },
- },
golisopodmega: {
inherit: true,
abilities: { 0: "Heatproof" },
},
- drampamega: {
- inherit: true,
- abilities: { 0: "Adaptability" },
- },
magearnamega: {
inherit: true,
abilities: { 0: "Soul-Heart" },
@@ -160,14 +103,6 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Dauntless Shield" },
},
- scovillainmega: {
- inherit: true,
- abilities: { 0: "Contrary" },
- },
- glimmoramega: {
- inherit: true,
- abilities: { 0: "Levitate" },
- },
tatsugiricurlymega: {
inherit: true,
abilities: { 0: "Drizzle" },
diff --git a/data/mods/gen9regeneration/scripts.ts b/data/mods/gen9regeneration/scripts.ts
index c1b723b53c..59b63fd63f 100644
--- a/data/mods/gen9regeneration/scripts.ts
+++ b/data/mods/gen9regeneration/scripts.ts
@@ -108,7 +108,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index abfa25a8a6..b49e54f9d6 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -1060,11 +1060,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -1174,11 +1170,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -4013,12 +4005,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
- if (move && (move.target === 'self' || move.category === 'Status')) return;
+ if (move.target === 'self') return;
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Alting', move.name);
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
index 8d999b0d2d..d49854e479 100644
--- a/data/mods/gen9ssb/scripts.ts
+++ b/data/mods/gen9ssb/scripts.ts
@@ -772,7 +772,7 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/mixandmega/scripts.ts b/data/mods/mixandmega/scripts.ts
index 1655ecf0f0..8c59398f4e 100644
--- a/data/mods/mixandmega/scripts.ts
+++ b/data/mods/mixandmega/scripts.ts
@@ -3,6 +3,8 @@ export const Scripts: ModdedBattleScriptsData = {
init() {
this.modData('Abilities', 'dragonize').isNonstandard = null;
this.modData('Abilities', 'megasol').isNonstandard = null;
+ this.modData('Abilities', 'piercingdrill').isNonstandard = null;
+ this.modData('Abilities', 'spicyspray').isNonstandard = null;
for (const i in this.data.Items) {
const item = this.data.Items[i];
if (!item.megaStone && !item.onDrive && !(item.onPlate && !item.zMove) && !item.onMemory) continue;
diff --git a/data/mods/passiveaggressive/moves.ts b/data/mods/passiveaggressive/moves.ts
index 78a2f7408a..4e66d008a3 100644
--- a/data/mods/passiveaggressive/moves.ts
+++ b/data/mods/passiveaggressive/moves.ts
@@ -215,11 +215,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/moves.ts b/data/moves.ts
index b3e9ca2e46..312885acc8 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -1006,11 +1006,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -2042,11 +2038,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -2232,7 +2224,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
onAfterHit(target, source, move) {
- if (!move.hasSheerForce && source.hp) {
+ if (!move.hasSheerForce) {
for (const side of source.side.foeSidesWithConditions()) {
side.addSideCondition('spikes');
}
@@ -9439,9 +9431,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
onAfterHit(target, source) {
- if (source.hp) {
- this.field.clearTerrain();
- }
+ this.field.clearTerrain();
},
onAfterSubDamage(damage, target, source) {
if (source.hp) {
@@ -9944,11 +9934,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -9994,11 +9980,9 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
}
},
onAfterHit(target, source) {
- if (source.hp) {
- const item = target.takeItem();
- if (item) {
- this.add('-enditem', target, item.name, '[from] move: Knock Off', `[of] ${source}`);
- }
+ const item = target.takeItem();
+ if (item) {
+ this.add('-enditem', target, item.name, '[from] move: Knock Off', `[of] ${source}`);
}
},
target: "normal",
@@ -11028,12 +11012,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
- if (move && (move.target === 'self' || move.category === 'Status')) return;
+ if (move.target === 'self') return;
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Mat Block', move.name);
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
@@ -12353,16 +12333,16 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
onAfterHit(target, pokemon, move) {
if (!move.hasSheerForce) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ if (pokemon.removeVolatile('leechseed')) {
this.add('-end', pokemon, 'Leech Seed', '[from] move: Mortal Spin', `[of] ${pokemon}`);
}
const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ if (pokemon.side.removeSideCondition(condition)) {
this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Mortal Spin', `[of] ${pokemon}`);
}
}
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ if (pokemon.volatiles['partiallytrapped']) {
pokemon.removeVolatile('partiallytrapped');
}
}
@@ -12926,11 +12906,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -14017,11 +13993,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -14551,11 +14523,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
// Quick Guard blocks moves with positive priority, even those given increased priority by Prankster or Gale Wings.
// (e.g. it blocks 0 priority moves boosted by Prankster or Gale Wings; Quick Claw/Custap Berry do not count)
if (move.priority <= 0.1) return;
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
this.add('-activate', target, 'move: Quick Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
@@ -14745,16 +14713,16 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1 },
onAfterHit(target, pokemon, move) {
if (!move.hasSheerForce) {
- if (pokemon.hp && pokemon.removeVolatile('leechseed')) {
+ if (pokemon.removeVolatile('leechseed')) {
this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', `[of] ${pokemon}`);
}
const sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'gmaxsteelsurge'];
for (const condition of sideConditions) {
- if (pokemon.hp && pokemon.side.removeSideCondition(condition)) {
+ if (pokemon.side.removeSideCondition(condition)) {
this.add('-sideend', pokemon.side, this.dex.conditions.get(condition).name, '[from] move: Rapid Spin', `[of] ${pokemon}`);
}
}
- if (pokemon.hp && pokemon.volatiles['partiallytrapped']) {
+ if (pokemon.volatiles['partiallytrapped']) {
pokemon.removeVolatile('partiallytrapped');
}
}
@@ -16474,10 +16442,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect'] || move.category === 'Status') {
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -17285,7 +17250,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return;
}
this.add('-prepare', attacker, move.name);
- if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) {
+ if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather(true))) {
this.attrLastMove('[still]');
this.addMove('-anim', attacker, move.name, defender);
return;
@@ -17321,7 +17286,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
return;
}
this.add('-prepare', attacker, move.name);
- if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather())) {
+ if (['sunnyday', 'desolateland'].includes(attacker.effectiveWeather(true))) {
this.attrLastMove('[still]');
this.addMove('-anim', attacker, move.name, defender);
return;
@@ -17603,11 +17568,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (!move.flags['protect']) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- if (move.isZ || move.isMax) target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -18135,7 +18096,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
priority: 0,
flags: { contact: 1, protect: 1, mirror: 1, metronome: 1, slicing: 1 },
onAfterHit(target, source, move) {
- if (!move.hasSheerForce && source.hp) {
+ if (!move.hasSheerForce) {
for (const side of source.side.foeSidesWithConditions()) {
side.addSideCondition('stealthrock');
}
@@ -20899,11 +20860,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes') {
return;
}
- if (move.isZ || move.isMax) {
- if (['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) return;
- target.getMoveHitData(move).zBrokeProtect = true;
- return;
- }
+ if (this.checkMoveBreaksProtect(move, source, target)) return;
this.add('-activate', target, 'move: Wide Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/pokedex.ts b/data/pokedex.ts
index dcdf2a2c74..8ced11d3b9 100644
--- a/data/pokedex.ts
+++ b/data/pokedex.ts
@@ -1039,7 +1039,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Fairy", "Flying"],
genderRatio: { M: 0.25, F: 0.75 },
baseStats: { hp: 95, atk: 80, def: 93, spa: 135, spd: 110, spe: 70 },
- abilities: { 0: "Cute Charm", 1: "Magic Guard", H: "Unaware" },
+ abilities: { 0: "Magic Bounce" },
heightm: 1.7,
weightkg: 42.3,
color: "Pink",
@@ -1723,7 +1723,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Grass", "Poison"],
baseStats: { hp: 80, atk: 125, def: 85, spa: 135, spd: 95, spe: 70 },
- abilities: { 0: "Chlorophyll", H: "Gluttony" },
+ abilities: { 0: "Innards Out" },
heightm: 4.5,
weightkg: 125.5,
color: "Green",
@@ -2736,9 +2736,8 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Water", "Psychic"],
gender: "N",
- // FIXME: change stats on generation shift
- baseStats: { hp: 60, atk: 140, def: 105, spa: 130, spd: 105, spe: 120 },
- abilities: { 0: "Illuminate", 1: "Natural Cure", H: "Analytic" },
+ baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 },
+ abilities: { 0: "Huge Power" },
heightm: 2.3,
weightkg: 80,
color: "Purple",
@@ -4636,7 +4635,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Steel", "Flying"],
baseStats: { hp: 65, atk: 140, def: 110, spa: 40, spd: 100, spe: 110 },
- abilities: { 0: "Keen Eye", 1: "Sturdy", H: "Weak Armor" },
+ abilities: { 0: "Stalwart" },
heightm: 1.7,
weightkg: 40.4,
color: "Gray",
@@ -9913,7 +9912,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Ground", "Steel"],
baseStats: { hp: 110, atk: 165, def: 100, spa: 65, spd: 65, spe: 103 },
- abilities: { 0: "Sand Rush", 1: "Sand Force", H: "Mold Breaker" },
+ abilities: { 0: "Piercing Drill" },
heightm: 0.9,
weightkg: 60,
color: "Gray",
@@ -11224,7 +11223,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Ghost", "Fire"],
baseStats: { hp: 60, atk: 75, def: 110, spa: 175, spd: 110, spe: 90 },
- abilities: { 0: "Flash Fire", 1: "Flame Body", H: "Infiltrator" },
+ abilities: { 0: "Infiltrator" },
heightm: 2.5,
weightkg: 69.6,
color: "Black",
@@ -11433,7 +11432,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Ground", "Ghost"],
gender: "N",
baseStats: { hp: 89, atk: 159, def: 105, spa: 70, spd: 105, spe: 55 },
- abilities: { 0: "Iron Fist", 1: "Klutz", H: "No Guard" },
+ abilities: { 0: "Unseen Fist" },
heightm: 4,
weightkg: 330,
color: "Green",
@@ -12573,7 +12572,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Fairy"],
gender: "F",
baseStats: { hp: 74, atk: 85, def: 87, spa: 155, spd: 148, spe: 102 },
- abilities: { 0: "Flower Veil", H: "Symbiosis" },
+ abilities: { 0: "Fairy Aura" },
heightm: 0.2,
weightkg: 100.8,
color: "White",
@@ -12729,7 +12728,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Psychic"],
gender: "M",
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
- abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
+ abilities: { 0: "Trace" },
heightm: 0.8,
weightkg: 10.1,
color: "Blue",
@@ -12746,7 +12745,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
types: ["Psychic"],
gender: "F",
baseStats: { hp: 74, atk: 48, def: 76, spa: 143, spd: 101, spe: 124 },
- abilities: { 0: "Keen Eye", 1: "Infiltrator", H: "Competitive" },
+ abilities: { 0: "Trace" },
heightm: 0.8,
weightkg: 10.1,
color: "White",
@@ -13134,7 +13133,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Fighting", "Flying"],
baseStats: { hp: 78, atk: 137, def: 100, spa: 74, spd: 93, spe: 118 },
- abilities: { 0: "Limber", 1: "Unburden", H: "Mold Breaker" },
+ abilities: { 0: "No Guard" },
heightm: 1,
weightkg: 25,
color: "Green",
@@ -13960,7 +13959,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Fighting", "Ice"],
baseStats: { hp: 97, atk: 157, def: 122, spa: 62, spd: 107, spe: 33 },
- abilities: { 0: "Hyper Cutter", 1: "Iron Fist", H: "Anger Point" },
+ abilities: { 0: "Iron Fist" },
heightm: 2.6,
weightkg: 252.8,
color: "White",
@@ -15075,7 +15074,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Normal", "Dragon"],
baseStats: { hp: 78, atk: 85, def: 110, spa: 160, spd: 116, spe: 36 },
- abilities: { 0: "Berserk", 1: "Sap Sipper", H: "Cloud Nine" },
+ abilities: { 0: "Berserk" },
heightm: 3,
weightkg: 240.5,
color: "White",
@@ -18281,7 +18280,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Grass", "Fire"],
baseStats: { hp: 65, atk: 138, def: 85, spa: 138, spd: 85, spe: 75 },
- abilities: { 0: "Chlorophyll", 1: "Insomnia", H: "Moody" },
+ abilities: { 0: "Spicy Spray" },
heightm: 1.2,
weightkg: 22,
color: "Green",
@@ -18541,7 +18540,7 @@ export const Pokedex: import('../sim/dex-species').SpeciesDataTable = {
forme: "Mega",
types: ["Rock", "Poison"],
baseStats: { hp: 83, atk: 90, def: 105, spa: 150, spd: 96, spe: 101 },
- abilities: { 0: "Toxic Debris", H: "Corrosion" },
+ abilities: { 0: "Adaptability" },
heightm: 2.8,
weightkg: 77,
color: "Blue",
diff --git a/data/text/abilities.ts b/data/text/abilities.ts
index 3348e5229b..a5990e6191 100644
--- a/data/text/abilities.ts
+++ b/data/text/abilities.ts
@@ -1248,6 +1248,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = {
addItem: "#recycle",
},
+ piercingdrill: {
+ name: "Piercing Drill",
+ shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.",
+ },
pixilate: {
name: "Pixilate",
desc: "This Pokemon's Normal-type moves become Fairy-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.",
@@ -1764,6 +1768,10 @@ export const AbilitiesText: { [id: IDEntry]: AbilityText } = {
desc: "This Pokemon's Speed is raised by 1 stage at the end of each full turn it has been on the field.",
shortDesc: "This Pokemon's Speed is raised 1 stage at the end of each full turn on the field.",
},
+ spicyspray: {
+ name: "Spicy Spray",
+ shortDesc: "If this Pokemon is hit by an attack, the attacker becomes burned.",
+ },
stakeout: {
name: "Stakeout",
shortDesc: "This Pokemon's offensive stat is doubled against a target that switched in this turn.",
diff --git a/server/chat-commands/core.ts b/server/chat-commands/core.ts
index 2247792bd1..7c24e7367d 100644
--- a/server/chat-commands/core.ts
+++ b/server/chat-commands/core.ts
@@ -924,7 +924,9 @@ export const commands: Chat.ChatCommands = {
}
}
- let resultString = Utils.escapeHTML(Teams.export(team, { hideStats }));
+ let resultString = Utils.escapeHTML(Teams.export(team, {
+ hideStats, useStatPoints: toID(battle.format).includes('champions'),
+ }));
if (showAll) {
resultString = `${this.tr`View team`}
${resultString} `;
}
diff --git a/server/rooms.ts b/server/rooms.ts
index f95481c634..3c38659b90 100644
--- a/server/rooms.ts
+++ b/server/rooms.ts
@@ -1497,6 +1497,7 @@ export class GlobalRoomState {
// 32 was previously used for Multi Battles
if (format.bestOfDefault) displayCode |= 64;
if (format.teraPreviewDefault) displayCode |= 128;
+ if (format.itemClauseDefault) displayCode |= 256;
this.formatList += ',' + displayCode.toString(16);
}
return this.formatList;
diff --git a/sim/TEAMS.md b/sim/TEAMS.md
index 857ae73f21..86a38e9b2c 100644
--- a/sim/TEAMS.md
+++ b/sim/TEAMS.md
@@ -186,7 +186,7 @@ NICKNAME|SPECIES|ITEM|ABILITY|MOVES|NATURE|EVS|GENDER|IVS|SHINY|LEVEL|HAPPINESS,
HP, Atk, Def, SpA, SpD, Spe. EVs left blank are 0, IVs left blank are 31.
If all EVs or IVs are blank, the commas can all be left off.
-- `EVS` represent AVs in Pokémon Let's Go.
+- `EVS` represent AVs in Pokémon Let's Go and Stat Points in Pokémon Champions.
- `IVS` represent DVs in Gen 1-2. The IV will be divided by 2 and rounded down,
to become DVs (so the default of 31 IVs is converted to 15 DVs).
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index 92ac6f6635..eac1caae97 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1138,12 +1138,17 @@ export class BattleActions {
}
const pokemonOriginalHP = pokemon.hp;
if (damagedDamage.length && !isSecondary && !isSelf) {
- this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
- if (moveData.onAfterHit) {
+ if (this.battle.gen >= 5) {
+ this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
+ }
+ if (moveData.onAfterHit && pokemon.hp) {
for (const t of damagedTargets) {
this.battle.singleEvent('AfterHit', moveData, {}, t, pokemon, move);
}
}
+ if (this.battle.gen < 5) {
+ this.battle.runEvent('DamagingHit', damagedTargets, pokemon, move, damagedDamage);
+ }
if (pokemon.hp && pokemon.hp <= pokemon.maxhp / 2 && pokemonOriginalHP > pokemon.maxhp / 2) {
this.battle.runEvent('EmergencyExit', pokemon);
}
@@ -1824,9 +1829,9 @@ export class BattleActions {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).zBrokeProtect) {
+ if (target.getMoveHitData(move).brokeProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
- this.battle.add('-zbroken', target);
+ if (move.isZOrMaxPowered) this.battle.add('-zbroken', target);
}
// Generation 6-7 moves the check for minimum 1 damage after the final modifier...
diff --git a/sim/battle.ts b/sim/battle.ts
index 41564d772c..dffd2b6ea9 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -1297,6 +1297,17 @@ export class Battle {
return !!move.flags['contact'];
}
+ checkMoveBreaksProtect(move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus = true) {
+ if (move.flags['protect'] && (move.category !== 'Status' || blockStatus)) {
+ return false;
+ }
+ if ((move.isZOrMaxPowered || attacker.hasAbility('piercingdrill')) &&
+ !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) {
+ defender.getMoveHitData(move).brokeProtect = true;
+ }
+ return true;
+ }
+
skillSwap(source: Pokemon, target: Pokemon) {
if (source.fainted || target.fainted) return false;
if (source.volatiles['dynamax'] || target.volatiles['dynamax']) return false;
diff --git a/sim/dex-formats.ts b/sim/dex-formats.ts
index b0b4a5fcd8..5303b95b86 100644
--- a/sim/dex-formats.ts
+++ b/sim/dex-formats.ts
@@ -281,6 +281,9 @@ export class RuleTable extends Map {
if (format.mod === 'gen7letsgo') {
this.evLimit = this.has('lgpenormalrules') ? 0 : null;
}
+ if (format.mod === 'champions') {
+ this.evLimit = 66;
+ }
// Gen 6 hackmons also has a limit, which is currently implemented
// at the appropriate format.
}
@@ -455,6 +458,7 @@ export class Format extends BasicEffect implements Readonly {
declare readonly searchShow?: boolean;
declare readonly bestOfDefault?: boolean;
declare readonly teraPreviewDefault?: boolean;
+ declare readonly itemClauseDefault?: boolean;
declare readonly threads?: string[];
declare readonly tournamentShow?: boolean;
declare readonly checkCanLearn?: (
@@ -622,6 +626,7 @@ export class DexFormats {
if (format.tournamentShow === undefined) format.tournamentShow = true;
if (format.bestOfDefault === undefined) format.bestOfDefault = false;
if (format.teraPreviewDefault === undefined) format.teraPreviewDefault = false;
+ if (format.itemClauseDefault === undefined) format.itemClauseDefault = false;
if (format.mod === undefined) format.mod = 'gen9';
if (!this.dex.dexes[format.mod]) throw new Error(`Format "${format.name}" requires nonexistent mod: '${format.mod}'`);
diff --git a/sim/dex-items.ts b/sim/dex-items.ts
index 137b27cd42..4546cffe9c 100644
--- a/sim/dex-items.ts
+++ b/sim/dex-items.ts
@@ -16,6 +16,7 @@ export interface ItemData extends Partial- , PokemonEventMethods {
export type ModdedItemData = ItemData | Partial> & {
inherit: true,
onCustap?: (this: Battle, pokemon: Pokemon) => void,
+ onWhiteHerb?: (this: Battle, pokemon: Pokemon) => void,
condition?: ModdedConditionData,
};
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index e32d7e56c6..e964450063 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -302,7 +302,7 @@ interface MoveHitData {
* Is this move a Z-Move that broke the target's protection?
* (does 0.25x regular damage)
*/
- zBrokeProtect: boolean,
+ brokeProtect: boolean,
};
}
diff --git a/sim/global-types.ts b/sim/global-types.ts
index 74625c075a..8b8e780d54 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -279,9 +279,10 @@ interface ModdedBattlePokemon {
this: Pokemon, move: string | Move, amount?: number | null, target?: Pokemon | null | false
) => number;
eatItem?: (this: Pokemon, force?: boolean, source?: Pokemon, sourceEffect?: Effect) => boolean;
- effectiveWeather?: (this: Pokemon) => ID;
+ effectiveWeather?: (this: Pokemon, message?: string | boolean) => ID;
formeChange?: (
- this: Pokemon, speciesId: string | Species, source: Effect, isPermanent?: boolean, message?: string
+ this: Pokemon, speciesId: string | Species, source: Effect, isPermanent?: boolean, abilitySlot?: string,
+ message?: string,
) => boolean;
hasType?: (this: Pokemon, type: string | string[]) => boolean;
getAbility?: (this: Pokemon) => Ability;
@@ -388,6 +389,9 @@ interface ModdedBattleScriptsData extends Partial {
checkMoveMakesContact?: (
this: Battle, move: ActiveMove, attacker: Pokemon, defender: Pokemon, announcePads?: boolean
) => boolean;
+ checkMoveBreaksProtect?: (
+ this: Battle, move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus?: boolean
+ ) => boolean;
checkWin?: (this: Battle, faintQueue?: Battle['faintQueue'][0]) => true | undefined;
fieldEvent?: (this: Battle, eventid: string, targets?: Pokemon[]) => void;
getAllActive?: (this: Battle, includeFainted?: boolean, includeCommanding?: boolean) => Pokemon[];
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 9a355611f3..56c2e071c6 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -708,7 +708,7 @@ export class Pokemon {
return move.moveHitData[slot] || (move.moveHitData[slot] = {
crit: false,
typeMod: 0,
- zBrokeProtect: false,
+ brokeProtect: false,
});
}
@@ -1017,7 +1017,7 @@ export class Pokemon {
// if each of a Pokemon's base moves are disabled by one of these effects, it will Struggle
const canCauseStruggle = ['Encore', 'Disable', 'Taunt', 'Assault Vest', 'Belch', 'Stuff Cheeks'];
disabled = this.maxMoveDisabled(moveSlot.id) || disabled && canCauseStruggle.includes(moveSlot.disabledSource!);
- } else if (moveSlot.pp <= 0 && !this.volatiles['partialtrappinglock']) {
+ } else if (moveSlot.pp <= 0) {
disabled = true;
}
@@ -2180,7 +2180,7 @@ export class Pokemon {
* Like Field.effectiveWeather(), but ignores sun and rain if
* the Utility Umbrella is active for the Pokemon.
*/
- effectiveWeather() {
+ effectiveWeather(message?: string | boolean) {
const weather = this.battle.field.effectiveWeather();
switch (weather) {
case 'sunnyday':
@@ -2189,7 +2189,11 @@ export class Pokemon {
case 'primordialsea':
if (this.hasItem('utilityumbrella')) return '';
}
- if (this.hasAbility('megasol') && this.battle.activePokemon === this) return 'sunnyday';
+ // TODO: check interactions of Mega Sol with Utility Umbrella and Desolate Land
+ if (this.hasAbility('megasol') && this.battle.activePokemon === this && weather !== 'sunnyday') {
+ if (message) this.battle.add('-activate', this, 'ability: Mega Sol');
+ return 'sunnyday';
+ }
return weather;
}
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index fe4d6c3816..a00576f764 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -1126,6 +1126,7 @@ export class TeamValidator {
const dex = this.dex;
const allowAVs = !ruleTable.has('lgpenormalrules');
+ const useStatPoints = dex.currentMod === 'champions';
const evLimit = ruleTable.evLimit;
const canBottleCap = dex.gen >= 7 && (set.level >= (dex.gen < 9 ? 100 : 50) || !ruleTable.has('obtainablemisc'));
@@ -1136,6 +1137,9 @@ export class TeamValidator {
const name = set.name || set.species;
const maxedIVs = Object.values(set.ivs).every(stat => stat === 31);
+ if (useStatPoints && !maxedIVs) {
+ problems.push(`${name}'s IVs are not maxed out, but this format requires all IVs to be 31.`);
+ }
for (const moveName of set.moves) {
const move = dex.moves.get(moveName);
if (move.id === 'hiddenpower' && move.type !== 'Normal') {
@@ -1266,7 +1270,8 @@ export class TeamValidator {
for (const stat in set.evs) {
if (set.evs[stat as 'hp'] < 0) {
- problems.push(`${name} has less than 0 ${allowAVs ? 'Awakening Values' : 'EVs'} in ${Dex.stats.names[stat as 'hp']}.`);
+ const statValue = allowAVs ? 'Awakening Values' : useStatPoints ? 'Stat Points' : 'EVs';
+ problems.push(`${name} has less than 0 ${statValue} in ${Dex.stats.names[stat as 'hp']}.`);
}
}
@@ -1279,6 +1284,12 @@ export class TeamValidator {
problems.push(`${name} has more than 200 Awakening Values in ${Dex.stats.names[stat as 'hp']}.`);
}
}
+ } else if (useStatPoints) {
+ for (const stat in set.evs) {
+ if (set.evs[stat as StatID] > 32) {
+ problems.push(`${name} has more than 32 Stat Points in ${Dex.stats.names[stat as 'hp']}.`);
+ }
+ }
} else { // EVs
for (const stat in set.evs) {
if (set.evs[stat as StatID] > 255) {
@@ -1312,10 +1323,11 @@ export class TeamValidator {
}
if (evLimit !== null && totalEV > evLimit) {
+ const statName = useStatPoints ? 'Stat Points' : 'EVs';
if (!evLimit) {
- problems.push(`${name} has EVs, which is not allowed by this format.`);
+ problems.push(`${name} has ${statName}, which is not allowed by this format.`);
} else {
- problems.push(`${name} has ${totalEV} total EVs, which is more than this format's limit of ${evLimit}.`);
+ problems.push(`${name} has ${totalEV} total ${statName}, which is more than this format's limit of ${evLimit}.`);
}
}
diff --git a/sim/teams.ts b/sim/teams.ts
index ac0f03d9c2..15ff6bdd2c 100644
--- a/sim/teams.ts
+++ b/sim/teams.ts
@@ -13,6 +13,7 @@ import type { PRNG, PRNGSeed } from './prng';
interface ExportOptions {
hideStats?: boolean;
removeNicknames?: boolean | ((nickname: string) => string | null);
+ useStatPoints?: boolean;
}
export interface PokemonSet {
@@ -53,7 +54,7 @@ export interface PokemonSet {
* Effort Values, used in stat calculation.
* These must be between 0 and 255, inclusive.
*
- * Also used to store AVs for Let's Go
+ * Also used to store AVs for Let's Go and Stat Points for Champions
*/
evs: StatsTable;
/**
@@ -371,7 +372,7 @@ export const Teams = new class Teams {
return output;
}
- exportSet(set: PokemonSet, { hideStats, removeNicknames }: ExportOptions = {}) {
+ exportSet(set: PokemonSet, { hideStats, removeNicknames, useStatPoints }: ExportOptions = {}) {
let out = ``;
// core
@@ -414,7 +415,7 @@ export const Teams = new class Teams {
if (set.gigantamax) {
out += `Gigantamax: Yes \n`;
}
- if (set.teraType) {
+ if (set.teraType && !useStatPoints) {
out += `Tera Type: ${set.teraType} \n`;
}
diff --git a/test/sim/data.js b/test/sim/data.js
index 9c8f96a2c5..a751277cca 100644
--- a/test/sim/data.js
+++ b/test/sim/data.js
@@ -236,8 +236,8 @@ describe('Dex data', () => {
it('should have valid Learnsets entries', function () {
this.timeout(0);
- const mods = [Dex.mod('gen2'), Dex.mod('gen7letsgo'), Dex.mod('gen8bdsp'), Dex.mod('gen8legends'), Dex.mod('gen9legends'), Dex];
- for (const mod of mods) {
+ const dexes = [Dex.mod('gen2'), Dex.mod('gen7letsgo'), Dex.mod('gen8bdsp'), Dex.mod('gen8legends'), Dex.mod('gen9legends'), Dex.mod('champions'), Dex];
+ for (const mod of dexes) {
for (const speciesid in mod.data.Learnsets) {
const species = Dex.species.get(speciesid);
assert.equal(speciesid, species.id, `Key "${speciesid}" in Learnsets should be a Species ID`);
From 3d1a4f20e921f1896a31a6382698d9cd2347d184 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 10 Apr 2026 20:38:50 -0600
Subject: [PATCH 213/233] Finish server-side Champions changes
---
sim/pokemon.ts | 2 +-
sim/team-validator.ts | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index 56c2e071c6..e699815e95 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -1181,7 +1181,7 @@ export class Pokemon {
entry.commanding = !!this.volatiles['commanding'] && !this.fainted;
entry.reviving = this.isActive && !!this.side.slotConditions[this.position]['revivalblessing'];
}
- if (this.battle.gen === 9) {
+ if (this.battle.gen === 9 && this.battle.dex.currentMod !== 'champions') {
entry.teraType = this.teraType;
entry.terastallized = this.terastallized || '';
}
diff --git a/sim/team-validator.ts b/sim/team-validator.ts
index a00576f764..db2f77fe10 100644
--- a/sim/team-validator.ts
+++ b/sim/team-validator.ts
@@ -705,7 +705,8 @@ export class TeamValidator {
set.hpType = type.name;
}
}
- if ((this.gen === 9 && !ruleTable.has('terastalclause')) || ruleTable.has('bonustypemod')) {
+ if ((this.gen === 9 && dex.currentMod !== 'champions' && !ruleTable.has('terastalclause')) ||
+ ruleTable.has('bonustypemod')) {
const type = dex.types.get(set.teraType || species.requiredTeraType || species.types[0]);
if (!type.exists || type.isNonstandard) {
problems.push(`${name}'s Terastal type (${set.teraType}) is invalid.`);
From d2db2bdb660fc319a039e5b99250c6ce835a70f9 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 10 Apr 2026 20:54:07 -0600
Subject: [PATCH 214/233] Champions: Spell Tag is in the game
---
data/mods/champions/items.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/mods/champions/items.ts b/data/mods/champions/items.ts
index 5d682a80a1..30dd64fce1 100644
--- a/data/mods/champions/items.ts
+++ b/data/mods/champions/items.ts
@@ -873,7 +873,7 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
spelltag: {
inherit: true,
- isNonstandard: "Past",
+ isNonstandard: null,
},
splashplate: {
inherit: true,
From cd0c18a14e36ca7f3a3150c4726a5e0d9b12da43 Mon Sep 17 00:00:00 2001
From: Karthik99999
Date: Fri, 10 Apr 2026 20:02:04 -0700
Subject: [PATCH 215/233] Don't show Tera Type in OTS if format doesn't support
Tera
---
sim/battle.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sim/battle.ts b/sim/battle.ts
index dffd2b6ea9..959d7ae14b 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -3213,8 +3213,8 @@ export class Battle {
ivs: null!,
level: set.level,
};
- if (this.gen === 8) newSet.gigantamax = set.gigantamax;
- if (this.gen === 9) newSet.teraType = set.teraType;
+ if (this.gen === 8 && !this.ruleTable.has('dynamaxclause')) newSet.gigantamax = set.gigantamax;
+ if (this.gen === 9 && !this.ruleTable.has('terastalclause')) newSet.teraType = set.teraType;
// Only display Hidden Power type if the Pokemon has Hidden Power
// This is based on how team sheets were written in past VGC formats
if (set.moves.some(m => this.dex.moves.get(m).id === 'hiddenpower')) newSet.hpType = set.hpType;
From cbd8d39cd9af61fce32e66075b9328356102c48b Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Fri, 10 Apr 2026 21:09:06 -0600
Subject: [PATCH 216/233] MnM: Ban Starminite
---
config/formats.ts | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 2474334808..17a34234d4 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -900,8 +900,8 @@ export const Formats: import('../sim/dex-formats').FormatList = [
ruleset: ['Standard OMs', 'Evasion Items Clause', 'Evasion Abilities Clause', 'Sleep Moves Clause', 'Terastal Clause'],
banlist: [
'Calyrex-Shadow', 'Koraidon', 'Kyogre', 'Miraidon', 'Moody', 'Shadow Tag', 'Beedrillite', 'Blazikenite', 'Gengarite',
- 'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Baton Pass',
- 'Shed Tail',
+ 'Kangaskhanite', 'Lucarionite Z', 'Malamarite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Red Orb', 'Starminite',
+ 'Baton Pass', 'Shed Tail',
],
restricted: [
'Arceus', 'Basculegion-M', 'Calyrex-Ice', 'Ceruledge', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Eternatus', 'Flutter Mane',
From b0b9f9932afa7f5d6eb435d60d385d30ec5ced17 Mon Sep 17 00:00:00 2001
From: Leonard Craft III
Date: Fri, 10 Apr 2026 22:15:54 -0500
Subject: [PATCH 217/233] Remove Beat Up Nicknames mod from Flat Rules
---
data/mods/gen4/rulesets.ts | 2 +-
data/rulesets.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts
index 1a75078179..05d984059a 100644
--- a/data/mods/gen4/rulesets.ts
+++ b/data/mods/gen4/rulesets.ts
@@ -14,7 +14,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
},
flatrules: {
inherit: true,
- ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ ruleset: ['Obtainable', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
},
teampreview: {
inherit: true,
diff --git a/data/rulesets.ts b/data/rulesets.ts
index 8b6233e473..36d53cc0ae 100644
--- a/data/rulesets.ts
+++ b/data/rulesets.ts
@@ -38,7 +38,7 @@ export const Rulesets: import('../sim/dex-formats').FormatDataTable = {
effectType: 'ValidatorRule',
name: 'Flat Rules',
desc: "The in-game Flat Rules: Adjust Level Down 50, Species Clause, Item Clause = 1, -Mythical, -Restricted Legendary, Bring 6 Pick 3-6 depending on game type.",
- ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Beat Up Nicknames Mod', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
+ ruleset: ['Obtainable', 'Team Preview', 'Species Clause', 'Nickname Clause', 'Item Clause = 1', 'Adjust Level Down = 50', 'Picked Team Size = Auto', 'Cancel Mod'],
banlist: ['Mythical', 'Restricted Legendary', 'Greninja-Bond'],
},
limittworestricted: {
From 367e1c3ff8a1b00ca6ddec428825b30958e349b2 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sat, 11 Apr 2026 02:28:31 -0600
Subject: [PATCH 218/233] Champions: Fix some validation issues
---
data/mods/champions/items.ts | 4 ++++
sim/dex-species.ts | 3 +++
2 files changed, 7 insertions(+)
diff --git a/data/mods/champions/items.ts b/data/mods/champions/items.ts
index 30dd64fce1..0b4a1b8d6b 100644
--- a/data/mods/champions/items.ts
+++ b/data/mods/champions/items.ts
@@ -47,6 +47,10 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
inherit: true,
isNonstandard: null,
},
+ altarianite: {
+ inherit: true,
+ isNonstandard: null,
+ },
ampharosite: {
inherit: true,
isNonstandard: null,
diff --git a/sim/dex-species.ts b/sim/dex-species.ts
index 7785fcb115..cae556176d 100644
--- a/sim/dex-species.ts
+++ b/sim/dex-species.ts
@@ -747,7 +747,10 @@ export class DexSpecies {
} else if (species.prevo) {
// there used to be a check for Hidden Ability here, but apparently it's unnecessary
// Shed Skin Pupitar can definitely evolve into Unnerve Tyranitar
+ const oldNonstandard = species.isNonstandard;
species = this.get(species.prevo);
+ if ((species.isNonstandard && species.isNonstandard !== 'Unobtainable') ||
+ oldNonstandard !== species.isNonstandard) return null;
if (species.gen > Math.max(2, this.dex.gen)) return null;
return species;
} else if (species.changesFrom && species.baseSpecies !== 'Kyurem') {
From e3a67c9789ee667343db2b9349ea616f7b1378a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sat, 11 Apr 2026 09:29:07 +0100
Subject: [PATCH 219/233] Champions: Fix learnsets of species' formes (#11911)
* Fix learnsets of species' formes
* Remove Electric Seed and Normal Gem
---
data/mods/champions/items.ts | 8 ++++++++
data/mods/champions/learnsets.ts | 5 +++++
2 files changed, 13 insertions(+)
diff --git a/data/mods/champions/items.ts b/data/mods/champions/items.ts
index 0b4a1b8d6b..a18c7f004c 100644
--- a/data/mods/champions/items.ts
+++ b/data/mods/champions/items.ts
@@ -275,6 +275,10 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
inherit: true,
isNonstandard: "Past",
},
+ electricseed: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
emboarite: {
inherit: true,
isNonstandard: null,
@@ -667,6 +671,10 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
inherit: true,
isNonstandard: "Past",
},
+ normalgem: {
+ inherit: true,
+ isNonstandard: "Past",
+ },
ovalstone: {
inherit: true,
isNonstandard: "Past",
diff --git a/data/mods/champions/learnsets.ts b/data/mods/champions/learnsets.ts
index ccea97a3df..622a4184da 100644
--- a/data/mods/champions/learnsets.ts
+++ b/data/mods/champions/learnsets.ts
@@ -8707,6 +8707,8 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
whirlwind: ["9M"],
},
},
+ vivillonfancy: {},
+ vivillonpokeball: {},
floetteeternal: {
learnset: {
alluringvoice: ["9M"],
@@ -9967,6 +9969,7 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
worryseed: ["9M"],
},
},
+ gourgeistsuper: {},
avalugg: {
learnset: {
auroraveil: ["9M"],
@@ -11661,6 +11664,7 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
wonderroom: ["9M"],
},
},
+ polteageistantique: {},
hatterene: {
learnset: {
afteryou: ["9M"],
@@ -13333,6 +13337,7 @@ export const Learnsets: import('../../../sim/dex-species').ModdedLearnsetDataTab
uproar: ["9M"],
},
},
+ sinistchamasterpiece: {},
archaludon: {
learnset: {
aurasphere: ["9M"],
From fdb08bf19f33cb39dae596a07eaec9703465341d Mon Sep 17 00:00:00 2001
From: missshowdown
Date: Sat, 11 Apr 2026 01:29:37 -0700
Subject: [PATCH 220/233] Fix ZU by usage NFEs (#11906)
I forgot in the last fix that Primeape fell out of ZU by usage in the last three month period.
Jan: 4.25%
Feb: 4.71%
Mar: 2.17%
Avg: 3.71%
---
data/formats-data.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/formats-data.ts b/data/formats-data.ts
index ac9140bfbd..089d1860d0 100644
--- a/data/formats-data.ts
+++ b/data/formats-data.ts
@@ -464,7 +464,7 @@ export const FormatsData: import('../sim/dex-species').SpeciesFormatsDataTable =
tier: "LC",
},
primeape: {
- tier: "ZU",
+ tier: "NFE",
doublesTier: "NFE",
natDexTier: "NFE",
},
From 420def6e1b87ea0a8569d83ebd4d361ee371fda3 Mon Sep 17 00:00:00 2001
From: demir
Date: Sat, 11 Apr 2026 11:29:59 +0300
Subject: [PATCH 221/233] 35 Pokes: Fix ruleset (#11902)
---
config/formats.ts | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 17a34234d4..a23ac55925 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -750,12 +750,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
// searchShow: false,
ruleset: [
'Standard NatDex',
- '!Species Clause', 'Forme Clause', '!Sleep Clause Mod', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
+ '!Species Clause', 'Forme Clause', 'Sleep Moves Clause', 'Terastal Clause', 'DryPass Clause', 'Mega Rayquaza Clause',
],
banlist: [
'ND Uber', 'ND AG', 'ND OU', 'ND UUBL', 'ND UU', 'ND RUBL', 'ND RU', 'ND NFE', 'ND LC',
'Battle Bond', 'Moody', 'Power Construct', 'Shadow Tag', 'Tangled Feet', 'Berserk Gene', 'Booster Energy', 'King\'s Rock', 'Quick Claw',
- 'Razor Fang', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
+ 'Razor Fang', 'Hidden Power', 'Last Respects', 'Shed Tail', 'Baton Pass + Contrary', 'Baton Pass + Rapid Spin', 'Baton Pass + Well-Baked Body',
],
unbanlist: [
'Articuno-Base', 'Brute Bonnet', 'Cacturne', 'Clefable-Base', 'Cobalion', 'Drifblim', 'Dugtrio-Base', 'Gabite', 'Gogoat', 'Hariyama', 'Hippowdon', 'Krookodile',
@@ -774,11 +774,6 @@ export const Formats: import('../sim/dex-formats').FormatList = [
return [`${item.name} is banned.`];
}
}
- const species = this.dex.species.get(set.species);
- if (set.moves.map(x => this.toID(this.dex.moves.get(x).realMove) || x).includes('hiddenpower') &&
- species.baseSpecies !== 'Unown' && !this.ruleTable.has(`+move:hiddenpower`)) {
- return [`Hidden Power is banned.`];
- }
},
},
{
From d509ca32303073c2d3e399b0e9d3b63854dbe26a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sat, 11 Apr 2026 09:30:36 +0100
Subject: [PATCH 222/233] Griseous Orb can't be tricked or knocked off in Gen 4
(#11885)
* Griseous Orb can't be tricked or knocked off in Gen 4
* Refactor Multitype check
* Remove unnecessary inheritances
* Lint
* Revert Embargo changes
* Griseous Orb is suppressed by Klutz
* Add onSetAbility to Multitype
Added 'onSetAbility' property to multitype ability.
* Dont suppress the 'SetAbility' event
* Use non-Giratinas in Griseous Orb test
---
data/mods/gen4/abilities.ts | 10 ++++++----
data/mods/gen4/items.ts | 2 ++
data/mods/gen4/moves.ts | 34 ----------------------------------
data/mods/gen4/rulesets.ts | 22 ----------------------
data/moves.ts | 4 ++--
sim/battle.ts | 2 +-
sim/dex-conditions.ts | 4 ++--
sim/pokemon.ts | 8 ++------
test/sim/items/griseousorb.js | 22 ++++++++++++++++++++++
9 files changed, 37 insertions(+), 71 deletions(-)
create mode 100644 test/sim/items/griseousorb.js
diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts
index 461e5956b4..696c71d3fa 100644
--- a/data/mods/gen4/abilities.ts
+++ b/data/mods/gen4/abilities.ts
@@ -284,6 +284,11 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
}
},
},
+ multitype: {
+ inherit: true,
+ onTakeItem: false,
+ onSetAbility: false, // redundant but hardcoded
+ },
naturalcure: {
inherit: true,
onCheckShow: undefined, // no inherit
@@ -512,10 +517,7 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
const target = pokemon.side.randomFoe();
if (!target || target.fainted) return;
const ability = target.getAbility();
- const bannedAbilities = ['forecast', 'multitype', 'trace'];
- if (bannedAbilities.includes(target.ability)) {
- return;
- }
+ if (ability.flags['notrace']) return;
pokemon.setAbility(ability, target);
},
flags: { notrace: 1 },
diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts
index 1f61b55399..59fb48e162 100644
--- a/data/mods/gen4/items.ts
+++ b/data/mods/gen4/items.ts
@@ -171,6 +171,8 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
return this.chainModify(1.2);
}
},
+ onTakeItem: false,
+ onSetAbility: false,
},
heavyball: {
inherit: true,
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index ce94d9012a..9450656cd4 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -468,7 +468,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onPrepareHit(target, source, move) {
if (source.ignoringItem(true)) return false;
- if (source.hasAbility('multitype')) return false;
const item = source.getItem();
if (!this.singleEvent('TakeItem', item, source.itemState, source, source, move, item)) return false;
if (!item.fling) return false;
@@ -696,7 +695,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
onAfterHit(target, source, move) {
if (!target.item) return;
- if (target.ability === 'multitype') return;
const item = target.getItem();
if (this.runEvent('TakeItem', target, source, move, item)) {
target.item = '';
@@ -1153,15 +1151,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
accuracy: 80,
},
- roleplay: {
- inherit: true,
- onTryHit(target, source) {
- if (target.ability === source.ability || source.hasItem('griseousorb')) return false;
- if (target.getAbility().flags['failroleplay'] || source.ability === 'multitype') {
- return false;
- }
- },
- },
safeguard: {
inherit: true,
condition: {
@@ -1345,13 +1334,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
return !!source.volatiles['stockpile'];
},
},
- switcheroo: {
- inherit: true,
- onTryHit(target, source, move) {
- if (target.itemKnockedOff || source.itemKnockedOff) return false;
- if (target.hasAbility('multitype') || source.hasAbility('multitype')) return false;
- },
- },
synthesis: {
inherit: true,
onHit(pokemon) {
@@ -1462,13 +1444,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
flags: { bypasssub: 1, metronome: 1, failencore: 1 },
},
- trick: {
- inherit: true,
- onTryHit(target, source, move) {
- if (target.itemKnockedOff || source.itemKnockedOff) return false;
- if (target.hasAbility('multitype') || source.hasAbility('multitype')) return false;
- },
- },
trickroom: {
inherit: true,
condition: {
@@ -1537,15 +1512,6 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
inherit: true,
recoil: [1, 3],
},
- worryseed: {
- inherit: true,
- onTryHit(pokemon) {
- const bannedAbilities = ['multitype', 'truant'];
- if (bannedAbilities.includes(pokemon.ability) || pokemon.hasItem('griseousorb')) {
- return false;
- }
- },
- },
wrap: {
inherit: true,
accuracy: 85,
diff --git a/data/mods/gen4/rulesets.ts b/data/mods/gen4/rulesets.ts
index 05d984059a..71359c6c5a 100644
--- a/data/mods/gen4/rulesets.ts
+++ b/data/mods/gen4/rulesets.ts
@@ -30,26 +30,4 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
this.makeRequest('teampreview');
},
},
- validatestats: {
- inherit: true,
- onValidateSet(set) {
- const species = this.dex.species.get(set.species);
- const item = this.dex.items.get(set.item);
- if (item && item.id === 'griseousorb' && species.num !== 487) {
- return ['Griseous Orb can only be held by Giratina in Generation 4.'];
- }
- if (species.num === 493 && set.evs) {
- const isEventArceus = set.moves.includes('roaroftime') || set.moves.includes('shadowforce') ||
- set.moves.includes('spacialrend');
- if (isEventArceus) {
- let stat: StatID;
- for (stat in set.evs) {
- if (set.evs[stat] > 100) {
- return ["Event Arceus may not have more than 100 of any EVs in Generation 4."];
- }
- }
- }
- }
- },
- },
};
diff --git a/data/moves.ts b/data/moves.ts
index 312885acc8..fe3b6031f8 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -18676,7 +18676,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
const yourItem = target.takeItem(source);
const myItem = source.takeItem();
- if (target.item || source.item || (!yourItem && !myItem)) {
+ if (yourItem === false || myItem === false || (!yourItem && !myItem)) {
if (yourItem) target.item = yourItem.id;
if (myItem) source.item = myItem.id;
return false;
@@ -19905,7 +19905,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onHit(target, source, move) {
const yourItem = target.takeItem(source);
const myItem = source.takeItem();
- if (target.item || source.item || (!yourItem && !myItem)) {
+ if (yourItem === false || myItem === false || (!yourItem && !myItem)) {
if (yourItem) target.item = yourItem.id;
if (myItem) source.item = myItem.id;
return false;
diff --git a/sim/battle.ts b/sim/battle.ts
index 959d7ae14b..1895dab19a 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -604,7 +604,7 @@ export class Battle {
this.debug(eventid + ' handler suppressed by Mold Breaker');
return relayVar;
}
- if (eventid !== 'Start' && eventid !== 'TakeItem' && effect.effectType === 'Item' &&
+ if (eventid !== 'Start' && eventid !== 'TakeItem' && eventid !== 'SetAbility' && effect.effectType === 'Item' &&
(target instanceof Pokemon) && target.ignoringItem()) {
this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room');
return relayVar;
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index 8fc6ca8c6f..425eef45bc 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -87,8 +87,8 @@ export interface EventMethods {
) => Pokemon | void;
onResidual?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect) => void;
onSetAbility?: (
- this: Battle, ability: string, target: Pokemon, source: Pokemon, effect: Effect
- ) => null | void;
+ (this: Battle, ability: string, target: Pokemon, source: Pokemon, effect: Effect) => null | void
+ ) | boolean;
onSetStatus?: (
this: Battle, status: Condition, target: Pokemon, source: Pokemon, effect: Effect
) => boolean | null | void;
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index e699815e95..f7f37dad9f 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -1847,13 +1847,9 @@ export class Pokemon {
}
takeItem(source?: Pokemon) {
- if (!this.item) return false;
if (!source) source = this;
- if (this.battle.gen <= 4) {
- if (source.itemKnockedOff) return false;
- if (toID(this.ability) === 'multitype') return false;
- if (toID(source.ability) === 'multitype') return false;
- }
+ if (this.battle.gen <= 4 && (this.itemKnockedOff || source.itemKnockedOff)) return false;
+ if (!this.item) return;
const item = this.getItem();
if (this.battle.runEvent('TakeItem', this, source, null, item)) {
this.item = '';
diff --git a/test/sim/items/griseousorb.js b/test/sim/items/griseousorb.js
new file mode 100644
index 0000000000..a3ff28efcf
--- /dev/null
+++ b/test/sim/items/griseousorb.js
@@ -0,0 +1,22 @@
+'use strict';
+
+const assert = require('./../../assert');
+const common = require('./../../common');
+
+let battle;
+
+describe('Griseous Orb [Gen 4]', () => {
+ afterEach(() => {
+ battle.destroy();
+ });
+
+ it(`should prevent changing the holder's ability`, () => {
+ battle = common.gen(4).createBattle([[
+ { species: 'dhelmise', ability: 'pressure', item: 'griseousorb', moves: ['skillswap'] },
+ ], [
+ { species: 'wobbuffet', ability: 'flashfire', moves: ['worryseed'] },
+ ]]);
+ battle.makeChoices();
+ assert.equal(battle.p1.active[0].ability, 'pressure');
+ });
+});
From 03d7ac6bcf88e9d86b18757938a108642cf7f093 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sat, 11 Apr 2026 02:37:34 -0600
Subject: [PATCH 223/233] FFA: Remove Species Clause
---
config/formats.ts | 2 +-
data/aliases.ts | 8 +++++---
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index a23ac55925..27c1d42cd9 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -382,7 +382,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
gameType: 'freeforall',
rated: false,
tournamentShow: false,
- ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', '!Evasion Items Clause'],
+ ruleset: ['Standard', 'Sleep Moves Clause', '!Sleep Clause Mod', '!Evasion Items Clause', '!Species Clause'],
banlist: [
'Annihilape', 'Arceus', 'Calyrex-Ice', 'Calyrex-Shadow', 'Chi-Yu', 'Chien-Pao', 'Darkrai', 'Deoxys-Normal', 'Deoxys-Attack', 'Dialga', 'Dialga-Origin',
'Dondozo', 'Eternatus', 'Flutter Mane', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Iron Bundle', 'Koraidon', 'Kyogre', 'Kyurem-White',
diff --git a/data/aliases.ts b/data/aliases.ts
index 22e89b70cd..8f8d290bee 100644
--- a/data/aliases.ts
+++ b/data/aliases.ts
@@ -15,9 +15,11 @@ export const Aliases: import('../sim/dex').AliasesTable = {
zeroused: "[Gen 9] ZU",
mono: "[Gen 9] Monotype",
ag: "[Gen 9] Anything Goes",
- bss: "[Gen 9] BSS Reg J",
- vgc: "[Gen 9] VGC 2026 Reg F",
- bsd: "[Gen 9] VGC 2026 Reg F",
+ champsou: "[Gen 9 Champions] OU",
+ cou: "[Gen 9 Champions] OU",
+ bss: "[Gen 9 Champions] BSS Reg M-A",
+ vgc: "[Gen 9 Champions] VGC 2026 Reg M-A",
+ bsd: "[Gen 9 Champions] VGC 2026 Reg M-A",
randdubs: "[Gen 9] Random Doubles Battle",
doubles: "[Gen 9] Doubles OU",
dou: "[Gen 9] Doubles OU",
From 26f8b4ecce11b8949b7be5fa27a31542adaec079 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sat, 11 Apr 2026 09:40:03 +0100
Subject: [PATCH 224/233] Fix Gen 4 decreased Fractional Priority (#11905)
* Fix Gen 4 Fractional Priority
* Lint
* Fix test (invert order)
---
data/mods/gen4/abilities.ts | 7 +++++++
data/mods/gen4/items.ts | 10 ++++++++++
data/mods/gen4/scripts.ts | 13 ++++++++++++-
sim/battle.ts | 5 +++++
sim/dex-conditions.ts | 2 +-
test/sim/abilities/intimidate.js | 4 ++--
6 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts
index 696c71d3fa..b99ce7a293 100644
--- a/data/mods/gen4/abilities.ts
+++ b/data/mods/gen4/abilities.ts
@@ -418,6 +418,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
onResidualOrder: 10,
onResidualSubOrder: 3,
},
+ stall: {
+ inherit: true,
+ onFractionalPriority(priority, pokemon) {
+ // don't override Lagging Tail and Full Incense's -0.2 fractional priority
+ if (priority >= 0) return -0.1;
+ },
+ },
static: {
inherit: true,
onDamagingHit(damage, target, source, move) {
diff --git a/data/mods/gen4/items.ts b/data/mods/gen4/items.ts
index 59fb48e162..bec40c7413 100644
--- a/data/mods/gen4/items.ts
+++ b/data/mods/gen4/items.ts
@@ -164,6 +164,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
},
},
},
+ fullincense: {
+ inherit: true,
+ onFractionalPriorityPriority: 1,
+ onFractionalPriority: -0.2,
+ },
griseousorb: {
inherit: true,
onBasePower(basePower, user, target, move) {
@@ -209,6 +214,11 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
}
},
},
+ laggingtail: {
+ inherit: true,
+ onFractionalPriorityPriority: 1,
+ onFractionalPriority: -0.2,
+ },
laxincense: {
inherit: true,
onModifyAccuracyPriority: 5,
diff --git a/data/mods/gen4/scripts.ts b/data/mods/gen4/scripts.ts
index f645b3a763..2fc269a6c0 100644
--- a/data/mods/gen4/scripts.ts
+++ b/data/mods/gen4/scripts.ts
@@ -1,7 +1,18 @@
export const Scripts: ModdedBattleScriptsData = {
inherit: 'gen5',
gen: 4,
-
+ pokemon: {
+ inherit: true,
+ getActionSpeed() {
+ let speed = this.getStat('spe', false, false);
+ const trickRoomCheck = this.battle.ruleTable.has('twisteddimensionmod') ?
+ !this.battle.field.getPseudoWeather('trickroom') : this.battle.field.getPseudoWeather('trickroom');
+ if (trickRoomCheck) {
+ speed = -speed;
+ }
+ return speed;
+ },
+ },
actions: {
inherit: true,
runSwitch(pokemon) {
diff --git a/sim/battle.ts b/sim/battle.ts
index 1895dab19a..8bb4f64f27 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -2674,6 +2674,11 @@ export class Battle {
action.speed = 1;
} else {
action.speed = action.pokemon.getActionSpeed();
+ if (this.gen <= 4 && action.choice === 'move' && action.fractionalPriority < 0) {
+ // in Gen 4, Pokemon with decrease fractional priority act in reverse speed order
+ // ignores Trick Room, does not ignore boosts and Simple
+ action.speed = -action.pokemon.getStat('spe', false, false);
+ }
}
}
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index 425eef45bc..ffd3e9ecde 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -53,7 +53,7 @@ export interface EventMethods {
onEntryHazard?: (this: Battle, pokemon: Pokemon) => void;
onFaint?: CommonHandlers['VoidEffect'];
onFlinch?: ((this: Battle, pokemon: Pokemon) => boolean | void) | boolean;
- onFractionalPriority?: CommonHandlers['ModifierSourceMove'] | -0.1;
+ onFractionalPriority?: CommonHandlers['ModifierSourceMove'] | -0.1 | -0.2;
onHit?: MoveEventMethods['onHit'];
onImmunity?: (this: Battle, type: string, pokemon: Pokemon) => void;
onLockMove?: string | ((this: Battle, pokemon: Pokemon) => void | string);
diff --git a/test/sim/abilities/intimidate.js b/test/sim/abilities/intimidate.js
index 43e14408d0..b516f2ca76 100644
--- a/test/sim/abilities/intimidate.js
+++ b/test/sim/abilities/intimidate.js
@@ -36,8 +36,8 @@ describe('Intimidate', () => {
{ species: "Gengar", level: 1, item: 'leftovers', ability: 'levitate', moves: ['substitute'] },
{ species: "Suicune", level: 1, item: 'leftovers', ability: 'pressure', moves: ['substitute'] },
], [
- { species: "Gliscor", item: 'laggingtail', ability: 'sandveil', moves: ['uturn'] },
- { species: "Scizor", item: 'laggingtail', ability: 'technician', moves: ['batonpass'] },
+ { species: "Scizor", item: 'laggingtail', ability: 'sandveil', moves: ['uturn'] },
+ { species: "Gliscor", item: 'laggingtail', ability: 'technician', moves: ['batonpass'] },
{ species: "Gyarados", item: 'leftovers', ability: 'intimidate', moves: ['splash'] },
{ species: "Salamence", item: 'leftovers', ability: 'intimidate', moves: ['splash'] },
]]);
From 00d8fc0afd3c589043cff60878989b2c892f05f7 Mon Sep 17 00:00:00 2001
From: Soul-8691 <42703201+Soul-8691@users.noreply.github.com>
Date: Sat, 11 Apr 2026 04:40:23 -0400
Subject: [PATCH 225/233] Unban Sea Incense/Ban King's Rock (FRLG OU) (#11904)
* Unban Sea Incense/Ban King's Rock (FRLG OU)
* Correct King's Rock format
---
config/formats.ts | 2 +-
data/mods/gen3frlg/items.ts | 4 ----
2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 27c1d42cd9..55e4de6e11 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -819,7 +819,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 3] FRLG OU",
mod: 'gen3frlg',
ruleset: ['Standard', 'One Boost Passer Clause', 'Freeze Clause Mod'],
- banlist: ['Uber', 'Sand Veil'],
+ banlist: ['Uber', 'Sand Veil', 'King\'s Rock'],
},
{
name: "[Gen 4] VGC 2009",
diff --git a/data/mods/gen3frlg/items.ts b/data/mods/gen3frlg/items.ts
index d30c5fc6af..02a3138aa6 100644
--- a/data/mods/gen3frlg/items.ts
+++ b/data/mods/gen3frlg/items.ts
@@ -119,10 +119,6 @@ export const Items: import('../../../sim/dex-items').ModdedItemDataTable = {
inherit: true,
isNonstandard: "Unobtainable",
},
- seaincense: {
- inherit: true,
- isNonstandard: "Unobtainable",
- },
shellbell: {
inherit: true,
isNonstandard: "Unobtainable",
From 322a3161a0f9cb1f7a7762acd4d54caad2be4ae5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sat, 11 Apr 2026 17:07:58 +0100
Subject: [PATCH 226/233] Champions: Encore, Mega Sol and validations fixes
(#11914)
* [Champions] Encore and validations fixes
* Check Mega Sol in all weathers
* Fix
* Fix comment
* Comment
* Remove Trick Room underflow
* Refix
* Re-add Mega Starmie stats in Legends Z-A OU
---
data/conditions.ts | 3 +-
data/mods/champions/conditions.ts | 79 ++++++++++++++++++++++++++++++
data/mods/champions/moves.ts | 3 +-
data/mods/champions/rulesets.ts | 4 +-
data/mods/champions/scripts.ts | 10 ++++
data/mods/gen9legendsou/pokedex.ts | 4 ++
sim/battle.ts | 3 +-
sim/dex-species.ts | 4 +-
8 files changed, 101 insertions(+), 9 deletions(-)
diff --git a/data/conditions.ts b/data/conditions.ts
index 9db24cbb52..9d6ee15ca2 100644
--- a/data/conditions.ts
+++ b/data/conditions.ts
@@ -558,8 +558,7 @@ export const Conditions: import('../sim/dex-conditions').ConditionDataTable = {
this.debug('Sunny Day Hydro Steam boost');
return this.chainModify(1.5);
}
- // TODO: check interaction between Mega Sol and Utility Umbrella
- if (defender.effectiveWeather() !== 'sunnyday' && !attacker.hasAbility('megasol')) return;
+ if (defender.effectiveWeather() !== 'sunnyday') return;
if (move.type === 'Fire') {
this.debug('Sunny Day fire boost');
return this.chainModify(1.5);
diff --git a/data/mods/champions/conditions.ts b/data/mods/champions/conditions.ts
index bd03a55294..d85f458394 100644
--- a/data/mods/champions/conditions.ts
+++ b/data/mods/champions/conditions.ts
@@ -54,4 +54,83 @@ export const Conditions: import('../../../sim/dex-conditions').ModdedConditionDa
return false;
},
},
+
+ raindance: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (attacker.effectiveWeather() !== 'raindance') return;
+ if (move.type === 'Water') {
+ this.debug('rain water boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Fire') {
+ this.debug('rain fire suppress');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ primordialsea: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (attacker.effectiveWeather() !== 'primordialsea') return;
+ if (move.type === 'Water') {
+ this.debug('Rain water boost');
+ return this.chainModify(1.5);
+ }
+ },
+ },
+ sunnyday: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (attacker.effectiveWeather() !== 'sunnyday') return;
+ if (move.id === 'hydrosteam') {
+ this.debug('Sunny Day Hydro Steam boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Fire') {
+ this.debug('Sunny Day fire boost');
+ return this.chainModify(1.5);
+ }
+ if (move.type === 'Water') {
+ this.debug('Sunny Day water suppress');
+ return this.chainModify(0.5);
+ }
+ },
+ },
+ desolateland: {
+ inherit: true,
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (attacker.effectiveWeather() !== 'desolateland') return;
+ if (move.type === 'Fire') {
+ this.debug('Desolate Land fire boost');
+ return this.chainModify(1.5);
+ }
+ },
+ },
+ sandstorm: {
+ inherit: true,
+ onModifySpD(spd, target, source) {
+ if (target.hasType('Rock') && source.effectiveWeather() === 'sandstorm') {
+ return this.modify(spd, 1.5);
+ }
+ },
+ },
+ snowscape: {
+ inherit: true,
+ onModifyDef(def, target, source) {
+ if (target.hasType('Ice') && source.effectiveWeather() === 'snowscape') {
+ return this.modify(def, 1.5);
+ }
+ },
+ },
+ // TODO: check Mega Sol's interaction with Deltastream
+ // deltastream: {
+ // inherit: true,
+ // onEffectiveness(typeMod, target, type, move) {
+ // if (move && move.effectType === 'Move' && move.category !== 'Status' && type === 'Flying' && typeMod > 0) {
+ // this.add('-fieldactivate', 'Delta Stream');
+ // return 0;
+ // }
+ // },
+ // },
};
diff --git a/data/mods/champions/moves.ts b/data/mods/champions/moves.ts
index 414e065e45..00b73821cf 100644
--- a/data/mods/champions/moves.ts
+++ b/data/mods/champions/moves.ts
@@ -292,7 +292,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
const action = this.queue.willMove(target);
if (!action) {
this.effectState.duration!++;
- } else {
+ // TODO: this is a quick fix, check if move priority is changed when Mental Herb cures Encore
+ } else if (!target.hasItem('mentalherb')) {
this.queue.changeAction(target, {
choice: 'move',
// target: undefined,
diff --git a/data/mods/champions/rulesets.ts b/data/mods/champions/rulesets.ts
index 5ca3785e6d..4e9440cf4b 100644
--- a/data/mods/champions/rulesets.ts
+++ b/data/mods/champions/rulesets.ts
@@ -3,7 +3,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
ruleset: [
'Obtainable', 'Team Preview', 'Cancel Mod', 'Endless Battle Clause',
- 'Adjust Level = 50', 'Item Clause = 1',
+ 'Adjust Level = 50', 'Species Clause', 'Item Clause = 1',
],
onBegin() {
this.reportPercentages = true;
@@ -13,7 +13,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
ruleset: [
'Standard AG',
- 'Sleep Moves Clause', 'Species Clause', 'Nickname Clause', 'OHKO Clause',
+ 'Sleep Moves Clause', 'Nickname Clause', 'OHKO Clause',
],
},
standarddraft: {
diff --git a/data/mods/champions/scripts.ts b/data/mods/champions/scripts.ts
index b673b5c8d2..965ab93cd4 100644
--- a/data/mods/champions/scripts.ts
+++ b/data/mods/champions/scripts.ts
@@ -41,6 +41,16 @@ export const Scripts: ModdedBattleScriptsData = {
return true;
},
pokemon: {
+ // Remove Trick Room underflow
+ getActionSpeed() {
+ let speed = this.getStat('spe', false, false);
+ const trickRoomCheck = this.battle.ruleTable.has('twisteddimensionmod') ?
+ !this.battle.field.getPseudoWeather('trickroom') : this.battle.field.getPseudoWeather('trickroom');
+ if (trickRoomCheck) {
+ speed = -speed;
+ }
+ return speed;
+ },
// Don't revert Mega Evolutions after fainting
// TODO: confirm interaction with Revival Blessing
formeChange(speciesId, source, isPermanent, abilitySlot = '0', message) {
diff --git a/data/mods/gen9legendsou/pokedex.ts b/data/mods/gen9legendsou/pokedex.ts
index 41913e5045..ac1e5969ce 100644
--- a/data/mods/gen9legendsou/pokedex.ts
+++ b/data/mods/gen9legendsou/pokedex.ts
@@ -7,6 +7,10 @@ export const Pokedex: import('../../../sim/dex-species').ModdedSpeciesDataTable
inherit: true,
abilities: { 0: "Transistor" },
},
+ starmiemega: {
+ inherit: true,
+ baseStats: { hp: 60, atk: 100, def: 105, spa: 130, spd: 105, spe: 120 },
+ },
ampharosmega: {
inherit: true,
abilities: { 0: "Fluffy" },
diff --git a/sim/battle.ts b/sim/battle.ts
index 8bb4f64f27..171f5ad7c4 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -2673,11 +2673,12 @@ export class Battle {
if (!action.pokemon) {
action.speed = 1;
} else {
- action.speed = action.pokemon.getActionSpeed();
if (this.gen <= 4 && action.choice === 'move' && action.fractionalPriority < 0) {
// in Gen 4, Pokemon with decrease fractional priority act in reverse speed order
// ignores Trick Room, does not ignore boosts and Simple
action.speed = -action.pokemon.getStat('spe', false, false);
+ } else {
+ action.speed = action.pokemon.getActionSpeed();
}
}
}
diff --git a/sim/dex-species.ts b/sim/dex-species.ts
index cae556176d..688891f42b 100644
--- a/sim/dex-species.ts
+++ b/sim/dex-species.ts
@@ -747,10 +747,8 @@ export class DexSpecies {
} else if (species.prevo) {
// there used to be a check for Hidden Ability here, but apparently it's unnecessary
// Shed Skin Pupitar can definitely evolve into Unnerve Tyranitar
- const oldNonstandard = species.isNonstandard;
+ if (this.dex.currentMod === 'champions') return null;
species = this.get(species.prevo);
- if ((species.isNonstandard && species.isNonstandard !== 'Unobtainable') ||
- oldNonstandard !== species.isNonstandard) return null;
if (species.gen > Math.max(2, this.dex.gen)) return null;
return species;
} else if (species.changesFrom && species.baseSpecies !== 'Kyurem') {
From 871e13646cbdecc19275ea0437eed954d629a9f5 Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sat, 11 Apr 2026 10:30:51 -0600
Subject: [PATCH 227/233] Champions OU: Ban Moody, Shed Tail, and evasion moves
---
config/formats.ts | 2 +-
data/mods/champions/rulesets.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index 55e4de6e11..c50c53eeae 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -278,7 +278,7 @@ export const Formats: import('../sim/dex-formats').FormatList = [
name: "[Gen 9 Champions] OU",
mod: 'champions',
ruleset: ['Standard'],
- banlist: ['AG', 'Uber', 'Baton Pass', 'Last Respects'],
+ banlist: ['AG', 'Uber', 'Moody', 'Baton Pass', 'Last Respects', 'Shed Tail'],
},
{
name: "[Gen 9 Champions] BSS Reg M-A",
diff --git a/data/mods/champions/rulesets.ts b/data/mods/champions/rulesets.ts
index 4e9440cf4b..0d5f5ee076 100644
--- a/data/mods/champions/rulesets.ts
+++ b/data/mods/champions/rulesets.ts
@@ -13,7 +13,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
inherit: true,
ruleset: [
'Standard AG',
- 'Sleep Moves Clause', 'Nickname Clause', 'OHKO Clause',
+ 'Sleep Moves Clause', 'Nickname Clause', 'OHKO Clause', 'Evasion Moves Clause',
],
},
standarddraft: {
From d31a3e8ba2a9e38a9f33c1a1770686e12b3027a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sat, 11 Apr 2026 17:34:26 +0100
Subject: [PATCH 228/233] Clean Effect Spore implementation (#11838)
* Clean Effect Spore implementation
* Use sample
---
data/abilities.ts | 8 ++++----
data/mods/gen2/moves.ts | 2 +-
data/mods/gen3/abilities.ts | 12 +++---------
data/mods/gen4/abilities.ts | 12 +++---------
data/mods/gen9ssb/moves.ts | 21 +++++----------------
data/moves.ts | 30 ++++++------------------------
6 files changed, 22 insertions(+), 63 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 18fb82b555..a97b525a45 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -1146,14 +1146,14 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
effectspore: {
onDamagingHit(damage, target, source, move) {
- if (this.checkMoveMakesContact(move, source, target) && !source.status && source.runStatusImmunity('powder')) {
+ if (this.checkMoveMakesContact(move, source, target) && source.runStatusImmunity('powder')) {
const r = this.random(100);
if (r < 11) {
- source.setStatus('slp', target);
+ source.trySetStatus('slp', target);
} else if (r < 21) {
- source.setStatus('par', target);
+ source.trySetStatus('par', target);
} else if (r < 30) {
- source.setStatus('psn', target);
+ source.trySetStatus('psn', target);
}
}
},
diff --git a/data/mods/gen2/moves.ts b/data/mods/gen2/moves.ts
index 62761c6e7a..c75e5a214f 100644
--- a/data/mods/gen2/moves.ts
+++ b/data/mods/gen2/moves.ts
@@ -757,7 +757,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
triattack: {
inherit: true,
onHit(target, source, move) {
- move.statusRoll = ['par', 'frz', 'brn'][this.random(3)];
+ move.statusRoll = this.sample(['par', 'frz', 'brn']);
},
secondary: {
chance: 20,
diff --git a/data/mods/gen3/abilities.ts b/data/mods/gen3/abilities.ts
index 33ce5bcff8..05d84a50c5 100644
--- a/data/mods/gen3/abilities.ts
+++ b/data/mods/gen3/abilities.ts
@@ -12,15 +12,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
effectspore: {
inherit: true,
onDamagingHit(damage, target, source, move) {
- if (damage && move.flags['contact'] && !source.status) {
- const r = this.random(300);
- if (r < 10) {
- source.setStatus('slp', target);
- } else if (r < 20) {
- source.setStatus('par', target);
- } else if (r < 30) {
- source.setStatus('psn', target);
- }
+ if (damage && move.flags['contact'] && this.randomChance(1, 10)) {
+ const status = this.sample(['slp', 'par', 'psn']);
+ source.trySetStatus(status, target);
}
},
},
diff --git a/data/mods/gen4/abilities.ts b/data/mods/gen4/abilities.ts
index b99ce7a293..434d3a876d 100644
--- a/data/mods/gen4/abilities.ts
+++ b/data/mods/gen4/abilities.ts
@@ -92,15 +92,9 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
effectspore: {
inherit: true,
onDamagingHit(damage, target, source, move) {
- if (damage && move.flags['contact'] && !source.status) {
- const r = this.random(100);
- if (r < 10) {
- source.setStatus('slp', target);
- } else if (r < 20) {
- source.setStatus('par', target);
- } else if (r < 30) {
- source.setStatus('psn', target);
- }
+ if (damage && move.flags['contact'] && this.randomChance(3, 10)) {
+ const status = this.sample(['slp', 'par', 'psn']);
+ source.trySetStatus(status, target);
}
},
},
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index b49e54f9d6..197ac22355 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -3128,14 +3128,8 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
flags: {},
volatileStatus: 'curse',
onHit(target, source) {
- const result = this.random(3);
- if (result === 0) {
- target.trySetStatus('psn', target);
- } else if (result === 1) {
- target.trySetStatus('par', target);
- } else {
- target.trySetStatus('brn', target);
- }
+ const status = this.sample(['psn', 'par', 'brn']);
+ target.trySetStatus(status, source);
this.boost({ spe: 1 }, source);
},
onPrepareHit(target, source) {
@@ -3718,14 +3712,9 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (randomStat2 && randomStat === randomStat2) boost[randomStat] = 4;
else if (randomStat2) boost[randomStat2] = 2;
this.boost(boost, source);
- const result = this.random(3);
- if (result === 0) {
- this.actions.useMove("laserfocus", target);
- } else if (result === 1) {
- this.actions.useMove("lockon", target);
- } else {
- this.actions.useMove("charge", target);
- } // This is easier than implementing each condition manually
+ // This is easier than implementing each condition manually
+ const move = this.sample(['lockon', 'laserfocus', 'charge']);
+ this.actions.useMove(move, target);
this.heal(target.maxhp / 4, target, target, this.effect);
},
target: "self",
diff --git a/data/moves.ts b/data/moves.ts
index fe3b6031f8..79fa812182 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -3635,14 +3635,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
secondary: {
chance: 50,
onHit(target, source) {
- const result = this.random(3);
- if (result === 0) {
- target.trySetStatus('psn', source);
- } else if (result === 1) {
- target.trySetStatus('par', source);
- } else {
- target.trySetStatus('slp', source);
- }
+ const status = this.sample(['psn', 'par', 'slp']);
+ target.trySetStatus(status, source);
},
},
target: "normal",
@@ -6725,14 +6719,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
self: {
onHit(source) {
for (const pokemon of source.foes()) {
- const result = this.random(3);
- if (result === 0) {
- pokemon.trySetStatus('slp', source);
- } else if (result === 1) {
- pokemon.trySetStatus('par', source);
- } else {
- pokemon.trySetStatus('psn', source);
- }
+ const status = this.sample(['slp', 'par', 'psn']);
+ pokemon.trySetStatus(status, source);
}
},
},
@@ -19876,14 +19864,8 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
secondary: {
chance: 20,
onHit(target, source) {
- const result = this.random(3);
- if (result === 0) {
- target.trySetStatus('brn', source);
- } else if (result === 1) {
- target.trySetStatus('par', source);
- } else {
- target.trySetStatus('frz', source);
- }
+ const status = this.sample(['brn', 'par', 'frz']);
+ target.trySetStatus(status, source);
},
},
target: "normal",
From 013f2b0cada5ec74e1427ba76b21b67a1bc31caf Mon Sep 17 00:00:00 2001
From: Kris Johnson <11083252+KrisXV@users.noreply.github.com>
Date: Sat, 11 Apr 2026 17:41:57 -0600
Subject: [PATCH 229/233] Champions: Remove Item Clause from Draft
---
data/mods/champions/rulesets.ts | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/mods/champions/rulesets.ts b/data/mods/champions/rulesets.ts
index 0d5f5ee076..bf0bebe716 100644
--- a/data/mods/champions/rulesets.ts
+++ b/data/mods/champions/rulesets.ts
@@ -21,6 +21,7 @@ export const Rulesets: import('../../../sim/dex-formats').ModdedFormatDataTable
ruleset: [
'Standard AG',
'Nickname Clause', 'Beat Up Nicknames Mod', 'Sleep Clause Mod', 'OHKO Clause', 'Evasion Clause',
+ '!Item Clause',
],
onBegin() {
this.reportPercentages = true;
From 9493eeb7d63714f1417f690bd706e222b30b5eda Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 12 Apr 2026 01:47:01 +0100
Subject: [PATCH 230/233] Fix Mega Sol's Fire damage boost (#11918)
---
data/abilities.ts | 6 ++++++
data/mods/champions/abilities.ts | 16 ++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/data/abilities.ts b/data/abilities.ts
index a97b525a45..75e7a2d6e2 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -2521,6 +2521,12 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
megasol: {
isNonstandard: "Future",
+ onWeatherModifyDamage(damage, attacker, defender, move) {
+ if (this.field.weather !== 'sunnyday') {
+ (this.dex.conditions.getByID('sunnyday' as ID) as any).onWeatherModifyDamage
+ .call(this, damage, attacker, defender, move);
+ }
+ },
flags: {},
name: "Mega Sol",
rating: 3,
diff --git a/data/mods/champions/abilities.ts b/data/mods/champions/abilities.ts
index 0ce4820418..7955599ccc 100644
--- a/data/mods/champions/abilities.ts
+++ b/data/mods/champions/abilities.ts
@@ -1,4 +1,8 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ dragonize: {
+ inherit: true,
+ isNonstandard: null,
+ },
healer: {
inherit: true,
onResidual(pokemon) {
@@ -12,6 +16,14 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
desc: "50% chance this Pokemon's ally has its non-volatile status condition cured at the end of each turn.",
shortDesc: "50% chance this Pokemon's ally has its status cured at the end of each turn.",
},
+ megasol: {
+ inherit: true,
+ isNonstandard: null,
+ },
+ piercingdrill: {
+ inherit: true,
+ isNonstandard: null,
+ },
shedskin: {
inherit: true,
onResidual(pokemon) {
@@ -24,6 +36,10 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
desc: "This Pokemon has a 30% chance to have its non-volatile status condition cured at the end of each turn.",
shortDesc: "This Pokemon has a 30% chance to have its status cured at the end of each turn.",
},
+ spicyspray: {
+ inherit: true,
+ isNonstandard: null,
+ },
unseenfist: {
inherit: true,
shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.",
From 98bf26a3f570bec5bc8cbde262f425a21dff04cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 12 Apr 2026 06:52:50 +0100
Subject: [PATCH 231/233] Champions: Berserk is not suppressed by Sheer Force
(#11919)
* Berserk is not suppressed by Sheer Force
* Fix checkedAngerShell
---
data/abilities.ts | 22 ++++++----------------
data/mods/champions/abilities.ts | 12 ++++++++++++
2 files changed, 18 insertions(+), 16 deletions(-)
diff --git a/data/abilities.ts b/data/abilities.ts
index 75e7a2d6e2..794247b3f3 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -142,15 +142,10 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
angershell: {
onDamage(damage, target, source, effect) {
- if (
- effect.effectType === "Move" &&
- !effect.multihit &&
+ this.effectState.checkedAngerShell = !(
+ effect.effectType === "Move" && !effect.multihit &&
!(effect.hasSheerForce && source.hasAbility('sheerforce'))
- ) {
- this.effectState.checkedAngerShell = false;
- } else {
- this.effectState.checkedAngerShell = true;
- }
+ );
},
onTryEatItem(item) {
const healingItems = [
@@ -408,15 +403,10 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
berserk: {
onDamage(damage, target, source, effect) {
- if (
- effect.effectType === "Move" &&
- !effect.multihit &&
+ this.effectState.checkedBerserk = !(
+ effect.effectType === "Move" && !effect.multihit &&
!(effect.hasSheerForce && source.hasAbility('sheerforce'))
- ) {
- this.effectState.checkedBerserk = false;
- } else {
- this.effectState.checkedBerserk = true;
- }
+ );
},
onTryEatItem(item) {
const healingItems = [
diff --git a/data/mods/champions/abilities.ts b/data/mods/champions/abilities.ts
index 7955599ccc..498b117e80 100644
--- a/data/mods/champions/abilities.ts
+++ b/data/mods/champions/abilities.ts
@@ -1,4 +1,16 @@
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
+ angershell: {
+ inherit: true,
+ onDamage(damage, target, source, effect) {
+ this.effectState.checkedAngerShell = !(effect.effectType === "Move" && !effect.multihit);
+ },
+ },
+ berserk: {
+ inherit: true,
+ onDamage(damage, target, source, effect) {
+ this.effectState.checkedBerserk = !(effect.effectType === "Move" && !effect.multihit);
+ },
+ },
dragonize: {
inherit: true,
isNonstandard: null,
From 0855a8028730f949c188bdeccf0e9b58599a8459 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 12 Apr 2026 06:53:07 +0100
Subject: [PATCH 232/233] Champions: Slowbro-Galar can't mega evolve (#11921)
---
data/mods/champions/scripts.ts | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/data/mods/champions/scripts.ts b/data/mods/champions/scripts.ts
index 965ab93cd4..fd8bb8e4df 100644
--- a/data/mods/champions/scripts.ts
+++ b/data/mods/champions/scripts.ts
@@ -267,6 +267,19 @@ export const Scripts: ModdedBattleScriptsData = {
canTerastallize(pokemon) {
return null;
},
+ canMegaEvo(pokemon: Pokemon) {
+ const species = pokemon.baseSpecies;
+ const altForme = species.otherFormes && this.dex.species.get(species.otherFormes[0]);
+ const item = pokemon.getItem();
+ // Mega Rayquaza
+ if ((this.battle.gen <= 7 || this.battle.ruleTable.has('+pokemontag:past') ||
+ this.battle.ruleTable.has('+pokemontag:future')) &&
+ altForme?.isMega && altForme?.requiredMove &&
+ pokemon.baseMoves.includes(toID(altForme.requiredMove)) && !item.zMove) {
+ return altForme.name;
+ }
+ return item.megaStone?.[species.name] || null;
+ },
// Announce 4x and 0.25x effectiveness
modifyDamage(baseDamage, pokemon, target, move, suppressMessages) {
const tr = this.battle.trunc;
From 51e701b21202f95b9983b7afb9d9abdbae141b24 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andr=C3=A9=20Bastos=20Dias?=
<80102738+andrebastosdias@users.noreply.github.com>
Date: Sun, 12 Apr 2026 06:55:02 +0100
Subject: [PATCH 233/233] Champions: Fix Piercing Drill and Unseen Fist
(#11917)
* Fix Piercing Drill and Unseen Fist
* Change variable name
* Fix
* Rename onBypassProtect to onHitProtect
* Fix
---
config/formats.ts | 6 +++++-
data/abilities.ts | 9 ++++++---
data/mods/afd/moves.ts | 14 +++++++-------
data/mods/afd/scripts.ts | 6 +++++-
data/mods/champions/abilities.ts | 7 +++++++
data/mods/champions/scripts.ts | 18 ++++++------------
data/mods/chatbats/moves.ts | 2 +-
data/mods/gen4/moves.ts | 2 +-
data/mods/gen5/moves.ts | 2 +-
data/mods/gen6/moves.ts | 2 +-
data/mods/gen7/moves.ts | 2 +-
data/mods/gen9regeneration/scripts.ts | 6 +++++-
data/mods/gen9ssb/moves.ts | 6 +++---
data/mods/gen9ssb/scripts.ts | 6 +++++-
data/mods/passiveaggressive/moves.ts | 2 +-
data/moves.ts | 20 ++++++++++----------
sim/battle-actions.ts | 8 ++++++--
sim/battle.ts | 10 +++++-----
sim/dex-conditions.ts | 1 +
sim/dex-moves.ts | 2 +-
sim/global-types.ts | 2 +-
sim/pokemon.ts | 2 +-
22 files changed, 80 insertions(+), 55 deletions(-)
diff --git a/config/formats.ts b/config/formats.ts
index c50c53eeae..c5a7a900e6 100644
--- a/config/formats.ts
+++ b/config/formats.ts
@@ -2712,8 +2712,12 @@ export const Formats: import('../sim/dex-formats').FormatList = [
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
this.battle.add('-zbroken', target);
}
diff --git a/data/abilities.ts b/data/abilities.ts
index 794247b3f3..410480fc5e 100644
--- a/data/abilities.ts
+++ b/data/abilities.ts
@@ -3235,10 +3235,13 @@ export const Abilities: import('../sim/dex-abilities').AbilityDataTable = {
},
piercingdrill: {
isNonstandard: "Future",
- onModifyMove(move) {
- if (move.flags['contact']) delete move.flags['protect'];
+ onHitProtect(source, target, move) {
+ if (move.flags['contact']) {
+ target.getMoveHitData(move).bypassProtect = this.effect;
+ return false;
+ }
},
- // breaking protect handled in Battle#checkMoveBreaksProtect()
+ // breaking protect handled in Battle#checkMoveBypassesProtect()
flags: {},
name: "Piercing Drill",
rating: 1,
diff --git a/data/mods/afd/moves.ts b/data/mods/afd/moves.ts
index bffcc53259..d4723eda53 100644
--- a/data/mods/afd/moves.ts
+++ b/data/mods/afd/moves.ts
@@ -4,7 +4,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -36,7 +36,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -68,7 +68,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -152,7 +152,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -184,7 +184,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -213,7 +213,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -245,7 +245,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/mods/afd/scripts.ts b/data/mods/afd/scripts.ts
index 39f538ca60..362e7c2185 100644
--- a/data/mods/afd/scripts.ts
+++ b/data/mods/afd/scripts.ts
@@ -468,8 +468,12 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/champions/abilities.ts b/data/mods/champions/abilities.ts
index 498b117e80..fe05f009d3 100644
--- a/data/mods/champions/abilities.ts
+++ b/data/mods/champions/abilities.ts
@@ -53,6 +53,13 @@ export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTa
isNonstandard: null,
},
unseenfist: {
+ onModifyMove: undefined, // no inherit
+ onHitProtect(source, target, move) {
+ if (move.flags['contact']) {
+ target.getMoveHitData(move).bypassProtect = this.effect;
+ return false;
+ }
+ },
inherit: true,
shortDesc: "This Pokemon's contact moves ignore a target's protection and deal 1/4 the usual damage.",
},
diff --git a/data/mods/champions/scripts.ts b/data/mods/champions/scripts.ts
index fd8bb8e4df..7989407636 100644
--- a/data/mods/champions/scripts.ts
+++ b/data/mods/champions/scripts.ts
@@ -30,16 +30,6 @@ export const Scripts: ModdedBattleScriptsData = {
calculatePP(move, ppUps) {
return move.noPPBoosts ? move.pp : (move.pp / 5 + 1) * 4;
},
- checkMoveBreaksProtect(move, attacker, defender, blockStatus = true) {
- if (move.flags['protect'] && (move.category !== 'Status' || blockStatus)) {
- return false;
- }
- if ((move.isZOrMaxPowered || attacker.hasAbility(['piercingdrill', 'unseenfist'])) &&
- !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) {
- defender.getMoveHitData(move).brokeProtect = true;
- }
- return true;
- },
pokemon: {
// Remove Trick Room underflow
getActionSpeed() {
@@ -383,9 +373,13 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
- if (move.isZOrMaxPowered) this.battle.add('-zbroken', target);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
+ this.battle.add('-zbroken', target);
}
// Generation 6-7 moves the check for minimum 1 damage after the final modifier...
diff --git a/data/mods/chatbats/moves.ts b/data/mods/chatbats/moves.ts
index 05372a44e8..c9817af1c2 100644
--- a/data/mods/chatbats/moves.ts
+++ b/data/mods/chatbats/moves.ts
@@ -1106,7 +1106,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/mods/gen4/moves.ts b/data/mods/gen4/moves.ts
index 9450656cd4..795aa6e7c8 100644
--- a/data/mods/gen4/moves.ts
+++ b/data/mods/gen4/moves.ts
@@ -1017,7 +1017,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
this.add('-activate', target, 'Protect');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen5/moves.ts b/data/mods/gen5/moves.ts
index 4c0eff62aa..a5c93cd67a 100644
--- a/data/mods/gen5/moves.ts
+++ b/data/mods/gen5/moves.ts
@@ -669,7 +669,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (move.id === 'feint' || this.dex.moves.get(move.id).priority <= 0) {
return;
}
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
this.add('-activate', target, 'Quick Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen6/moves.ts b/data/mods/gen6/moves.ts
index dbbbc5d088..7b77cff9b8 100644
--- a/data/mods/gen6/moves.ts
+++ b/data/mods/gen6/moves.ts
@@ -174,7 +174,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
if (move.category === 'Status' || (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes')) {
return;
}
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Wide Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen7/moves.ts b/data/mods/gen7/moves.ts
index 1978d7defd..5a9fa8c69e 100644
--- a/data/mods/gen7/moves.ts
+++ b/data/mods/gen7/moves.ts
@@ -498,7 +498,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
condition: {
inherit: true,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Protect');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen9regeneration/scripts.ts b/data/mods/gen9regeneration/scripts.ts
index 59b63fd63f..d3c1d6f7dc 100644
--- a/data/mods/gen9regeneration/scripts.ts
+++ b/data/mods/gen9regeneration/scripts.ts
@@ -108,8 +108,12 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/gen9ssb/moves.ts b/data/mods/gen9ssb/moves.ts
index 197ac22355..a09ac2d8e4 100644
--- a/data/mods/gen9ssb/moves.ts
+++ b/data/mods/gen9ssb/moves.ts
@@ -1060,7 +1060,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -1170,7 +1170,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -3995,7 +3995,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
onTryHitPriority: 3,
onTryHit(target, source, move) {
if (move.target === 'self') return;
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Alting', move.name);
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/data/mods/gen9ssb/scripts.ts b/data/mods/gen9ssb/scripts.ts
index d49854e479..b146c1d0f3 100644
--- a/data/mods/gen9ssb/scripts.ts
+++ b/data/mods/gen9ssb/scripts.ts
@@ -772,8 +772,12 @@ export const Scripts: ModdedBattleScriptsData = {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (move.isZOrMaxPowered && target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
this.battle.add('-zbroken', target);
}
diff --git a/data/mods/passiveaggressive/moves.ts b/data/mods/passiveaggressive/moves.ts
index 4e66d008a3..aaab74a98e 100644
--- a/data/mods/passiveaggressive/moves.ts
+++ b/data/mods/passiveaggressive/moves.ts
@@ -215,7 +215,7 @@ export const Moves: import('../../../sim/dex-moves').ModdedMoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
diff --git a/data/moves.ts b/data/moves.ts
index 79fa812182..2d4c053546 100644
--- a/data/moves.ts
+++ b/data/moves.ts
@@ -1006,7 +1006,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -2038,7 +2038,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -9922,7 +9922,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -11001,7 +11001,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
onTryHitPriority: 3,
onTryHit(target, source, move) {
if (move.target === 'self') return;
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
this.add('-activate', target, 'move: Mat Block', move.name);
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
@@ -12894,7 +12894,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -13981,7 +13981,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -14511,7 +14511,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
// Quick Guard blocks moves with positive priority, even those given increased priority by Prankster or Gale Wings.
// (e.g. it blocks 0 priority moves boosted by Prankster or Gale Wings; Quick Claw/Custap Berry do not count)
if (move.priority <= 0.1) return;
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
this.add('-activate', target, 'move: Quick Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
@@ -16430,7 +16430,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target, false)) return;
+ if (this.checkMoveBypassesProtect(move, source, target, false)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -17556,7 +17556,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
},
onTryHitPriority: 3,
onTryHit(target, source, move) {
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
if (move.smartTarget) {
move.smartTarget = false;
} else {
@@ -20842,7 +20842,7 @@ export const Moves: import('../sim/dex-moves').MoveDataTable = {
if (move?.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes') {
return;
}
- if (this.checkMoveBreaksProtect(move, source, target)) return;
+ if (this.checkMoveBypassesProtect(move, source, target)) return;
this.add('-activate', target, 'move: Wide Guard');
const lockedmove = source.getVolatile('lockedmove');
if (lockedmove) {
diff --git a/sim/battle-actions.ts b/sim/battle-actions.ts
index eac1caae97..911033d665 100644
--- a/sim/battle-actions.ts
+++ b/sim/battle-actions.ts
@@ -1829,9 +1829,13 @@ export class BattleActions {
// Final modifier. Modifiers that modify damage after min damage check, such as Life Orb.
baseDamage = this.battle.runEvent('ModifyDamage', pokemon, target, move, baseDamage);
- if (target.getMoveHitData(move).brokeProtect) {
+ const bypassProtect = target.getMoveHitData(move).bypassProtect;
+ if (bypassProtect) {
baseDamage = this.battle.modify(baseDamage, 0.25);
- if (move.isZOrMaxPowered) this.battle.add('-zbroken', target);
+ if (bypassProtect !== true && bypassProtect.effectType === 'Ability') {
+ this.battle.add('-ability', pokemon, bypassProtect.name);
+ }
+ this.battle.add('-zbroken', target);
}
// Generation 6-7 moves the check for minimum 1 damage after the final modifier...
diff --git a/sim/battle.ts b/sim/battle.ts
index 171f5ad7c4..f95c8ea2d5 100644
--- a/sim/battle.ts
+++ b/sim/battle.ts
@@ -1297,13 +1297,13 @@ export class Battle {
return !!move.flags['contact'];
}
- checkMoveBreaksProtect(move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus = true) {
- if (move.flags['protect'] && (move.category !== 'Status' || blockStatus)) {
+ checkMoveBypassesProtect(move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus = true) {
+ if ((move.category !== 'Status' || blockStatus) && move.flags['protect'] &&
+ this.runEvent('HitProtect', attacker, defender, move)) {
return false;
}
- if ((move.isZOrMaxPowered || attacker.hasAbility('piercingdrill')) &&
- !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) {
- defender.getMoveHitData(move).brokeProtect = true;
+ if (move.isZOrMaxPowered && !['gmaxoneblow', 'gmaxrapidflow'].includes(move.id)) {
+ defender.getMoveHitData(move).bypassProtect = true;
}
return true;
}
diff --git a/sim/dex-conditions.ts b/sim/dex-conditions.ts
index ffd3e9ecde..4fd867aaf0 100644
--- a/sim/dex-conditions.ts
+++ b/sim/dex-conditions.ts
@@ -107,6 +107,7 @@ export interface EventMethods {
onTryAddVolatile?: (
this: Battle, status: Condition, target: Pokemon, source: Pokemon, sourceEffect: Effect
) => boolean | null | void;
+ onHitProtect?: MoveEventMethods['onTryHit'];
onTryEatItem?: boolean | ((this: Battle, item: Item, pokemon: Pokemon) => boolean | void);
onTryHeal?: (
((this: Battle, relayVar: number, target: Pokemon, source: Pokemon, effect: Effect) => number | boolean | null | void)
diff --git a/sim/dex-moves.ts b/sim/dex-moves.ts
index e964450063..b1f6bc156e 100644
--- a/sim/dex-moves.ts
+++ b/sim/dex-moves.ts
@@ -302,7 +302,7 @@ interface MoveHitData {
* Is this move a Z-Move that broke the target's protection?
* (does 0.25x regular damage)
*/
- brokeProtect: boolean,
+ bypassProtect: boolean | Effect,
};
}
diff --git a/sim/global-types.ts b/sim/global-types.ts
index 8b8e780d54..d5e9a5e31c 100644
--- a/sim/global-types.ts
+++ b/sim/global-types.ts
@@ -389,7 +389,7 @@ interface ModdedBattleScriptsData extends Partial {
checkMoveMakesContact?: (
this: Battle, move: ActiveMove, attacker: Pokemon, defender: Pokemon, announcePads?: boolean
) => boolean;
- checkMoveBreaksProtect?: (
+ checkMoveBypassesProtect?: (
this: Battle, move: ActiveMove, attacker: Pokemon, defender: Pokemon, blockStatus?: boolean
) => boolean;
checkWin?: (this: Battle, faintQueue?: Battle['faintQueue'][0]) => true | undefined;
diff --git a/sim/pokemon.ts b/sim/pokemon.ts
index f7f37dad9f..3baf7e2318 100644
--- a/sim/pokemon.ts
+++ b/sim/pokemon.ts
@@ -708,7 +708,7 @@ export class Pokemon {
return move.moveHitData[slot] || (move.moveHitData[slot] = {
crit: false,
typeMod: 0,
- brokeProtect: false,
+ bypassProtect: false,
});
}